【マイクラMOD開発】JSONで実装!自作レシピ(作業台・かまど)を追加する方法を解説【Java版】

はじめに

本記事では、MOD制作においてカスタムレシピを追加する方法について解説していきます。

…と聞いて、「難しい」と思った方、いらっしゃるのではないでしょうか?

Character
実際のところ、それほど難しくはありません

というのも、レシピの場合、JavaスクリプトではなくJSONで完結してしまいます。即ち、データパックやアドオンの制作と同じように作れてしまうわけですね。プログラミングは不要です!

Character
jsonとは、データを記述するためのフォーマットです

というわけで、アドオンやデータパックを作ったことのある人なら簡単に作れてしまうのではないでしょうか?

前提

とはいえ、レシピの追加もMOD制作の一環である以上は、MODを作れる環境が最低限必要です。下記の記事でMODの作り方は説明していますので、まだ環境がない場合は先に下記をご覧ください:

Character
MODを作れる環境があればレシピは簡単に作ることができます

では本題に入ります。

レシピの追加

一口で「レシピを追加」とはいっても、その種類は多岐にわたります。というのも、マインクラフトに存在するレシピというのは作業台上のものに限らず、かまどや他のMODの作業台のものなど多岐にわたるからですね。ここでは、代表的な下記のケースに限って説明します:

  • 作業台(定型レシピ
  • 作業台(不定形レシピ
  • かまど
  • MODで追加する装置のレシピ(mekanism)

他の場合も、これらの応用(特に4番目)で作れるはずです。

準備

まず、MODのプロジェクトを開き、下記のフォルダに移動します。なければ作成しましょう:

Copied!
src/main/resources/data/(MODの名前)/recipes
Character
「MODの名前」の部分は各自変更してください

このrecipesフォルダ内に、jsonファイルを作成し、そのファイル内でレシピを作成していきます。Intellijの場合は、下図のようにフォルダをホバーして右クリックすることでファイルを作成できます。

任意の名前のjsonファイルを作成しましょう。

これでレシピ追加の準備が整いました。

作業台(定型レシピ)

先ほど作成したjsonファイルを開き、まずは基本的なレシピの形である、定型レシピを定義してみましょう。以下は、その一例です:

Copied!
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    " B ",
    " A ",
    " B "
  ],
  "key": {
    "A": {
      "item": "minecraft:coal"
    },
    "B": {
      "item": "minecraft:iron_ingot"
    }
  },
  "result": {
    "item": "minecraft:emerald"
  }
}

解説を行います。上記の「pattern」にて、作業台上の配置(3×3)を定義しています。空白は何も置かないことを示します。この場合だと下図のように、中央にAのアイテムを置いてその上と下にBのアイテムを置くことを表していますね。

スクリプトにおいて、その下の”key”の部分で、このAやBのアイテムがそれぞれ何を表しているかを定義できます。ここでは、Aにはcoal(石炭)を、Bにはiron_ingot(鉄インゴット)をそれぞれ定義していますね。

Character
AとかBとか記号は何でもよくて、CやらXやら好きな記号が使えます

最後の”result”は完成品です。ここでは、minecraft:emerald(エメラルド)を指定しています。

実際にこれをビルドしてゲーム内で確認してみると、以下のように表示されるはずです:

きちんと設定した通りにアイテムを作業台に配置すると、エメラルドが生成されることが分かりますね。このようにして、作業台の定型レシピが完成します。

作業台(不定形レシピ)

続いて、不定形レシピのサンプルを示します。不定形レシピとは、その名の通り、レシピの形が一義的に定まっていないため、配置さえすれば完成するレシピのことを指します。

Copied!
{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    {
      "item": "minecraft:emerald"
    }
  ],
  "result": {
    "item": "minecraft:coal",
    "count": 1
  }
}

このように、ingredients(材料)となるアイテムをリスト形式で示すことで定義できます。この場合、エメラルド(emerald)を作業台の任意のマスに置くことで石炭(coal)が完成するわけですね。

実際にゲーム内で挙動を確認してみると、以下の画像のようになります:

きちんとエメラルドから石炭が完成していますね。

Character
複数のアイテムを原料にしたければ、リストの要素を増やせばOKです

かまど

続いて、代表的なレシピの一種である、かまどのレシピを示していきます。以下は、その例です:

Copied!
{
  "type": "minecraft:smelting",
  "ingredient": {
    "item": "minecraft:rotten_flesh"
  },
  "result": "minecraft:bone",
  "experience": 0.1,
  "cookingtime": 200
}

ingredient(原料)とresultを示すのは不定形レシピと同様ですが、前者がリストではない点と、typeがsmeltingである点が異なります。また、特筆すべき点としてはexperienceとcookingtimeをそれぞれ数値で指定できる点が挙げられます。前者は焼いたときに得られる経験値で、後者は燃焼に要する時間(ティック数)ですね。

Character
200を指定した場合、10秒になります

実際にゲーム内でこの挙動を確かめてみると、以下のようになるでしょう:

今回は原料に腐肉(rotten_flesh)を、生成物に骨(bone)をそれぞれ指定しました。このように正常に腐肉が焼けていることが分かりますね。

MODで追加する装置のレシピ

最後に、カスタム装置のレシピを示します。MODで追加するカスタム装置というのは多岐にわたるのですが、今回はサンプルとして、代表的な工業化MODの一種である、「Mekanism」における「粉砕機」のレシピを追加してみましょう:

Copied!
{
  "type": "mekanism:crushing",
  "input": {
    "ingredient": {
      "item": "minecraft:rotten_flesh"
    }
  },
  "output": {
    "item": "minecraft:bone"
  }
}

かまどのレシピとは異なり、resultではなくoutputによって生成物を定義する点に注意しましょう。また、今回は粉砕機のレシピなのでtypeをmekanism:crushingとします。これは使う装置によって異なると思います。

Character
これ、情報があまりないんですよね

実際にゲーム内で挙動を確認してみましょう:

このように、材料(今回は腐肉)がきちんと粉砕機で生成物(骨)になっていることが分かりますね。なお、今回のように外部のMODと連携するMODを作成する場合、そのための設定をする必要があります。詳細については下の記事が詳しいです:

おしまい

このようにして、カスタムレシピをMODで定義することが可能になります。他にも様々な種類のレシピがあるとは思いますが、その大部分はこれらを応用すれば実現できるはずです。意外と簡単にできるので、皆さんもお試しください。

最新情報をチェックしよう!