【マイクラ】ルートテーブルとは?仕組み・戦利品・データ仕様を解説【Java版】

この記事はマイクラJava版のルートテーブル解説です
統合版(BE)のアドオン・ビヘイビアーパックとは仕様が異なります
初心者さん向けに、データパック作成前の基礎知識として読める内容にしています

こんにちは。ゆずかきです。

マイクラで遊んでいると、チェストの中身、モンスターのドロップ、ブロックを壊した時のアイテム、釣りの戦利品など、いろんな場面で「何が出るか」が決まっていますよね。

この戦利品の中身を決めている仕組みが、今回紹介するルートテーブルです。

普段のサバイバルではあまり意識しない部分ですが、データパックを作り始めると、かなり早い段階で出てくる重要な仕様です。

例えば、

  • ゾンビを倒した時のドロップを変えたい
  • ダンジョンチェストの中身を自作したい
  • ブロックを壊した時に別アイテムを落としたい
  • 配布ワールド用にランダム報酬を作りたい
  • コマンドで戦利品テーブルを呼び出したい

こういうことをしたい時、ほぼ確実にルートテーブルの知識が必要になります。

ただ、最初に見るとJSONの記述がずらっと出てきて「うわ、難しそう…」となりがちです。
筆者も最初は、poolsentriesfunctionsconditionsの違いが全然分からずに止まりました。

でも、仕組みそのものはそこまで怖くありません。
どの場面で、どの候補から、何回抽選して、どんな条件でアイテムを出すかを決めているだけです。

この記事では、マイクラJava版のルートテーブルについて、仕組み・戦利品の決まり方・データパック上の置き場所・よくある失敗まで順番に解説していきますね!

※本記事はマイクラJava版のデータパック仕様を前提にしています。
※ルートテーブルの細かい書式はバージョンで変わることがあります。特にJava版1.21以降はフォルダ名変更に注意してください。
※仕様情報はMinecraft Wiki(英語版)とMinecraft公式サイトを確認したうえで整理しています。


目次

1. ルートテーブルとは?
2. ルートテーブルが使われる場面
3. 戦利品が決まる基本の流れ
4. ルートテーブルの基本構造を読む
5. pools・entries・weightの考え方
6. conditionsとfunctionsの役割
7. Java版データパックでの置き場所
8. 最小構成のルートテーブル例
9. コマンドでルートテーブルを呼び出す方法
10. ルートテーブル作成でよくあるミス
11. ルートテーブルで出来ること・出来ないこと
12. まとめ
13. 参考文献

この記事で分かること
・マイクラJava版のルートテーブルの基本
・チェスト・Mobドロップ・ブロックドロップ・釣りとの関係
・データパック内での置き場所と、1.21以降の注意点
・初心者がつまずきやすいJSONの読み方


1. ルートテーブルとは?

ルートテーブルとは、マイクラ内でどのアイテムを、どの条件で、どれくらい出すかを決めているJSON形式のデータです。

英語ではLoot Tableと呼ばれます。
日本語で言うと「戦利品表」みたいなイメージですね。

具体的には、次のような場面で使われます。

  • チェストを開けた時の中身
  • Mobを倒した時のドロップアイテム
  • ブロックを壊した時のドロップアイテム
  • 釣りで手に入るアイテム
  • ピグリン交易や猫の朝ギフトなど、一部のゲーム内報酬

普段のサバイバルで言うなら、

「ゾンビを倒したら腐った肉が出る」
「石を壊したら丸石が出る」
「ダンジョンのチェストから名札や金のリンゴが出ることがある」

こういう結果の裏側に、ルートテーブルの仕組みがあります。

大事なのは、ルートテーブルはアイテム生成のための仕組みということです。
経験値そのものや、スライムが分裂するようなアイテム以外の挙動まで全部ルートテーブルで決まっているわけではありません。

ここを勘違いすると、

「ゾンビの経験値をルートテーブルで増やしたい」
「スライムの分裂数をルートテーブルで変えたい」

みたいな方向で詰まりやすいです。
ルートテーブルで触れるのは、基本的に出てくるアイテム側だと考えてくださいね。


2. ルートテーブルが使われる場面

ルートテーブルは、思った以上にいろんな場所で使われています。
初心者さん向けに、まずは代表的な場面を表にして整理しますね。

