差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

javamodding:4_modpackcontent [2022/03/27 13:59] – 创建 硫缺铅javamodding:4_modpackcontent [未知日期] (当前版本) – 外部编辑 (未知日期) 127.0.0.1
行 1: 行 1:
 +====== 包内部结构 ======
 +
 +Jar本质是一个zip压缩文件,所以其内部就是一个目录,和json模组一样,jar模组也有结构。
 +===== mod.json =====
 +此文件位于根目录下,且和json模组的同名文件大部分相同。
 +作为java模组,首先需要添加一句""java": true"以标记此为java模组。其次,还需要将"main"的键值设为你的**全限定名**,即为包名+类名。
 +
 +例如在示例模组中,包名即为"example",类名即为"ExampleJavaMod"
 +,所以全限定名即为"example.ExampleJavaMod"
 +
 +如果您对此文件还有任何疑问,可以参考[[modding:introduction|]]了解内容,或访问[[https://hjson.github.io/|Hjson官网]]了解语法。
 +
 +===== src/ =====
 +
 +src是source <del>code</del>的缩写,意为源代码,顾名思义,几乎一切的 Java 代码都需要放置于此处。
 +
 +位于 example 包中的 ExampleJavaMod.java 文件是此模板提供的默认主类。具体内容如下:
 +<code>
 +package example;
 +
 +import arc.Core;
 +import arc.Events;
 +import arc.util.Log;
 +import arc.util.Time;
 +import mindustry.game.EventType.ClientLoadEvent;
 +import mindustry.mod.Mod;
 +import mindustry.ui.dialogs.BaseDialog;
 +
 +public class ExampleJavaMod extends Mod {
 +
 +    public ExampleJavaMod() {
 +        Log.info("Loaded ExampleJavaMod constructor.");
 +
 +        //listen for game load event
 +        Events.on(ClientLoadEvent.class, e -> {
 +            //show dialog upon startup
 +            Time.runTask(10f, () -> {
 +                BaseDialog dialog = new BaseDialog("frog");
 +                dialog.cont.add("behold").row();
 +                //mod sprites are prefixed with the mod name (this mod is called 'example-java-mod' in its config)
 +                dialog.cont.image(Core.atlas.find("example-java-mod-frog")).pad(20f).row();
 +                dialog.cont.button("I see", dialog::hide).size(100f, 50f);
 +                dialog.show();
 +            });
 +        });
 +    }
 +
 +    @Override
 +    public void loadContent() {
 +        Log.info("Loading some example content.");
 +    }
 +
 +}
 +</code>
 +因为其为Java主类,所以我们需要按照上面的内容,在mod.json内填写所需信息。**如果你的模组自定义了主类,请务必填写好全限定名,并且保证其继承了Mod 类**
 +
 +===== assets/ =====
 +此文件夹放置的是资源文件(即不是源码的文件)
 +==== assets/sprites/ ====
 +**此文件夹必须存在,否则你的模组将不会有贴图**
 +在此文件夹的**png文件(其他格式不行)**将会加载到游戏中去,可以按照如下方式使用:
 +  TextureRegion texture = Core.atlas.find("贴图文件名(没有.png)");
 +==== assets/bundles/ ====
 +此文件夹用于存放语言文件,如果只打算支持一种语言可以不写。可以按照如下方式使用:
 +   String text = Core.bundle.get("bundle文件里的键名");
 +   String text = Core.bundle.format("bundle文件里的键名,有参数时使用");
 +__<del>接下来的内容,等我看到第四章再写</del>__
 +
 +===== build.gradle =====
 +这个文件包含了项目与库的依赖关系,用于自动化编译。在之后的章节我们会对其进行必要的修改。