【レシピの作り方】

はじめに

カスタムレシピはこの環境内で使っているオリジナルアイテムの取得手段の一つとして利用しています。
ここでは本環境内で実装しているオリジナルアイテムを例に挙げてカスタムレシピの作り方をご紹介します。

※ルートテーブルと同じくカスタムレシピでもJSON形式で記載しますのでJSONの仕様を理解している前提で話を進めます。

定義ファイルの所在

ビヘイビアパックのルートディレクトリ直下にあるrecipesというディレクトリ内で定義します。
例えばバニラのビヘイビアパックの場合は以下の構成になっています。
レシピを定義しているディレクトリ
/<ビヘイビアパックのルート>
    /recipes
                    

この中に大量の定義ファイルが格納されています。
これに対して本環境の構成は以下の通り。
本環境のビヘイビアパック内の定義ファイル
/for-family
    /recipes
        furnace_sanma.json                      「焼きさんま」の精錬レシピを定義しているファイル
        hayabusa_sword_symmetry.json            「はやぶさの剣」の左右対象レシピを定義しているファイル
        hayabusa_sword.json                     「はやぶさの剣」の単体レシピを定義しているファイル
        immovable_rod_symmetry.json             「不動の杖」の左右対象レシピを定義しているファイル
        immovable_rod.json                      「不動の杖」の単体レシピを定義しているファイル
        thunder_sword_by_arrow.json             「いなずまの剣」の無形レシピ(いなずまの矢を消費)を定義しているファイル
        thunder_sword_by_stone.json             「いなずまの剣」の無形レシピ(召雷の魔石を消費)を定義しているファイル
        thunder_sword_revised_by_arrow.json     「いなずまの剣改」の無形レシピ(いなずまの矢を消費)を定義しているファイル
        thunder_sword_revised_by_stone.json     「いなずまの剣改」の無形レシピ(召雷の魔石を消費)を定義しているファイル
                    

ご覧のように本環境での定義ファイルは上記の9つのみです。
これら以外の定義ファイルはバニラのデータがデフォルトとして自動的に適用されるので気にする必要はありません。

レシピの種類

レシピには大きく分けると以下の4種類があります。
  • 炉のレシピ(minecraft:recipe_furnace)
  • 形状レシピ(minecraft:recipe_shaped)
  • 醸造レシピ(minecraft:recipe_brewing_container)
  • 鍛冶レシピ(minecraft:recipe_smithing_transform)
ここでは「炉のレシピ」と「形状レシピ」、および「無形レシピ」の作り方をご紹介します。

炉のレシピ

以下の内容は「生さんま」を「焼きさんま」へ精錬するレシピです。
このレシピで必要になるアイテムは以下の通りです。

▼精錬前のアイテム「生さんま(customize:sanma)」


▼精錬後のアイテム「焼きさんま(customize:cooked_sanma)」


レシピファイルの内容は以下の通りです。
furnace_sanma.json
{
    "format_version": "1.20.10",
    "minecraft:recipe_furnace": {
        "description": {
            "identifier": "minecraft:furnace_sanma"
        },

        "unlock": [
            {
                "context": "AlwaysUnlocked"
            }
        ],
        "tags": ["furnace", "smoker", "campfire", "soul_campfire"],
        "input": "customize:sanma",
        "output": "customize:cooked_sanma"
    }
}
                    

炉のレシピで使われるパラメータは以下の通りです。


description

・identifier
レシピの識別子を指定します。基本的に任意の文字列が指定可能です。

unlock

ここにはロックされているレシピを解除する条件を指定します。
一般的にはitemというキーと共にロックの解除条件となるアイテム名を指定するようですが、今回はcontextというキーにAlwaysUnlockedを指定する事で常に解除された状態にしています。

tags

精練に使うブロックのタグ名を指定します。
今回は以下の4つを指定しています。

  • furnace(かまど)


  • smoker(燻製器)


  • campfire(焚き火)


  • soul_campfire(魂の焚き火)

input

精錬前のアイテム名を指定します。

output

精錬後のアイテム名を指定します。
精練イメージは以下の通り。

  • かまどの場合


  • smoker(燻製器)


  • campfire(焚き火)

    焼きあがったらポップコーンのように跳ねた後アイテムドロップ状態になります。

  • soul_campfire(魂の焚き火)

    焚き火の時と同様にポップコーンのように跳ねた後アイテムドロップ状態になります。

