====== 简易物品 ====== 在 Mindustry的开发中,**享元模式和物品与物品堆栈类**十分常见。享元模式这是一种**设计模式**,意在降低对象大小与内存占用。 ===== 改名 ===== 我已经见过在某些地方不知道改名的人了,所以请你搞清楚接下来每一个名字的意义,并且正确替换。 * 将开头package后的**包名** example替换成你取的**包名**。 * 将下面的**类名**ExampleJavaMod替换成你取的**类名** * 模组名也可更改,不过这个牵扯不大 * 修改了以上名称,**全限定名(包名加类名)**也改变为你取的**包名.类名** * 注意,构造方法名和文件名要**与类名保持一致** 在此处我们假定本教程的包名为freedom,类名为FreedomMod,模组名为freedom mod。 //我特意不用一个正常的名字,以供简单地查找替换,并且听说IJ里shift+f6可以查找替换哦// ===== 创建ModItems类 ===== 右键模组的包,并点击 新建-Java类,在弹出的窗口中,类名填写为ModItmes,这样 IJ 就会帮你把类建好了。//听说这就是ide的好处// 接下来,我们需要在ModItems类中实现 ContentList类,他来自mindustry.ctype.ContentList,并且还需要覆写load方法来加载。在尚未写任何实质的时候,应该看起来是这样的。 在Erekir之前,load方法需要ContentList,但在136之后,转变为如下写法: package freedom; public class ModItems { public static void load() { } } ===== 第一个物品 ===== //在这里我们假定我们添加的物品是铁。// 首先,在load方法里我们输入以下语句: new Item("iron") 为了向计算机说明自己向模组内添加了一个物品,我们需要实例化它,即调用Item类的构造函数。这个过程我们叫做**注册**。在括号内我们需要填入物品ID。ID是一个字符串,所以我们一定要用双撇号扩起来。等到执行时,load方法会自动调用构造函数,并将物品ID传入游戏,在经历了一些巴拉巴拉的魔法之后,你的物品就被**注册**进游戏内了。 ID就是物品的身份证号,就像身份证号一样,我们用不同的ID区分内容。如果ID重复了,即发生了//名称冲突//,游戏会在加载时崩溃。但是我们无需担心与其他模组或原版的同ID内容重复。因为对于模组内容,在其真正的ID(也称**注册名**)前会加入模组ID(关于什么是模组ID上章有讲,所以我们的铁真正的ID是"freedom-mod-iron"。 现在我们物品已经被注册了,但是,我们根本不能访问他,游戏更不能,它毫无作用。为了能够让我们和游戏能够访问到这个物品,我们不止需要注册它,还需要将其赋值给 ModItems类的**静态字段**中,我们为了见名生义,取名为 iron,这样,代码如下: package freedom; public class ModItems { public void static load() { iron = new Item("iron") } } 接下来,我们还需要在loadContent()方法中把ModItems类实例化并调用,并调用它的load()方法。只需要在主类当中添加如下代码: public static void load() { Log.info("Loading some tutorial content."); modItems = new ModItems(); modItems.load(); } ===== 贴图与本地化 ===== ==== 贴图 ==== 上一章中我们说道,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=最重要的金属