👇ルートテーブルが関係する代表例です。

分類 何を決めているか
チェスト ダンジョン・廃坑・古代都市など チェストの中身や出現数
Mob ゾンビ・スケルトン・クリーパーなど 倒した時のドロップ
ブロック 石・草ブロック・鉱石など 壊した時に落ちるアイテム
釣り 魚・宝・ゴミ 釣れるアイテムの候補
ゲームプレイ報酬 ピグリン交易・猫の朝ギフトなど 特殊な報酬アイテム


特にサバイバルで体感しやすいのは、チェストの中身Mobドロップです。

「同じ構造物なのにチェストの中身が毎回違う」
「幸運やドロップ増加でアイテム数が変わる」
「何も落とさない時がある」

こういうランダム感を作っているのが、ルートテーブルの面白いところです。

体験談
筆者は最初、チェストの中身はワールド生成時に完全固定で作られていると思っていました。
でも実際には、チェストが開かれるタイミングや戦利品テーブルの指定によって中身が決まる場面があり、ここを理解すると配布マップ作りの自由度がかなり広がります。


3. 戦利品が決まる基本の流れ

ルートテーブルの処理は、慣れるまでは複雑に見えます。
ですが、考え方は次の流れで大丈夫です。

  1. どのルートテーブルを使うか決まる
  2. その中のpoolsを見る
  3. rollsの回数だけ抽選する
  4. entriesの候補からアイテムを選ぶ
  5. conditionsで必要に応じて条件判定する
  6. functionsで数や性質を調整する
  7. 最終的な戦利品として出る

例えば、Mobを倒した時なら、

ゾンビを倒す
👉ゾンビ用のルートテーブルが呼ばれる
👉腐った肉などの候補から抽選される
👉ドロップ増加などの条件・補正が入る
👉最終的なアイテムが落ちる

という流れです。

チェストの場合も考え方は同じで、

チェストが戦利品テーブルを持っている
👉開封時などにルートテーブルが処理される
👉候補アイテムから抽選される
👉チェスト内にアイテムが入る

というイメージです。

難しそうに見えるJSONも、結局はこの流れを文章ではなくデータで書いているだけです。


4. ルートテーブルの基本構造を読む

ルートテーブルはJSONで書かれています。
最小限の見た目は、だいたい次のような構造です。

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond"
        }
      ]
    }
  ]
}

これだけ見ると英単語だらけですが、意味はそこまで難しくありません。

  • type:どの場面のルートコンテキストとして検査するか
  • pools:抽選グループ
  • rolls:そのグループで何回抽選するか
  • entries:抽選候補
  • type: minecraft:item:候補がアイテムであること
  • name:実際に出すアイテムID

上の例なら、

チェスト用の前提情報で扱うルートテーブルとして、1回抽選して、ダイヤモンドを出す

という意味になります。

※実際のバニラのルートテーブルはもっと複雑です。
※初心者さんは、まずこの最小構成を読めるようになれば十分です。

typeの代表例

typeには、そのルートテーブルをどの場面の前提情報で検査するかを指定します。
代表例は下記です。

  • minecraft:chest:チェストの戦利品
  • minecraft:block:ブロック破壊時のドロップ
  • minecraft:entity:Mobなどエンティティのドロップ
  • minecraft:fishing:釣りの戦利品

typeはファイルの置き場所を決める項目ではありません。
指定した場面で使える条件・関数かどうかを、読み込み時に確認しやすくするための項目です。

ここが呼び出し場面と合っていないと、読み込み時の警告や、条件・関数が想定どおりの前提情報を受け取れない原因になります。
特にブロック用とMob用では、参照できる情報が違います。

例えば、ブロック破壊なら「使った道具」や「壊したブロックの状態」が関係します。
Mobドロップなら「倒した相手」「倒したプレイヤー」「ドロップ増加」などが関係します。

この違いがあるので、typeは飾りではなく、かなり大事な項目です。


5. pools・entries・weightの考え方

ルートテーブルで最初につまずきやすいのが、poolsentriesです。
筆者なりに言うと、

pools = 抽選箱
entries = 抽選箱の中身
rolls = 何回くじを引くか
weight = 当たりやすさ

というイメージです。

