ドロップテーブル:プール、ロール、エントリーと関数の違い
ドロップしないドロップテーブルは、通常、重みまたは条件が間違った階層に設定されています。ここでは、各ネストレベルが何を制御するのか、そして知っておくべき関数について説明します。
ドロップテーブルのJSONは4つの階層で構成されており、各階層は異なる意味を持ちます。ほとんどの「自分のテーブルが何もドロップしない」という問題は、意図した場所から1階層ずれた場所に条件が設定されていることが原因です。
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つのエントリーを選択するからです。地図とランダムな戦利品を常にドロップする必要があるテーブルには、2つのプールが必要です。
"pools": [
{ "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "minecraft:filled_map" } ] },
{ "rolls": { "min": 2, "max": 4 }, "entries": [ … weighted list … ] }
]
プール1は単一のエントリーを持つため、常にそれを生成します。プール2は、重み付けされたリストから2〜4回ロールします。
知っておくべき関数
| 関数 | 動作 |
|---|---|
set_count | 固定数またはuniformの範囲 |
enchant_randomly | ランダムなエンチャント、オプションでリストから選択 |
enchant_with_levels | Nレベルのエンチャントテーブルとして機能 — 要求に応じて宝物エンチャントも含む |
set_components | カスタム名、ロア、任意のデータコンポーネント |
looting_enchant | ドロップ増加(Looting)のレベルごとのボーナス。エンティティテーブルのみ |
set_damage | 耐久度を割合で設定。0.5は半分消耗した状態 |
furnace_smelt | モブが炎で死亡したときに精錬された形 |
enchant_with_levelsとenchant_randomlyは互換性がありません。前者はエンチャントテーブルを模倣し、レベルコストを尊重します。後者は任意に選択し、ゲームが生成しない組み合わせを生成する可能性があります。
よく使われる条件
random_chance— 一定の確率random_chance_with_enchanted_bonus— 最新のドロップ増加(Looting)を考慮した確率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で、適切な階層に関数と条件をアタッチして、マルチプールテーブルを構築しましょう。