ルートテーブル:プール、ロール、エントリとファンクションの違い
何もドロップしないルートテーブルは、たいていウェイトか条件の階層が間違っています。各ネスト階層が何を制御しているのか、そして知っておくべきファンクションを解説します。階層はpools、entries、functionsの順に深くなります。
ルートテーブルのJSONは4階層のネスト構造で、それぞれの階層が異なる意味を持っています。「テーブルが何もドロップしない」というケースのほとんどは、本来付けるべき階層から一つずれた場所に条件が付いているのが原因です。
4つの階層
table
└── pools[] how many independent draws
└── entries[] what can come out of this draw
└── functions[] modify the item that came out
- プールの
rollsは、そのプールが何回ドローするかを決めます。rolls: 3を持つプールが1つあれば、同じエントリリストから3回ドローします。 - エントリの
weightは、そのプール内での相対値です。ウェイトの合計が何かになる必要はありません。ウェイト10のエントリとウェイト90のエントリなら、前者は10分の1の確率で出ます。 conditionsはどの階層にも存在しますが、意味はそれぞれ異なります。プール ではドロー全体を制御します。エントリ ではその選択肢1つを制御します。ファンクション ではその改変のみを制御します。
確定ドロップには専用のプールが必要
ウェイトでは何も保証できません。プールは1回のロールにつき必ず1つのエントリを選ぶからです。常に地図とランダムな戦利品をドロップしなければならないテーブルには、2つのプールが必要です:
"pools": [
{ "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "minecraft:filled_map" } ] },
{ "rolls": { "min": 2, "max": 4 }, "entries": [ … weighted list … ] }
]
プール1はエントリが1つだけなので、必ずそれを生成します。プール2はウェイト付きリストから2〜4回ロールします。
知っておくべきファンクション
| ファンクション | 内容 |
|---|---|
set_count | 固定値、または uniform の範囲 |
enchant_randomly | ランダムなエンチャント。任意でリストから選択可能 |
enchant_with_levels | エンチャントテーブルをNレベルで使った場合と同等 — options で絞り込まない限り任意のエンチャント |
set_components | カスタム名、ロア、任意のデータコンポーネント |
enchanted_count_increase | エンチャント1レベルあたりのボーナス(ドロップ増加)。エンティティテーブル専用 |
set_damage | 耐久値を割合で指定。0.5 なら半分消耗した状態 |
furnace_smelt | モブが炎上して死んだときの精錬後の形 |
enchant_with_levels と enchant_randomly は互換ではありません。前者はエンチャントテーブルを模倣し、レベルのコストを尊重します。後者は任意に選ぶため、ゲームが決して生成しない組み合わせも作り出せます。
よく使われる条件
random_chance— 一律の確率random_chance_with_enchanted_bonus— ドロップ増加に対応した現代的な確率killed_by_player— 落下死でレアドロップが絶対に出ない原因entity_properties— 被害者の種類、状態、装備を確認match_tool— ブロックテーブル用に、使用されたツールを確認
ワールドを再構築せずにテストする
/loot give @s loot my_pack:chests/treasure
テーブルを直接インベントリにドロップします。/loot spawn、/loot insert <pos>、/loot replace は他の配置に対応しています。チェストを置いてリロードするよりはるかに速く、ウェイト分布を確認する唯一まともな方法です。
マルチプールのテーブルは、ファンクションと条件を正しい階層に付けて Advanced Loot Table Builder で構築しましょう。