例えば、次のJSONを見てください。

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:apple",
          "weight": 3
        },
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond",
          "weight": 1
        }
      ]
    }
  ]
}

この場合、rollsが1なので、1回だけ抽選します。
候補はリンゴとダイヤモンドです。

weightはリンゴが3、ダイヤモンドが1。
つまり、候補の重み合計は4です。

  • リンゴ:3/4
  • ダイヤモンド:1/4

という確率イメージになります。

※実際のバニラのルートテーブルでは、ここに条件や関数が重なります。
※空の候補を入れることで「何も出ない」を表現することもあります。

rollsを増やすとどうなる?

rollsを3にすると、同じ抽選箱から3回くじを引くような挙動になります。

"rolls": 3

この場合、リンゴが複数回出ることもありますし、ダイヤモンドが複数回選ばれることもあります。
チェスト戦利品で「いろいろなアイテムが何枠か入る」ように見えるのは、こうした複数回抽選が関係しています。

初心者向けの考え方
1個だけ出したいならrolls: 1
複数枠にしたいならrollsを増やす。
レアアイテムにしたいならweightを低くする。

まずはこれだけ覚えれば大丈夫です👌


6. conditionsとfunctionsの役割

ルートテーブルを少し触り始めると、conditionsfunctionsが出てきます。
ここも名前が似ていてややこしいですが、役割は全然違います。

  • conditions:出すかどうかの条件
  • functions:出すアイテムをどう加工するか

conditionsは「条件を満たしたら出す」

conditionsは、その名の通り条件です。
例えば、

  • ランダム確率で出す
  • 特定の道具で壊した時だけ出す
  • シルクタッチがある時だけ出す
  • プレイヤーが倒した時だけ出す

こういう判定に使われます。

ブロックドロップで言うと、シルクタッチの有無で落ちるアイテムが変わる場面がありますよね。
草ブロックを普通に壊すと土、シルクタッチで壊すと草ブロック本体が落ちる…というような挙動です。

こうした「条件によって結果を分ける」処理に、conditionsが関わります。

functionsは「アイテムの数や中身を加工する」

functionsは、出ることが決まったアイテムを加工する処理です。

代表的には、

  • 個数を変える
  • 名前や説明文を付ける
  • エンチャントを付ける
  • アイテムのデータを調整する
  • 幸運・ドロップ増加などに応じて個数を増やす

といった用途があります。

例えば、ダイヤモンドを1~3個出したい場合は、set_countのような関数を使って個数を変えます。

{
  "function": "minecraft:set_count",
  "count": {
    "type": "minecraft:uniform",
    "min": 1,
    "max": 3
  }
}

これで「1個固定」ではなく、1~3個の範囲で出すような指定ができます。

覚え方
conditionsは門番です。条件を満たさないと通しません。
functionsは加工係です。通ったアイテムの数や性質を調整します。

この2つを分けて考えると、ルートテーブルの読みやすさが一気に上がります。


7. Java版データパックでの置き場所

Java版で自作ルートテーブルを使う場合、基本的にはデータパック内にJSONファイルとして配置します。

ここで、Java版1.21以降はかなり重要な注意点があります。

Java版1.21以降では、ルートテーブルのフォルダ名はloot_tableです。
Java版1.21より前では、loot_tablesでした。

ここ、本当に間違えやすいです。
ネット上の記事や古い解説ではloot_tablesになっている場合があります。
古い情報をそのまま使うと、Java版1.21以降では読み込まれずに「なぜか動かない」状態になりやすいです。

Java版1.21以降の配置例

自作のルートテーブルを作る場合、例としては次のような場所に置きます。

データパック名/
├ pack.mcmeta
└ data/
   └ yuzukaki/
      └ loot_table/
         └ test/
            └ diamond_one.json

この場合、呼び出す時の名前は、

yuzukaki:test/diamond_one

になります。

バニラのドロップを上書きする場合

例えば、バニラの土ブロックのドロップを上書きしたい場合は、名前空間をminecraftにして、ブロック側のパスに合わせます。

データパック名/
├ pack.mcmeta
└ data/
   └ minecraft/
      └ loot_table/
         └ blocks/
            └ dirt.json

このように置くと、土ブロックのルートテーブルを上書きする形になります。

