概要
例えばmetadataをもつItemを追加するにはそのmetadataの個数(今回は4つ)だけのjsonファイルが必要だったが、それを2個で済ませる(同じModelを使いまわす)方法
#環境
Minecraft-1.10.2
Minecraft-1.11.2
Minecraft-1.12.2
(*試していないだけでおそらく他バージョンでも可)
#追加するJSONファイル
(以下、modidはそのItemを追加するmodのID)
まずassets/modid/models/block/に以下のJSONファイルを作る
このときitemではなくblockのModelの位置に追加するのを間違えないように
item_generated.json
{
"parent": "item/generated"
}
これは普通の板状に表示されるItemの場合で、ツール等ちゃんと持たせたい場合は**generated**を**handheld**に。
その他のmodel(自作も含む)の場合も同じようにassets/modid/models/**block**以下に置いてModelを指定すれば使える。
次にassets/modid/blockstates/に以下のJSONファイルを作る
(variantsには追加するmeta数だけ書き加える)
sample_item.json
{
"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と数字が上がるごとに上に重ねて表示される(何枚いけるのかは不明)。
#Modelの登録(kotlin)
次は先ほど追加したModelの登録。
ClientProxy.kt
for (i in 0 until 4) {
ModelLoader.setCustomModelResourceLocation(sampleItem, i,
ModelResourceLocation(ResourceLocation(modid, "sample_item"), "meta$i"))
}
javaの場合も同じように
ClientProxy.java
for (int i = 0; i < 4; i++) {
ModelLoader.setCustomModelResourceLocation(sampleItem, i,
new ModelResourceLocation(new ResourceLocation(modid, "sample_item"), "meta" + i));
}
#最後に
おそらくModelResourceLocationの第2引数を弄ればBlockと同じように、
sample_item.json
{
"forge_marker": 1,
"defaults": {
"model": "modid:item_generated",
"transform": "forge:default-item",
"uvlock": true
},
"variants": {
"meta": {
"0":{ },
"1":{ },
"2":{ },
"3":{ }
}
}
のような形にもできると思うけどめんどくさいからやめた。