形状レシピ

ここでは作業台を使った「不動の杖」のレシピをご紹介します。
このレシピで必要になるアイテムは以下の2点と木の棒です。

▼不動の魔石(customize:immovable_stone)


▼浮遊の羽(customize:floating_feather)


「不動の杖」のレシピは以下の3パターンで定義しています。

▼パターン①(immovable_rod.json)


▼パターン②(immovable_rod_symmetry.json)


▼パターン③(immovable_rod_symmetry.json)


レシピファイルの内容は以下の通りです。
immovable_rod.json(単体レシピ)
{
    "format_version": "1.20.10",
    "minecraft:recipe_shaped": {
        "description": {
            "identifier": "minecraft:immovable_rod"
        },
        "tags": [ "crafting_table" ],
        "assume_symmetry": false,
        "priority": 1,
        "pattern": [
            "YXY",
            " #",
            " #"
        ],
        "key": {
            "#": {
                "item": "minecraft:stick"
            },
            "X": {
                "item": "customize:immovable_stone"
            },
            "Y": {
                "item": "customize:floating_feather"
            }
        },
        "unlock": [
            {
                "context": "AlwaysUnlocked"
            }
        ],
        "result": {
            "item": "customize:immovable_rod"
        }
    }
}
                    

immovable_rod_symmetry.json(左右対称レシピ)
{
    "format_version": "1.20.10",
    "minecraft:recipe_shaped": {
        "description": {
            "identifier": "customize:immovable_rod_symmetry"
        },
        "tags": [ "crafting_table" ],
        "assume_symmetry": true,
        "priority": 1,
        "pattern": [
            "XY",
            "Y#",
            "  #"
        ],
        "key": {
            "#": {
                "item": "minecraft:stick"
            },
            "X": {
                "item": "customize:immovable_stone"
            },
            "Y": {
                "item": "customize:floating_feather"
            }
        },
        "unlock": [
            {
                "context": "AlwaysUnlocked"
            }
        ],
        "result": {
            "item": "customize:immovable_rod"
        }
    }
}
                    

形状レシピで使われるパラメータは以下の通りです。


description

・identifier
レシピの識別子を指定します。基本的に任意の文字列が指定可能でpriorityパラメータと連動します。

tags

今回は作業台を使うのでcrafting_tableを指定しています。

assume_symmetry

・左右対称で使う場合
trueを指定します。
・patternパラメータに定義したパターンのみ使う場合
falseを指定します。
今回は左右対称レシピ(immovable_rod_symmetry.json)でtrueを設定しているためpatternパラメータで指定されているパターンを左右対称で利用できます。

priority

同じアイテムのレシピが複数ファイルある場合、優先順を決める整数を指定します。
数字の小さい方が優先度が高くなり、優先度が最も高い定義ファイルが適用されます。

但しそれはdescriptionパラメータのidentifierが同じ場合に適用されるルールなので、その識別子が異なる場合はその限りではありません。
単体レシピ(immovable_rod.json)と左右対称レシピ(immovable_rod_symmetry.json)とでは、それぞれで異なる識別子を指定しているので複数のパターンを共存させています。

pattern

keyパラメータで設定されているキーを使ってクラフト時の素材の配置パターンを指定します。
慣習的に木材素材の場合は"#"が使われているようなので、今回もそれに倣って指定しています。

key

patternパラメータで使用するためのキーと素材アイテム名をペアにした定義を指定します。
キーに指定する文字については、スペース文字以外であれば基本的に何を指定しても問題ないようです。

unlock

ここにはロックされているレシピを解除する条件を指定します。
一般的にはitemというキーと共にロックの解除条件となるアイテム名を指定するようですが、今回はcontextというキーにAlwaysUnlockedを指定する事で常に解除された状態にしています。

result

クラフトの結果取得できるアイテムの属性情報を以下の形式で指定します。
・item
アイテムID
・data
アイテムのデータ値
・count
アイテムの数量
※ここではデータ値を指定できますが、▶基本の書き方のページでご紹介した方法で作ったカスタムアイテムは残念ながら指定できません(データ値が耐久値とすり替わってしまうようです)。また、関数指定などもできませんので注意が必要です。