ただし、バニラのドロップ上書きはワールドの遊び心地に直結します。
サバイバル本番ワールドでいきなり試すのではなく、必ずテストワールドで確認しましょう。

注意!
ルートテーブルの書式ミスがあると、データパックの再読み込み時にエラーが出たり、意図したドロップにならなかったりします。
/reload後のログや、ゲーム内の反応をよく確認してくださいね。


8. 最小構成のルートテーブル例

ここでは、初心者さん向けに「まず動きを理解するための最小例」を載せます。

例:呼び出すとダイヤモンドを1個出すルートテーブル

ファイル名:

data/yuzukaki/loot_table/test/diamond_one.json

中身:

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond"
        }
      ]
    }
  ]
}

このルートテーブルは、かなり単純です。

  • チェスト系の戦利品として扱う
  • 抽選箱は1つ
  • 抽選回数は1回
  • 候補はダイヤモンド1種類

つまり、呼び出せばダイヤモンドが1個出ます。

例:ダイヤモンドを1~3個出す

個数をランダムにしたい場合は、functionsを追加します。

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 1,
                "max": 3
              }
            }
          ]
        }
      ]
    }
  ]
}

この場合、ダイヤモンドが1~3個の範囲で出ます。

例:リンゴを出やすく、ダイヤモンドをレアにする

{
  "type": "minecraft:chest",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "minecraft:apple",
          "weight": 5
        },
        {
          "type": "minecraft:item",
          "name": "minecraft:diamond",
          "weight": 1
        }
      ]
    }
  ]
}

この例だと、リンゴの方が出やすく、ダイヤモンドはレア枠になります。

体験談
最初からバニラ並みに複雑なルートテーブルを作ろうとすると、ほぼ確実に混乱します。
まずは「1個だけ出す」「個数を変える」「重みを変える」の3つを練習するのがおすすめです。


9. コマンドでルートテーブルを呼び出す方法

作ったルートテーブルは、/lootコマンドで呼び出して確認できます。

Java版の基本形は、

/loot <出力先> <元になるルートテーブルなど>

という形です。

自分に戦利品を渡す

例えば、自作したルートテーブルyuzukaki:test/diamond_oneを自分に渡すなら、次のようにします。

/loot give @s loot yuzukaki:test/diamond_one

これで、指定したルートテーブルの結果が自分のインベントリに入ります。

足元にアイテムとして出す

ワールド上にアイテムとして出したい場合は、spawnを使います。

/loot spawn ~ ~ ~ loot yuzukaki:test/diamond_one

これで、実行位置に戦利品がアイテムとして出ます。

バニラのチェスト戦利品を試す

例えば、ダンジョンチェスト系のルートテーブルを試すなら、次のような形で確認できます。

/loot give @s loot minecraft:chests/simple_dungeon

何度か実行すると、出るアイテムが毎回変わることがあります。
これがルートテーブルの抽選です。

確認のコツ
ルートテーブルを作ったら、いきなりチェストやMobに組み込む前に、まず/loot giveで動作確認すると楽です。
エラーなのか、配置ミスなのか、単に確率で出ていないだけなのかを切り分けやすくなります。


10. ルートテーブル作成でよくあるミス

ルートテーブルは、ほんの少しのミスで動かなくなります。
初心者さんが詰まりやすいポイントをまとめますね。

1. フォルダ名が違う

Java版1.21以降なら、基本はloot_tableです。
古い解説のままloot_tablesにしていると、読み込まれない原因になります。

〇 1.21以降:loot_table
× 1.21以降で古い指定:loot_tables

※1.21より前のデータパックではloot_tablesが使われていました。
※遊んでいるバージョンに合わせて確認してください。

2. 名前空間を間違える

自作なら、

data/yuzukaki/loot_table/...

バニラ上書きなら、

data/minecraft/loot_table/...

のように、名前空間が変わります。

自作したつもりでminecraftに入れると、バニラ挙動を上書きしてしまうことがあります。
逆に、バニラを上書きしたいのに自分の名前空間に入れると、何も変わりません。

3. JSONのカンマ抜け・カンマ余り

JSONは書式に厳しいです。

特に、

  • カンマ,の付け忘れ
  • 最後の要素に余計なカンマを付ける
  • "の閉じ忘れ
  • {}[]の対応ミス

