【マインクラフト（統合版）】カスタムレシピの作り方まとめ

# はじめに

ここでは以下のページでご紹介させて頂いたアドオンパックで実装しているオリジナルアイテムを例に挙げてカスタムレシピの作り方をご紹介します。

https://qiita.com/glasses_seven/items/a7d276b44c9437e7b0a4/

https://qiita.com/glasses_seven/items/7a174722c9030e669eac

カスタムレシピはこの環境内で使っているオリジナルアイテムの取得手段の一つとして利用しています。

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


# 定義ファイルの所在

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

```text:レシピを定義しているディレクトリ
/<ビヘイビアパックのルート>
    /recipes
```

この中に大量の定義ファイルが格納されています。
これに対してカスタムビヘイビアパックの構成は以下の通り。

```text:カスタムビヘイビアパック内の定義ファイル
/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     「いなずまの剣改」の無形レシピ（召雷の魔石を消費）を定義しているファイル
```

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


# レシピの種類

レシピには大きく分けると以下の４種類があります。

<ul>
    <li>炉のレシピ（minecraft:recipe_furnace）</li>
    <li>形状レシピ（minecraft:recipe_shaped）</li>
    <li>醸造レシピ（minecraft:recipe_brewing_container）</li>
    <li>鍛冶レシピ（minecraft:recipe_smithing_transform）</li>
</ul>

ここでは「炉のレシピ」と「形状レシピ」、および「無形レシピ」の作り方をご紹介します。


# 炉のレシピ

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

▼精錬前のアイテム「生さんま（customize:sanma）」
![生さんま](https://socket-manager.github.io/document/minecraft-contents/img/recipe/sanma.png "生さんま")

▼精錬後のアイテム「焼きさんま（customize:cooked_sanma）」
![焼きさんま](https://socket-manager.github.io/document/minecraft-contents/img/recipe/cooked_sanma.png "焼きさんま")

レシピファイルの内容は以下の通りです。

```json: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】

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

### 【unlock】

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

### 【tags】

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

<ul>
    <li>
        furnace（かまど）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/furnace.png" /><br /><br />
    </li>
    <li>
        smoker（燻製器）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/smoker.png" /><br /><br />
    </li>
    <li>
        campfire（焚き火）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/campfire.png" /><br /><br />
    </li>
    <li>
        soul_campfire（魂の焚き火）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/soul_campfire.png" />
    </li>
</ul>

### 【input】

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

### 【output】

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

<ul>
    <li>
        かまどの場合<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/furnace_image.png" /><br /><br />
    </li>
    <li>
        smoker（燻製器）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/smoker_image.png" /><br /><br />
    </li>
    <li>
        campfire（焚き火）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/campfire.gif" /><br />
        焼きあがったらポップコーンのように跳ねた後アイテムドロップ状態になります。<br /><br />
    </li>
    <li>
        soul_campfire（魂の焚き火）<br />
        <img src="https://socket-manager.github.io/document/minecraft-contents/img/recipe/soul_campfire.gif" /><br />
        焚き火の時と同様にポップコーンのように跳ねた後アイテムドロップ状態になります。
    </li>
</ul>


# 形状レシピ

ここでは作業台を使った以下の「不動の杖」のレシピをご紹介します。

https://qiita.com/glasses_seven/items/cd55c6bd721a9ced1f06/

このレシピで必要になるアイテムは以下の２点と木の棒です。

▼不動の魔石（customize:immovable_stone）
![不動の魔石](https://socket-manager.github.io/document/minecraft-contents/img/recipe/immovable-stone.png "不動の魔石")

▼浮遊の羽（customize:floating_feather）
![浮遊の羽](https://socket-manager.github.io/document/minecraft-contents/img/recipe/floating-feather.png "浮遊の羽")

これらのアイテムの詳細は以下のページでご紹介させて頂いております。

https://qiita.com/glasses_seven/items/0529d05f2b833a9f9cae/

また、釣れるアイテムの例として以下のページでもご紹介させて頂いております。

https://qiita.com/glasses_seven/items/5af11b4a4766af93ea37/

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

▼パターン①（immovable_rod.json）
![レシピパターン①](https://socket-manager.github.io/document/minecraft-contents/img/recipe/pattern-immovable-rod.png "レシピパターン①")

▼パターン②（immovable_rod_symmetry.json）
![レシピパターン②](https://socket-manager.github.io/document/minecraft-contents/img/recipe/pattern-immovable-rod-symmetry1.png "レシピパターン②")

▼パターン③（immovable_rod_symmetry.json）
![レシピパターン③](https://socket-manager.github.io/document/minecraft-contents/img/recipe/pattern-immovable-rod-symmetry2.png "レシピパターン③")

レシピファイルの内容は以下の通りです。

```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"
        }
    }
}
```

```json: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】

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

### 【tags】

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

