[Java]让我们来制作Minecraft的Mod吧!1.14.4版本【6. 添加配方】

(この記事は一連の解説記事の一つになります)

标题:入门指南
前一篇文章:5. 添加防具
下一篇文章:7. 添加进展

添加菜谱

さて、1. アイテムの追加、2. ブロックの追加、4. ツールの追加、5. 防具の追加と各種アイテムを追加してきましたが、これらをクラフトするレシピがまだありません。今回はいくつかのパターンのレシピを追加していきます。
1.14.4においてレシピの追加はコードを書く必要はなく、jsonベースで追加できます。

固定的食谱

让我们尝试添加一道剑的配方吧。

\src\main\resources
   ├ assets
   └ data
      └ example_mod
         ├ loot_tables
         └ recipes
            └ example_sword.json

创建一个名为 \src\main\resources\data\recipes 的文件夹,并将其中的配方文件放置进去。

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "#",
    "#",
    "X"
  ],
  "key": {
    "#": {
      "item": "example_mod:example_ingot"
    },
    "X": {
      "item": "minecraft:stick"
    }
  },
  "result": {
    "item": "example_mod:example_sword"
  }
}
キャプチャ.PNG
  "pattern": [
    " # ",
    " # ",
    " X "
  ]

无定型食谱

让我们来添加一个没有指定材料位置的不规则配方。作为例子,我们试试将两个方块分解成18个金属锭的配方。

\src\main\resources
   ├ assets
   └ data
      └ example_mod
         ├ loot_tables
         └ recipes
            └ example_ingot.json
{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    {
      "item": "example_mod:example_block"
    },
    {
      "item": "example_mod:example_block"
    }
  ],
  "result": {
    "item": "example_mod:example_ingot",
    "count": 18
  }
}
キャプチャ.PNG

精炼配方的制作方法

接下来我们将添加由熔炉进行精炼的配方。例如,当我们精炼钻石时,会得到锭。

\src\main\resources
   ├ assets
   └ data
      └ example_mod
         ├ loot_tables
         └ recipes
            └ furnace
               └ example_ingot.json

由于它似乎会将以下的所有文件都注册,所以我认为文件夹结构和文件名可以自由设定。

{
  "type": "minecraft:smelting",
  "ingredient": {
    "item": "minecraft:diamond"
  },
  "result": {
    "item": "example_mod:example_ingot"
  },
  "experience": 3.0,
  "cookingtime": 200
}
キャプチャ.PNG

发展

问:这个食谱书里没有吗?
答:只要你尝试过一次,就会被加入其中。如果想提前加入,就需要进行与进展(成就)相关的修改,但是我还没有学会,所以希望以后能添加进去。


Q. 複数の素材から同じアイテムを作りたい
A. 3つの解決法があります。
1つ目は単純にレシピのjsonファイルをその数だけ作る方法です。推奨しません。
2つ目はkeyあるいはingradientにアイテムを複数渡す方法です。

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "#",
    "#",
    "X"
  ],
  "key": {
    "#": {
      "item": "example_mod:example_ingot"
    },
    "X": [
      {
        "item": "minecraft:stick"
      },
      {
        "item": "minecraft:oak_wood"
      }
    ]
  },
  "result": {
    "item": "example_mod:example_sword"
  }
}
{
  "type": "minecraft:smelting",
  "ingredient": [
    {
      "item": "minecraft:diamond"
    },
    {
      "item": "minecraft:gold_ingot"
    }
  ],
  "result": {
    "item": "example_mod:example_ingot"
  },
  "experience": 3.0,
  "cookingtime": 200
}

(shapelessなレシピについてはこの手法が使えるか不明でした。使えなさそう?)

第三种方法是使用标签。例如,我们可以使用各种类型的原木来制作香草木炭。以下是代码示例。

{
  "type": "minecraft:smelting",
  "ingredient": {
    "tag": "minecraft:logs"
  },
  "result": "minecraft:charcoal",
  "experience": 0.15,
  "cookingtime": 200
}

このタグはnet\minecraft\tags\BlockTags.javaで宣言されています。もちろん自分で新しいタグを定義することも可能なので、代替可能な素材をまとめたタグを作り、それを使ってレシピを定めるのはよい方法でしょう。


Q. バニラのレシピを改変したい
A. 追加は容易です。変更は困難。
つまり、A→Bのクラフトに対して、C→Bを追加することは簡単ですが、A→Dのクラフトに変更することは難しいです。前者は単に新しくレシピを追加すればバニラのものと共存しますが、後者は同じ素材からなるレシピを追加してもどうやらバニラのほうが優先されるようです。そのため、レシピを登録するコードの方までさかのぼって手を加える必要がありそうです。


Q. 我想制作酿造的配方
可能的话,关于酿造配方,我认为不能进行如上述的基于JSON的补充。(参考)

请参考

食谱 – Forge 文档
Minecraft 1.14.4 Forge 模组开发 第9部分【添加食谱】

以下是下一篇文章的概述:

7. 添加进展