このあたりは本当に多いです。

ルートテーブルが動かない時は、内容の前にまずJSONの形を疑いましょう。

4. アイテムIDを間違える

例えば、ダイヤモンドなら、

minecraft:diamond

です。

日本語名の「ダイヤモンド」ではなく、英語のIDで指定します。
また、存在しないIDを書くと当然動きません。

5. typeの用途が合っていない

チェスト用、ブロック用、Mob用では、使える前提情報が違います。

ブロック破壊用の処理なのにminecraft:chestの感覚で作ったり、Mobドロップ用なのに道具条件を雑に書いたりすると、意図した結果になりません。

初心者さんは、まず次のように使い分けると安全です。

  • チェスト報酬:minecraft:chest
  • ブロックドロップ:minecraft:block
  • Mobドロップ:minecraft:entity
  • 釣り:minecraft:fishing

6. 確率で出ていないだけなのに失敗と判断する

weightconditionsを使うと、アイテムが出ないことがあります。
これはエラーではなく、単に抽選に外れているだけの場合もあります。

検証する時は、最初だけ一時的に確定ドロップにするのがおすすめです。

"rolls": 1

候補も1種類だけにして、まず「読み込めているか」を確認しましょう。
読み込みが確認できてから、ランダム要素を追加すると原因を見つけやすいです。


11. ルートテーブルで出来ること・出来ないこと

最後に、ルートテーブルで出来ることと出来ないことを整理します。

出来ること

ルートテーブルで出来る代表例は下記です。

  • チェストの中身を作る
  • Mobのドロップを変更する
  • ブロック破壊時のドロップを変更する
  • 釣りの戦利品を変更する
  • アイテムの出現数をランダム化する
  • レア枠・ハズレ枠を作る
  • 条件付きでアイテムを出す
  • コマンドから報酬テーブルとして呼び出す

配布ワールドやミニゲームでは、報酬箱の作成にもかなり使えます。
「クリア報酬をランダムにしたい」「レアアイテムを低確率で出したい」という時に便利です。

出来ないこと

一方で、ルートテーブルだけでは出来ないこともあります。

  • Mobの経験値量を直接変える
  • MobのAIそのものを変える
  • スライムの分裂など、アイテム以外の挙動を変える
  • チェスト内の好きなスロット位置へ完全固定配置する
  • 複雑なイベント処理を全部ルートテーブルだけで行う

こうした処理は、コマンド、ファンクション、述語、進捗、データパック内の別ファイルなどと組み合わせて作ることになります。

ルートテーブルは万能ではありません。
でも、アイテム報酬を作る仕組みとしてはかなり強力です。

筆者の考え
ルートテーブルは、データパック初心者が最初に全部理解しようとすると大変です。
でも「チェスト報酬」「Mobドロップ」「ブロックドロップ」のどれを触りたいのかを決めてから読むと、一気に理解しやすくなります。


12. まとめ

以上、マイクラJava版のルートテーブルの仕組み・戦利品・データ仕様について解説しました。

要点を整理すると、

  • ルートテーブルは、アイテムの戦利品を決めるJSONデータ
  • チェスト、Mobドロップ、ブロックドロップ、釣りなどで使われる
  • 基本構造はtypepoolsrollsentriesで読む
  • conditionsは出す条件、functionsはアイテム加工
  • Java版1.21以降はフォルダ名loot_tableに注意
  • 最初は/loot giveで小さく動作確認すると失敗原因を見つけやすい

という感じです。

ルートテーブルは、最初の見た目こそ難しそうですが、仕組みを分けて見るとかなり理解しやすいです。

特に、

抽選箱を作る
候補を入れる
何回引くか決める
条件や個数を調整する

この流れだけ覚えておくと、JSONを見た時の怖さがかなり減ります。

データパックを作る方、配布ワールドを作りたい方、コマンドでランダム報酬を作りたい方は、ぜひルートテーブルの基本から触ってみてくださいね。

では、本日はここまでで終わります。
最後までご覧いただき、ありがとうございました。
柚子クラでは他にもマイクラJava版の仕様解説や便利装置を紹介しているので、是非ご覧くださいね(^^♪


13. 参考文献

この記事を書くにあたり、以下のMinecraft Wiki(英語版)・公式ページを参考にしています。