1. 常量池

Forge 在原版的 JSON 合成表的基础上提供的五种扩展功能之一。对于那些反复出现的 Ingredient,可以通过将其放在常量池中并复用,来让 JSON 合成表更加简洁。每一个 Mod 都有一个属于自己的常量池,位于 assets/[modid]/reicpes/_constants.json

1.1. _constants.json

_constants.json 大致长这样:

[
  {
    "name": "my_mod:ingredient_a",
    "ingredient": {
      "type": "forge:ore",
      "ore": "ingotIron"
    }
  },
  {
    "name": "my_mod:ingredient_b",
    "conditions": [
      {
        "type": "forge:false"
      }
    ],
    "ingredient": [
      {
        "item": "minecraft:diamond"
      },
      {
        "item": "minecraft:emerald"
      }
    ]
  }
]

ingredient 字段可以是一个 Ingredient 或者多个 Ingredient 组成的数组。可选的 conditions 字段将决定是否会被加载,用法和在合成表 JSON 中的 conditions 一致。

1.2. 引用 _constants.json 中的常量

参考下面这个例子:

{
  "type": "forge:ore_shaped",
  "group": "my_mod:example",
  "result": { "item": "minecraft:diamond" },
  "pattern": [
    "XYX",
    "YXY",
    "XYX"
  ],
  "key": {
    "X": { "type": "forge:ore_dict", "ore": "dyeBlue" },
    "Y": { "item": "#my_mod:ingredient_a" }
  }
}

只需要使用 item 并在常量名之前加上 # 前缀即可。