カスタムクラフトレシピを追加しよう

Datapackではゲーム内のクラフトレシピをJSONファイルで自由に追加・変更できます。この記事では、作業台での「形状あり」「形状なし」レシピ、かまどのレシピ、加工台のレシピを順番に実装しながら、recipe JSONの基本的な書き方を身につけましょう。前回記事で作ったアイテムタグ(my_ores)をそのまま素材として使う実践的なサンプルも用意しています。

対応バージョン:Java Edition 1.21.11

目次

前提知識

前回記事で作った my_datapack を引き続き使います。まだ準備ができていない方は、新しいDatapackをゼロから作ってもかまいません。

recipe JSONを置くフォルダ

Java Edition 1.20.5以降、レシピファイルの保存先は data/<namespace>/recipe/(単数形)に変わっています。1.20.4以前は recipes/(複数形)でしたので、バージョンに合わせて確認してください。

my_datapack/
├── pack.mcmeta
└── data/
    └── my_datapack/
        ├── recipe/
        │   ├── magic_block.json        ← 形状ありレシピ
        │   ├── any_ore_dust.json       ← 形状なしレシピ(タグ使用)
        │   ├── magic_block_smelt.json  ← かまどレシピ
        │   └── magic_block_cut.json   ← 加工台レシピ
        └── tags/
            └── item/
                └── my_ores.json        ← 前回作ったアイテムタグ

recipe/ フォルダの中にJSONファイルを1レシピ1ファイルで作成します。ファイル名がそのままレシピのID(my_datapack:magic_block)になりますが、ゲームプレイ中にこのIDが表示されることはないので、わかりやすい名前で問題ありません。

ステップ1:形状ありレシピ(crafting_shaped)

作業台で素材の配置パターンを指定するレシピです。まず data/my_datapack/recipe/magic_block.json を作成します。

{
  "type": "minecraft:crafting_shaped",
  "key": {
    "d": "minecraft:diamond",
    "g": "minecraft:gold_ingot",
    "e": "minecraft:emerald"
  },
  "pattern": [
    "dgd",
    "geg",
    "dgd"
  ],
  "result": {
    "count": 1,
    "id": "minecraft:beacon"
  }
}

pattern は3×3のグリッドを文字列の配列で表します。各文字が key のどの素材に対応するかを定義します。スペース(半角空白)は「空のスロット」を意味します。resultid に出力アイテムのID、count に個数を書きます。

作業台を開き、上記パターン通りに素材を配置してビーコンがクラフト可能になっている状態のスクリーンショット

ステップ2:形状なしレシピ(crafting_shapeless)

素材の配置順序・場所を問わないレシピです。前回記事で作った #my_datapack:my_ores アイテムタグを素材に使います。data/my_datapack/recipe/any_ore_dust.json を作成します。

{
  "type": "minecraft:crafting_shapeless",
  "ingredients": [
    "minecraft:flint",
    "#my_datapack:my_ores"
  ],
  "result": {
    "count": 1,
    "id": "minecraft:redstone"
  }
}

ingredients に素材のリストを並べます。アイテムIDは文字列でそのまま書き、アイテムタグは先頭に # をつけた文字列で書きます(1.20.5以降の新フォーマット)。タグを使うと、鉄インゴット・金インゴット・ダイヤモンド・エメラルドのどれと火打ち石を組み合わせても同じ結果が出るレシピを1ファイルで定義できます。

作業台でダイヤモンド+火打ち石でレッドストーンが1個クラフトできている画面→金インゴットでも同様に成立する様子のGIF

ステップ3:かまどレシピ(smelting)

かまどで精錬するレシピです。data/my_datapack/recipe/magic_block_smelt.json を作成します。

{
  "type": "minecraft:smelting",
  "ingredient": "minecraft:netherrack",
  "result": {
    "id": "minecraft:magma_block"
  },
  "experience": 0.7,
  "cookingtime": 100
}

ingredient(単数形)に素材を1つ書きます。experience は精錬後にもらえる経験値量(小数可)、cookingtime は精錬にかかるtick数です(20tick = 1秒)。通常のかまどのデフォルトは200tickです。高速精錬にしたければ値を小さく、ゆっくりにしたければ大きくしましょう。

同様のタイプとして、高速精錬かまど用の minecraft:blasting、燻製器用の minecraft:smoking、焚き火用の minecraft:campfire_cooking があります。書き方はほぼ同じで、"type" を変えるだけです。

焼いている画像

ステップ4:加工台レシピ(stonecutting)

加工台(Stonecutter)で使えるレシピです。data/my_datapack/recipe/magic_block_cut.json を作成します。

{
  "type": "minecraft:stonecutting",
  "ingredient": "minecraft:quartz_block",
  "result": {
    "id": "minecraft:quartz_bricks",
    "count": 4
  }
}

加工台レシピは patternkey も不要です。ingredient に素材、result に出力アイテム、count に個数を書くだけです。1素材→複数種類の出力を作りたい場合は、ファイルを出力アイテムの数だけ増やして別々に定義します。

加工台のUIを開き、クォーツブロックを素材にクォーツレンガが4個得られるレシピが表示されている状態のスクリーンショット

動作確認の手順

  1. ファイルを保存したら、ゲーム内で /reload を実行してDatapackを再読み込みする
  2. チャットに赤いエラーメッセージが出た場合はJSONのカンマ・括弧の閉じ忘れ、または "type" のタイポを疑う
  3. クリエイティブモードのレシピブックを開き、追加したレシピが表示されているか確認する
  4. 実際に作業台・かまど・加工台に素材を入れて正しくクラフトできることを確認する

レシピブックに表示されない場合は "type" の文字列が正確かどうかを確認しましょう。スペルミスがあると静かに無効化されることがあります。

まとめ

  • レシピファイルは data/<namespace>/recipe/ フォルダに1レシピ1ファイルで置く(1.20.5以降は単数形)
  • 形状ありレシピ(crafting_shaped)は patternkey で配置を定義し、形状なし(crafting_shapeless)は ingredients に素材を列挙するだけでよい
  • 素材はアイテムIDをそのまま文字列で、タグは #namespace:tagname の文字列で書く(1.20.5以降の新フォーマット)。複数アイテムに対応した柔軟なレシピが1ファイルで書ける
  • かまどレシピは smeltingblastingsmoking と種類があり、cookingtimeexperience で時間と経験値を調整できる
  • 加工台レシピ(stonecutting)は配置不要でシンプル。複数出力先はファイルを分けて対応する

次の記事「ドロップテーブルをカスタマイズしよう(loot_table)」では、モブのドロップやブロックの収穫物をJSONで自由に書き換える方法を解説します。

関連ツール

recipe JSONの書き方に慣れてきたら、GUIで素材を選ぶだけでJSONを自動生成してくれる外部ツールも活用してみましょう。Misode’s Generator(Recipe)は、レシピタイプや素材をブラウザ上で選択するだけでそのまま使えるJSONを出力してくれます。バージョン切り替えにも対応しているので、書き方の確認やプロトタイプ作りに重宝します。仕組みを理解した上で補助的に使うと、制作スピードが一気に上がります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次