目录

简易物品

在 Mindustry的开发中,享元模式和物品与物品堆栈类十分常见。享元模式这是一种设计模式,意在降低对象大小与内存占用。

改名

我已经见过在某些地方不知道改名的人了,所以请你搞清楚接下来每一个名字的意义,并且正确替换。

在此处我们假定本教程的包名为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格式。通常来说,游戏内的一格是32×32像素大小的,但如果你的贴图不是这个大小,也会自动缩放。

本地化

我们上一篇还讲到了,我们可以在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=最重要的金属