ルートテーブルのメモ書き
ルートテーブル
以下のような時に手に入れるアイテムを設定できるJSON。データパックで指定可能。
- ブロックを破壊した、された時
- エンティティを倒した時
- チェストなどを開いた時
- 釣りをした時
- 特定のモブからアイテムを貰う、交換する時
- 進捗などの報酬で手に入れる時
.minecraft/versions/<バージョン>/<バージョン>.jarを7-zipなどで開いて、data/minecraft/loot_tablesからバニラのサンプルをゲットできる。
ルートテーブルの置き場所
datapacks/<データパック>/data/<パック>/loot_tables/<ルートテーブル名>.json
もしもバニラの挙動を置き換える場合は、
datapacks/<データパック>/data/minecraft/loot_tables/<置き換える対象>.json
JSONの内容
ルート
{ "type": "minecraft:empty", "pools": [ { (ルートテーブル情報) } ] }
プロパティ | 説明 | 定義値 |
---|---|---|
type | ルートテーブルの種類 - empty : なし - entity : エンティティのドロップ - block : ブロックのドロップ - chest : チェストの中身 - fishing : 釣りの結果 - gift : 猫や村人からのギフト - advancement_reward : 進捗達成時 - generic : その他 |
string |
pools | ドロップ情報のリスト。上から順番に適用される。 | list |
ルートテーブル情報
{ "conditions": [ { (動作条件) } ], "rolls": 1, "bonus_rolls": 1, "entries": [ { (アイテムの候補) } ] }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
conditions | ルートテーブルを動作させる条件。 | list | |
rolls | entries の中からいくつ動作させるか。{ "min": 1, "max": 3 } という書き方もできる。 この場合は entries から1~3個動作させる。バニラは、基本的に1しか無い。ほぼ固定値で良い。 |
number / object | ● |
bonus_rolls | rolls に加えて、Luckの効果がついていた場合に、追加でrolls を実行させる。( rolls + bonus_rolls の回数だけentries を実行 )こちらも { "min": 1, "max": 3 }という書き方ができる。 バニラは、基本的に設定されてない。過去の遺物? |
number / object | |
entries | アイテムの候補。 | list | ● |
動作条件
{ "condition": "minecraft:survives_explosion", (conditionで設定した条件のサブパラメータ) }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
condition | ルートテーブルの動作させる条件のタイプ。 ここのタイプはpredicateと一緒なため、predicateについて書いたブログを参照。 |
string | ● |
サブパラメータ | condition で設定した条件のサブパラメータ。ここもpredicateを参照。 |
- |
ちなみにブロック壊した系は、基本minecraft:survives_explosion
。サブパラなし。
エンティティ倒した系は、基本minecraft:killed_by_player
。サブパラなし。
他は基本的にconditions
が設定されていない。
アイテムの候補
{ "type": "minecraft:item", "name": "minecraft:diamond", "weight": 10, "quality": 20, "conditions": [ { (動作条件) } ], "functions": [ { (追加機能) } ], "children": [ { (アイテムのサブ候補) } ], "expand": false, }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
type | アイテム候補のタイプ。 - item : アイテムを取得する - tag : アイテムのタグ(data packのtags)で指定する - loot_table : コピー元のルートテーブルを指定する - group : children を使って複数候補を返す(後述)- alternatives : children を使って最初の候補を返す(後述)- sequence : children を使って失敗するまでの候補を返す(後述)- dynamic : ブロック固有の情報付きで返す - empty : 何も生成しない(アイテムを取得しない) |
string | ● |
name | - type がitem ならば、アイテムID。- type がtag ならば、アイテムのタグ。- type がloot_table ならば、ルートテーブル。- type がdynamic ならば、contents もしくはself 。contents はブロックエンティティの中身。(シュルカー)self は旗やモブの頭に使われる。 |
string | |
weight | アイテム候補が複数ある場合に、選ばれやすさ。 面倒だったら、全部足した時に100にしておくと、そのまま%になる。 |
number | |
quality | プレイヤーのLuckの効果によって、weight を書き換える値。 |
number | |
conditions | アイテム候補を実行する条件。 内容は動作条件と同じ。 |
list | |
functions | アイテムを取得する時に、アイテムに付与するオプション機能。 | list | |
children | type がgroup , alternatives , sequecne の時にだけ指定する。指定可能な内容は、アイテムの候補と同じ。効果は複雑なので、後述。 |
string | |
expand | type がtag の時にだけ指定する。- true なら、name で指定したタグのアイテムを1つ取得する。- false なら、name で指定したタグのアイテムを全部取得する。 |
bool |
アイテムのサブ候補
まず、children
の内容は、アイテムの候補と全く同じ。ただし、type
に指定した内容によって効果が変わる。
group
{ "type": "minecraft:group", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
group
はアイテムのサブ候補を全部(1~3)を全部実行します。
これがある理由は、アイテムのサブ候補全部にconditions
を書くのを省略するため。
現在、バニラでは使われていない。
alternatives
{ "type": "minecraft:alternatives", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
alternatives
はアイテムのサブ候補を1(上)から順番にチェックしていって、最初にチェックに引っかかったアイテム候補だけ実行します。
要するに、1は失敗。2は成功。ならば、アイテムのサブ候補2だけが実行されます。
例えば、シルクタッチで破壊するとサブ候補1だけど、そうじゃなかったらサブ候補2みたいな書き方がバニラではメジャーです。
sequence
{ "type": "minecraft:sequence", "children": [ { (アイテムのサブ候補1) }, { (アイテムのサブ候補2) }, { (アイテムのサブ候補3) } ] }
sequence
はgroup
と似たようなものです。
ただし、group
は途中で失敗するサブ候補があっても、全部チェックしてくれますが、sequence
は1(上)から順番にチェックしていって、失敗したらそこまでのサブ候補しか実行されません。
現在、バニラでは使われていません。
追加機能
{ "function": "minecraft:copy_name", (functionで設定した機能のサブパラメータ), "conditions": [ { (動作条件) } ] }
プロパティ | 説明 | 定義値 | 必須 |
---|---|---|---|
function | アイテムに追加する機能のタイプ。 一覧は後述。 |
string | ● |
サブパラメータ | function で設定したサブパラメータ。こちらも後述。 |
- | |
conditions | 追加機能を実行する条件。 内容は動作条件と同じ。 |
list |
追加機能の例
機能 | 説明 | バニラでの使用例 |
---|---|---|
apply_bonus | エフェクトによってボーナスを受ける。 | ダイヤ鉱石を幸運状態で採掘したらアイテム増える。 |
copy_name | 破壊されたブロックの名前をコピーする。 | 旗を壊したら旗についてた名前をコピー。 |
copy_nbt | NBTを一部コピーする。 壊した、倒した相手のNBTも可能。 |
旗を壊したら旗の柄をコピー。 |
copy_state | ブロックのBlockStateTag をコピーする。(ブロックを見た時にF3の右に出てくるブロック情報) |
ミツバチの巣をシルクタッチで壊したら巣のレベルをコピー。 |
enchant_randomly | ランダムにエンチャントを付ける。 エンチャントリストを指定することもOK。 |
ピラミッドのチェストにある革装備にランダムエンチャントをつける。 |
enchant_with_levels | エンチャントのレベルを指定する。 | エンドシティのチェストの本にレベル30のエンチャントをつける。 |
exploration_map | 何も書かれていないマップに近くの建造物付近を描く。 | 海底遺跡のチェストの地図を宝の地図にする。 |
explosion_decay | ブロックが爆発で壊された場合に、一定数アイテムが減る。 | 草が爆破された場合に小麦の種を一定数減らす。 |
furnace_smelt | かまどで精錬した後のアイテムになるようにする。 | 鶏が燃えて死んだ場合に、焼き鳥になる。 |
fill_player_head | モブの頭を壊した、殺したプレイヤーやモブの頭にする。 | - |
limit_count | set_count で指定したアイテム数に制限をかける。 |
グロウストーンが普通に壊された場合に、1~4個、グロウストーンダストを落とす。 |
looting_enchant | ドロップ増加のエンチャントによってアイテム数を増減させる。 | 鶏を倒した場合に0~1個、追加で羽を落とす。 |
set_attributes | アイテムにAttributeを付与する。 | - |
set_contents | コンテナの中身を保持する。 | シュルカーボックスを破壊した時に中身を保持する。 |
set_count | アイテム数を設定する。 ランダムで数値を決定することも可能。 |
本棚を壊した場合に、本を3個落とす。 |
set_damage | ツール系アイテムの耐久値を設定する。 | 釣りで手に入れた釣り竿の耐久値を減らす。 |
set_lore | アイテムに説明文を設定する。 | - |
set_name | アイテムの名前を設定する。 | - |
set_nbt | アイテムにNBTを設定する。 | 釣りで手に入れたポーションの効果をただの水にする。 |
set_stew_effect | 怪しげなシチューを飲んだ時に発生するステータス効果を設定する。 怪しげなシチューはクリエイティブのインベントリからは取得できない。(ただし、サバイバルで作れる) |
怪しげなシチューを飲むと、エフェクトを一定時間付ける。 |
その他、細かいところは英語Wiki参照。
Loot table – Official Minecraft Wiki
サンプル
石を壊した時のルートテーブル
{ "type": "minecraft:block", // ブロックを破壊した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:alternatives", // 上から順番に見ていって最初のやつだけ実行 "children": [ { // サブ候補その1 "type": "minecraft:item", // アイテムを取得 "conditions": [ { "condition": "minecraft:match_tool", // ツールが一致していれば "predicate": { "enchantments": [ { "enchantment": "minecraft:silk_touch", // シルクタッチLv1以上 "levels": { "min": 1 } } ] } } ], "name": "minecraft:stone" // 石を取得 }, { // サブ候補その2 "type": "minecraft:item", // アイテムを取得 "conditions": [ { "condition": "minecraft:survives_explosion" // 普通に破壊した時 } ], "name": "minecraft:cobblestone" // 丸石を取得 } ] } ] } ] }
旗を壊した時のルートテーブル
{ "type": "minecraft:block", // ブロックを破壊した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ // 追加機能を付与 { "function": "minecraft:copy_name", // ブロック自身の名前をコピー "source": "block_entity" }, { "function": "minecraft:copy_nbt", // ブロック自身のNBTをコピー "source": "block_entity", "ops": [ { "source": "Patterns", // 絵柄だけ置き換え "target": "BlockEntityTag.Patterns", "op": "replace" } ] } ], "name": "minecraft:black_banner" // 黒の旗を取得 } ], "conditions": [ { "condition": "minecraft:survives_explosion" // 普通に破壊した時 } ] } ] }
鶏を倒した時のルートテーブル
{ "type": "minecraft:entity", // エンティティを倒した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:set_count", // 0~2個落とす "count": { "min": 0.0, "max": 2.0, "type": "minecraft:uniform" } }, { "function": "minecraft:looting_enchant", // ドロップ増加がついてたら追加で0~1個 "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:feather" // 羽を取得 } ] }, { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:furnace_smelt", // 精錬した結果を取得 "conditions": [ { "condition": "minecraft:entity_properties", // エンティティ自身が燃えていた場合 "predicate": { "flags": { "is_on_fire": true } }, "entity": "this" } ] }, { "function": "minecraft:looting_enchant", // ドロップ増加がついてたら追加で0~1個 "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:chicken" // 鶏肉を取得 } ] } ] }
クリーパーを倒した時のルートテーブル
{ "type": "minecraft:entity", // エンティティを倒した時 "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", // アイテムを取得 "functions": [ { "function": "minecraft:set_count", // 0~2個落とす "count": { "min": 0.0, "max": 2.0, "type": "minecraft:uniform" } }, { "function": "minecraft:looting_enchant", // ドロップ増加だと0~1個追加で落とす "count": { "min": 0.0, "max": 1.0 } } ], "name": "minecraft:gunpowder" // 火薬を取得 } ] }, { "rolls": 1.0, "entries": [ { "type": "minecraft:tag", // アイテムタグを取得 "name": "minecraft:music_discs", // レコードのタグ "expand": true // タグの中のどれか1つを落とす } ], "conditions": [ { "condition": "minecraft:entity_properties", // スケルトン系を倒した時 "predicate": { "type": "#minecraft:skeletons" }, "entity": "killer" } ] } ] }
武器屋のチェストを開いた時のルートテーブル
{ "type": "minecraft:chest", // チェストを開いた時 "pools": [ { "rolls": { // アイテム候補を1~5個実行する "min": 1.0, "max": 5.0, "type": "minecraft:uniform" }, "entries": [ { "type": "minecraft:item", // アイテムを取得 "weight": 2, // 2/8 (2/2+4+1+1) の確率で実行する "functions": [ { "function": "minecraft:set_count", // アイテム数を1~3個にする "count": { "min": 1.0, "max": 3.0, "type": "minecraft:uniform" } } ], "name": "minecraft:iron_ingot" // 鉄インゴットを取得 }, { "type": "minecraft:item", // アイテムを取得 "weight": 4, // 4/8 (4/2+4+1+1) の確率で実行する "functions": [ { "function": "minecraft:set_count", // アイテム数を1~4個にする "count": { "min": 1.0, "max": 4.0, "type": "minecraft:uniform" } } ], "name": "minecraft:bread" // パンを取得 }, { // 何も書いてない場合は、weightは1、set_countも1 "type": "minecraft:item", // アイテムを取得 "name": "minecraft:iron_helmet" // 鉄ヘルメットを取得 }, { "type": "minecraft:item", // アイテムを取得 "name": "minecraft:emerald" // エメラルドを取得 } ] } ] }
ルートテーブルを設定する方法
パック名をminecraftにして、バニラの情報を書き換える
全てに反映されてしまうので、注意。
コマンドでルートテーブルを上書きする
# コンテナ系はsetblockでLootTableをNBTに書いて設定 setblock 0 60 0 minecraft:chest{LootTable:"x:original_chest"} # エンティティ系はsummonでDeathLootTableをNBTに書いて設定 summon minecraft:creeper 0 60 0 {DeathLootTable:"x:original_creeper"} # ルートテーブルの設定をminecraft:emptyで消す summon minecraft:creeper 0 60 0 {LootTable:"minecraft:empty"}
進捗でルートテーブルを設定する
{ : "rewards": { "loot": ["x:original_advance"] } }
こんな感じで進捗達成時にルートテーブルで報酬が書ける。