### 【assume_symmetry】

<dl>
    <dt>・左右対称で使う場合</dt>
    <dd>trueを指定します。</dd>
    <dt>・patternパラメータに定義したパターンのみ使う場合</dt>
    <dd>falseを指定します。</dd>
</dl>

### 【priority】

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

但しそれはdescriptionパラメータの`identifier`が同じ場合に適用されるルールなので、その識別子が異なる場合はその限りではありません。

単体レシピ（immovable_rod.json）と左右対称レシピ（immovable_rod_symmetry.json）とでは、それぞれで異なる識別子を指定しているので複数のパターンを共存させています。

### 【pattern】

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

### 【key】

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

### 【unlock】

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

### 【result】

クラフトの結果取得できるアイテムの属性情報を以下の形式で指定します。
<dl>
    <dt>・item</dt>
    <dd>アイテムID</dd>
    <dt>・data</dt>
    <dd>アイテムのデータ値</dd>
    <dt>・count</dt>
    <dd>アイテムの数量</dd>
</dl>

:::note warn
※ここではデータ値を指定できますが、<a href="https://qiita.com/glasses_seven/items/f0e745f9715e6ac34560/">&gt;&gt; ルートテーブルの書き方</a>のページでご紹介した方法で作ったカスタムアイテムは残念ながら指定できません（データ値が耐久値とすり替わってしまうようです）。また、関数指定などもできませんので注意が必要です。
:::


# 無形レシピについて

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

https://qiita.com/glasses_seven/items/b45a80c91243177ff37f/

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

▼必要な素材
![「いなずまの剣」（「召雷の魔石」を消費）素材](https://socket-manager.github.io/document/minecraft-contents/img/recipe/material-list-thunder-sword-by-stone.png "「いなずまの剣」（「召雷の魔石」を消費）素材")
 
▼レシピパターン
![「いなずまの剣」（「召雷の魔石」を消費）レシピ](https://socket-manager.github.io/document/minecraft-contents/img/recipe/recipe-thunder-sword-by-stone.png "「いなずまの剣」（「召雷の魔石」を消費）レシピ")

レシピファイルの内容は以下の通りです。

```json: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
        }
    }
}
```

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

▼必要な素材
![「いなずまの剣」（「いなずまの矢」を消費）素材](https://socket-manager.github.io/document/minecraft-contents/img/recipe/material-list-thunder-sword-by-arrow.png "「いなずまの剣」（「いなずまの矢」を消費）素材")
 
▼レシピパターン
![「いなずまの剣」（「いなずまの矢」を消費）レシピ](https://socket-manager.github.io/document/minecraft-contents/img/recipe/recipe-thunder-sword-by-arrow.png "「いなずまの剣」（「いなずまの矢」を消費）レシピ")

レシピファイルの内容は以下の通りです。

```json: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
        }
    }
}
```

---

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

### 【description】

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

### 【tags】

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

### 【priority】

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

但しそれはdescriptionパラメータの`identifier`が同じ場合に適用されるルールなので、その識別子が異なる場合はその限りではありません。

「召雷の魔石」を使ったレシピ（thunder_sword_by_stone.json）と「いなずまの矢」を使ったレシピ（thunder_sword_by_arrow.json）とでは、それぞれで異なる識別子を指定しているので複数のパターンを共存させています。

### 【ingredients】

素材として使用する以下のようなアイテムの属性情報をリスト形式で指定します。
<dl>
    <dt>・item</dt>
    <dd>アイテムID</dd>
    <dt>・data</dt>
    <dd>アイテムのデータ値</dd>
    <dt>・count</dt>
    <dd>アイテムの数量</dd>
</dl>

:::note info
形状レシピの時とは異なって、データ値や数量を指定できますので、<a href="https://qiita.com/glasses_seven/items/f0e745f9715e6ac34560/">&gt;&gt; ルートテーブルの書き方</a>のページでご紹介した方法で作ったカスタムアイテムでも指定できます。
:::

:::note warn
数量を指定した場合、１スロットに複数個のアイテムを配置しても認識してくれませんので、”１スロット＝１アイテム”で配置する必要があります。
:::

### 【unlock】

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

### 【result】

クラフトの結果取得できるアイテムの属性情報を以下の形式で指定します。
<dl>
    <dt>・item</dt>
    <dd>アイテムID</dd>
    <dt>・data</dt>
    <dd>アイテムのデータ値</dd>
    <dt>・count</dt>
    <dd>アイテムの数量</dd>
</dl>

:::note warn
ここでも形状レシピの場合と同じ理由で、<a href="https://qiita.com/glasses_seven/items/f0e745f9715e6ac34560/">&gt;&gt; ルートテーブルの書き方</a>のページでご紹介した方法で作ったカスタムアイテムは残念ながら指定できません。また、関数指定などもできないようなので注意が必要です。
:::


# おわりに

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