差别

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

到此差别页面的链接

后一修订版
前一修订版
javamodding:5_basicitems [2022/03/30 21:37] – 创建 硫缺铅javamodding:5_basicitems [未知日期] (当前版本) – 外部编辑 (未知日期) 127.0.0.1
行 1: 行 1:
 +
 +====== 简易物品 ======
 + 在 Mindustry的开发中,**享元模式和物品与物品堆栈类**十分常见。享元模式这是一种**设计模式**,意在降低对象大小与内存占用。
 +===== 改名 =====
 +我已经见过在某些地方不知道改名的人了,所以请你搞清楚接下来每一个名字的意义,并且正确替换。
 +  * 将开头package后的**包名** example替换成你取的**包名**。
 +  * 将下面的**类名**ExampleJavaMod替换成你取的**类名**
 +  * 模组名也可更改,不过这个牵扯不大
 +  * 修改了以上名称,**全限定名(包名加类名)**也改变为你取的**包名.类名**
 +  * 注意,构造方法名和文件名要**与类名保持一致**
 +在此处我们假定本教程的包名为freedom,类名为FreedomMod,模组名为freedom mod。
 +//我特意不用一个正常的名字,以供简单地查找替换,并且听说IJ里shift+f6可以查找替换哦//
 +===== 创建ModItems类 =====
 +右键模组的包,并点击 新建-Java类,在弹出的窗口中,类名填写为ModItmes,这样 IJ 就会帮你把类建好了。//听说这就是ide的好处//
 +
 +<del>接下来,我们需要在ModItems类中实现 ContentList类,他来自mindustry.ctype.ContentList,并且还需要覆写load方法来加载。在尚未写任何实质的时候,应该看起来是这样的。</del>
 +
 +在Erekir之前,load方法需要ContentList,但在136之后,转变为如下写法:
 +<code>
 +package freedom;
 +public class ModItems {
 +    public static void load() {
 +
 +    }
 +}
 +</code>
 +
 +===== 第一个物品 =====
 +
 +//在这里我们假定我们添加的物品是铁。//
 +
 +首先,在load方法里我们输入以下语句:
 +  new Item("iron")
 +为了向计算机说明自己向模组内添加了一个物品,我们需要实例化它,即调用Item类的构造函数。这个过程我们叫做**注册**。在括号内我们需要填入物品ID。ID是一个字符串,所以我们一定要用双撇号扩起来。等到执行时,load方法会自动调用构造函数,并将物品ID传入游戏,在经历了一些巴拉巴拉的魔法之后,你的物品就被**注册**进游戏内了。
 +  
 +ID就是物品的身份证号,就像身份证号一样,我们用不同的ID区分内容。如果ID重复了,即发生了//名称冲突//,游戏会在加载时崩溃。但是我们无需担心与其他模组或原版的同ID内容重复。因为对于模组内容,在其真正的ID(也称**注册名**)前会加入模组ID(关于什么是模组ID上章有讲,所以我们的铁真正的ID是"freedom-mod-iron"
 +
 +现在我们物品已经被注册了,但是,我们根本不能访问他,游戏更不能,它毫无作用。为了能够让我们和游戏能够访问到这个物品,我们不止需要注册它,还需要将其赋值给 ModItems类的**静态字段**中,我们为了见名生义,取名为 iron,这样,代码如下:
 +<code>
 +
 +package freedom;
 +public class ModItems {
 +    public void static load() {
 +        iron = new Item("iron")
 +    }
 +}
 +</code>
 +
 +接下来,我们还需要在loadContent()方法中把ModItems类实例化并调用,并调用它的load()方法。只需要在主类当中添加如下代码:
 +<code>
 +    public static void load() {
 +        Log.info("Loading some tutorial content.");
 +        modItems = new ModItems();
 +        modItems.load();
 +    }
 + </code>
 +===== 贴图与本地化 =====
 +==== 贴图 ====
 +
 +上一章中我们说道,assets/文件夹里可以添加贴图。接下来我们就为新添加的物品加个贴图吧!
 +
 +首先在项目根目录创建 /assets/sprites/items/文件夹,我们需要把和物品**有相同ID**的贴图文件复制于此。**必须是png格式**。通常来说,游戏内的一格是32x32像素大小的,但如果你的贴图不是这个大小,也会自动缩放。
 +
 +==== 本地化 ====
 + 我们上一篇还讲到了,我们可以在assets/bundles/下放置本地化文件。//**注意:这一步不是必须的,但是一个想要开拓地球市场的模组必须的**//
 +
 +我们可以放置任意语言的语言文件,只要在游戏内已存在即可。命名格式为bundle_<语言代码>.properties,但英文特殊,只有bundle.properties。举例来说,简体中文是bundle_zh_CN.properties。
 +
 +接下来我们需要填写内容,bundle文件类似键值对,其中键名的命名规则为<类型>.<你的Mod ID>-<你的物品ID>.<功能>,其中类型可为item或block等,功能可为name或description。
 +
 +**对于键值,在编写前,请务必确认自己编辑器的编码为UTF8,右下角可看,如果不是,请立即在文件-设置-编辑器-文件编码及文件-其他设置-默认设置-编辑器-文件编码把一切可以改成UTF-8的全部改成UTF-8**然后正常填入内容即可。
 +在此处我们的代码即可如下:
 +bundle.properties
 +  item.freedom-mod-iron.name=Iron
 +  item.freedom-mod-iron.description=The most important metal.
 +bundle_zh_CN.properties
 +  item.freedom-mod-iron.name=铁
 +  item.freedom-mod-iron.description=最重要的金属