無形レシピについて

形状レシピの派生版のようなものですが、同じように作業台をはじめ他のレシピアイテム等を使ってアイテムの配置には関係のない無形のレシピを作る事ができます。
ここでは「いなずまの剣」のレシピを例に挙げてご紹介します。

「召雷の魔石」を消費する場合

▼必要な素材


▼レシピパターン


レシピファイルの内容は以下の通りです。
thunder_sword_by_stone.json
{
    "format_version": "1.20.10",
    "minecraft:recipe_shapeless": {
        "description": {
            "identifier": "customize:thunder_sword_by_stone"
        },

        "tags": [ "crafting_table" ],
        "priority": 0,
        "ingredients": [
            {
                "item": "minecraft:netherite_sword",
                "data": 0,
                "count": 1
            },
            {
                "item": "customize:thunder_stone",
                "data": 0,
                "count": 1
            }
        ],
        "unlock": [
            {
                "context": "AlwaysUnlocked"
            }
        ],
        "result": {
            "item": "customize:thunder_sword",
            "data": 0,
            "count": 1
        }
    }
}
                    

「いなずまの矢」を消費する場合

▼必要な素材


▼レシピパターン


レシピファイルの内容は以下の通りです。
thunder_sword_by_arrow.json
{
    "format_version": "1.20.10",
    "minecraft:recipe_shapeless": {
        "description": {
            "identifier": "customize:thunder_sword_by_arrow"
        },

        "tags": [ "crafting_table" ],
        "priority": 0,
        "ingredients": [
            {
                "item": "minecraft:netherite_sword",
                "data": 0,
                "count": 1
            },
            {
                "item": "minecraft:arrow",
                "data": 411,
                "count": 1
            }
        ],
        "unlock": [
            {
                "context": "AlwaysUnlocked"
            }
        ],
        "result": {
            "item": "customize:thunder_sword",
            "data": 0,
            "count": 1
        }
    }
}
                    




無形レシピである事を表す識別子はminecraft:recipe_shapelessです。
無形レシピで使われるパラメータは以下の通りです。


description

・identifier
レシピの識別子を指定します。基本的に任意の文字列が指定可能でpriorityパラメータと連動します。

tags

今回は作業台を使うのでcrafting_tableを指定しています。

priority

同じアイテムのレシピが複数ファイルある場合、優先順を決める整数を指定します。
数字の小さい方が優先度が高くなり、優先度が最も高い定義ファイルが適用されます。

但しそれはdescriptionパラメータのidentifierが同じ場合に適用されるルールなので、その識別子が異なる場合はその限りではありません。
「召雷の魔石」を使ったレシピ(thunder_sword_by_stone.json)と「いなずまの矢」を使ったレシピ(thunder_sword_by_arrow.json)とでは、それぞれで異なる識別子を指定しているので複数のパターンを共存させています。

ingredients

素材として使用する以下のようなアイテムの属性情報をリスト形式で指定します。
・item
アイテムID
・data
アイテムのデータ値
・count
アイテムの数量
※形状レシピの時とは異なって、データ値や数量を指定できますので、▶基本の書き方のページでご紹介した方法で作ったカスタムアイテムでも指定できます。
※数量を指定した場合、1スロットに複数個のアイテムを配置しても認識してくれませんので、”1スロット=1アイテム”で配置する必要があります。

unlock

ここにはロックされているレシピを解除する条件を指定します。
一般的にはitemというキーと共にロックの解除条件となるアイテム名を指定するようですが、今回はcontextというキーにAlwaysUnlockedを指定する事で常に解除された状態にしています。

result

クラフトの結果取得できるアイテムの属性情報を以下の形式で指定します。
・item
アイテムID
・data
アイテムのデータ値
・count
アイテムの数量
※ここでも形状レシピの場合と同じ理由で、▶基本の書き方のページでご紹介した方法で作ったカスタムアイテムは残念ながら指定できません。また、関数指定などもできないようなので注意が必要です。

おわりに

マインクラフトのバージョン1.21.31時点のformat_versionの現在の最新は1.20.10です。
カスタムアイテムの場合、アイテム名の前には必ずネームスペース(今回の場合は”customize”)を付けるようにしましょう。