利用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":{   }
  }
}

我认为可以做成类似的形式,但因为麻烦所以放弃了。

广告
将在 10 秒后关闭
bannerAds