FML寻找物品外观的顺序是这样的:
模型加载器建立[物品-物品模型.json]映射,物品模型.json的内容确定物品使用何种模型、并指向物品贴图。
S1·建立映射我们需要在主注册类里加一个模型注册方法,类比物品注册,通过监听ModelRegistryEvent即可:
@SubscribeEvent
public static void 模型注册方法名(ModelRegistryEvent event) {
//该事件实例event本身并没有什么好操作的,主要是下面这段
//ModelLoader.setCustomModelResourceLocation(注册物品对象,meta值(损伤值),路径)
//只讲路径,需要new一个ModelResourceLocation(注册物品对象.getRegistryName(),"inventory")对象,为什么获取注册对象对象名传入呢?因为方便,待会讲,后面的"inventory"是模型分类标识,应该是自定义的。
ModelLoader.setCustomModelResourceLocation(总注册类.calorific, 0, new ModelResourceLocation(总注册类.calorific.getRegistryName(), "inventory"));
}
S2·写好这段后我们去找首篇讲的素材资源存放位置,即resources/assets,没有assets就创建assets,然后在里面创建一个你MODID的文件夹标明这是这个模组的素材文件夹,你的这个模组从此素材就放在这个文件夹,文件夹内创建models文件夹,models文件夹内创建item文件夹(没有s),item文件夹存放 物品模型.json,命名是ModelResourceLocation中传入的第一个参数决定的,例如calorific.json →:
{
"parent": "item/generated",
"textures": {
"layer0": "kalpas:items/calorific"
}
}
parent,是指模型类型;textures指可选用素材列;layer数字 代表素材位置,但此处命名格式为:MODID:items/素材名,路径填写处的素材名不需要加文件后缀,文件是png格式,素材文件存放在resources/assets/MODID/textures/items文件夹(有s)内,例如calorific.png。
C2讲过,物品注册时我们使用setUnlocalizedName("MODID.calorific")注册了物品的国际化翻译代号,如果我们不去使用,那么物品在游戏内物品名会显示为item.MODID.calorific.name,此时我们只需要在resources/assets/MODID/lang文件夹内创建:en_us.lang(必要)、zh_cn.lang(需要)并填入:
itemGroup.本模组创造背包页面名=ootwclyhe //创造页面显示名
item.MODID.calorific.name=calorific crystal //物品英文汉化
对应zh_cn.lang填写:
itemGroup.本模组创造背包页面名=ootwclyhe //创造页面显示名
item.MODID.calorific.name=热值水晶 //物品中文汉化
即可完成汉化。