利用Forge式BlockState来减少物品的Json模型的方法
简要概述
要添加带有metadata的Item,需要一个包含metadata数量的json文件(本例中为4个)。但是可以通过使用相同的Model来仅使用两个文件来完成它。
环境
Minecraft-1.10.2
Minecraft-1.11.2
Minecraft-1.12.2
我的世界-1.10.2
我的世界-1.11.2
我的世界-1.12.2
可能是因为我还没有尝试过,所以可能还有其他版本可以使用。
追加するJSONファイル
(以下、modidはそのItemを追加するmodのID)
まずassets/modid/models/block/に以下のJSONファイルを作る
このときitemではなくblockのModelの位置に追加するのを間違えないように
{
"parent": "item/generated"
}
如果这是一个普通的以板状显示的项目,并且希望给予工具等适当的支持,就将其生成为手持设备。
对于其他的模型(包括自定义模型),只需要将其放置在assets/modid/models/block以下,并指定模型,就可以使用了。
次にassets/modid/blockstates/に以下のJSONファイルを作る
(variantsには追加するmeta数だけ書き加える)
{
"forge_marker": 1,
"defaults": {
"model": "modid:item_generated",
"transform": "forge:default-item",
"uvlock": true
},
"variants": {
"meta0": [{
"textures": {
"layer0": "modid:items/sample_item_0"
}
}],
"meta1": [{
"textures": {
"layer0": "modid:items/sample_item_1"
}
}],
"meta2": [{
"textures": {
"layer0": "modid:items/sample_item_2"
}
}],
"meta3": [{
"textures": {
"layer0": "modid:items/sample_item_3"
}
}]
}
}
テクスチャ指定はlayer0, layer1と数字が上がるごとに上に重ねて表示される(何枚いけるのかは不明)。
在Kotlin中注册Model。
接下来是刚刚添加的Model的注册。
for (i in 0 until 4) {
ModelLoader.setCustomModelResourceLocation(sampleItem, i,
ModelResourceLocation(ResourceLocation(modid, "sample_item"), "meta$i"))
}
在Java的情况下也是一样的
for (int i = 0; i < 4; i++) {
ModelLoader.setCustomModelResourceLocation(sampleItem, i,
new ModelResourceLocation(new ResourceLocation(modid, "sample_item"), "meta" + i));
}
最后
可能的是,通过调整ModelResourceLocation的第二个参数,就像对待Block一样。
{
"forge_marker": 1,
"defaults": {
"model": "modid:item_generated",
"transform": "forge:default-item",
"uvlock": true
},
"variants": {
"meta": {
"0":{ },
"1":{ },
"2":{ },
"3":{ }
}
}
我认为可以做成类似的形式,但因为麻烦所以放弃了。