Minecraft Wiki
タグ: ビジュアルエディタ
タグ: ソースの編集
 
(4人の利用者による、間の21版が非表示)
1行目: 1行目:
  +
'''ルートテーブル'''({{en|Loot Table}})とは、ゲーム内の様々な場面においてどのようにアイテムを生成するかを決定している技術的な[[JSON]]ファイルである。具体的には、[[チェストの戦利品|自然生成された収納ブロックの中身]]、[[ドロップ|Mobからのドロップアイテム]]、[[釣り|釣りで得られるアイテム]]などの場面で使用されている。なお、ルートテーブルはMobからドロップする経験値や、アイテム以外のドロップするエンティティ([[虫食いブロック]]からの[[シルバーフィッシュ]]や分裂した[[スライム]]など)には関与しない。
{{要改訳|タグ|条件}}
 
'''ルートテーブル''' ({{en|Loot table}}) は、技術的な[[Wikipedia:ja:JavaScript Object Notation|JSON]]形式の表である。この表では、<!-- [[Chest loot]]、ページ作成後にリンク張替え -->[[チェスト#自然生成|自然に生成されるコンテナ]]の中身、[[ドロップ|Mob を倒したときにドロップされるアイテム]]、[[釣り|釣りによって釣れるアイテム]]の決定が行われる。コンテナは、チェストやかまどなどのインベントリを有するブロック全般を指す。
 
   
== 使用法 ==
+
== 定義方法 ==
  +
カスタムデータパックでは、自然生成される収納ブロックの中身やMobのドロップアイテムを変更する目的でルートテーブルを使用することができる。但し、岩盤やネザーポータルなどサバイバルでは破壊できないブロックはルートテーブルを持たないこと、また看板と壁にかけられた看板など一部のブロックはルートテーブルを共有していること、および特定のドロップアイテム(帯電クリーパーに巻き込まれたMobの頭のドロップ、ウィザーのネザースターなど)はルートテーブルを使用していないこと<ref>{{bug|MC-94610}}</ref> に注意が必要である。
   
  +
ルートテーブルは、データパックの次の位置に配置することで機能する。
この表は、表を使用するかを決定する String タグとシードを決定する Long タグから構成される。同じシードと表を使用する、インベントリを持つブロック(すなわちコンテナ)や Mob には、同じアイテムが定められる。ただし、この表が使用されるコンテナのどのスロットに配置されるかは決定できず、シードに基づいてランダムに配置される。
 
   
[[チェスト]]、[[トラップチェスト]]、[[ホッパー]]、[[チェスト付きトロッコ]]、[[ホッパー付きトロッコ]]、[[ディスペンサー]]、[[ドロッパー]]の場合:
 
 
<div class="treeview">
 
<div class="treeview">
  +
* '''''(データパック名)'''''
* {{BlockSprite|チェスト}}&nbsp;{{BlockSprite|トラップチェスト}}&nbsp;{{BlockSprite|ホッパー}}&nbsp;{{EntitySprite|チェスト付きトロッコ}}&nbsp;{{EntitySprite|ホッパー付きトロッコ}}&nbsp;{{BlockSprite|ディスペンサー}}&nbsp;{{BlockSprite|ドロッパー}}<!-- 半角空白では実際の表示に空白が挿入されないためnbspで対処 -->
 
  +
** '''data'''
** {{nbt|string|LootTable}}: コンテナが次に開かれた時にアイテムを配置する、またはそれ以外でアイテムが使用された場合に使用される。そのコンテナがチェストであり、それがラージチェストのどちらかである場合、タグ付きのシングルチェストに相当する半分だけが影響を受ける。
 
  +
*** '''''(名前空間名)'''''
** {{nbt|long|LootTableSeed}}: ルートテーブルを生成するために使用されるシード。これは、ワールドにおけるシード値と同じように動作する。0または省略にすることでランダムになる。
 
  +
**** '''loot_tables'''
  +
***** '''''(ルートテーブル名)''.json'''およびルートテーブルの下位フォルダ
 
</div>
 
</div>
一度アイテムが使用されたり(コンテナのインベントリを開いたり、ブロックの破壊など)、コンテナに入れられると、このタグは削除される。
 
   
  +
バニラの''Minecraft''で使用されるルートテーブルは5つの下位グループに分類される。その4グループとは、
[[Mob]] の場合:
 
  +
* {{cd|archeology}} - [[怪しげなブロック]]に埋まっているアイテム
  +
* {{cd|blocks}} - ブロック破壊時のドロップアイテム
  +
* {{cd|chests}} - [[構造物]]などのチェストの戦利品
  +
* {{cd|entities}} - エンティティのドロップ品
  +
* {{cd|gameplay}} - [[釣り]]、[[ネコ|猫の贈り物]]、[[物々交換|ピグリンの物々交換]]など
  +
  +
である。例えば<code>zombie.json</code>は<code>''data pack name''/data/minecraft/loot_tables/entities</code>に配置し、これを編集したデータパックを使用することで通常のドロップ品ではなくここで設定したアイテムをゾンビにドロップさせることができる。
  +
  +
== 呼び出し方 ==
  +
ルートテーブルを召喚する際は、ルートテーブルを使用するエンティティおよびブロックエンティティのNBTタグに{{nbt|string|使用するルートテーブル}}と{{nbt|long|使用するシード値}}を設定する必要がある。同じルートテーブルとシード値を使用した場合、必ず同じアイテムが生成される。なおルートテーブルはどのスロットにアイテムを配置するかまでは決定しておらず、これはシード値によってランダムに決定される。
  +
  +
実際のNBTタグの記述方法は次の通り。
  +
  +
{{#vardefineecho:containers|{{BlockLink|barrel}}、{{BlockLink|chest}}、{{BlockLink|trapped chest}}、{{BlockLink|hopper}}、{{EntityLink|minecart with chest}}、{{EntityLink|boat with chest}}、{{EntityLink|minecart with hopper}}、{{BlockLink|dispenser}}、{{BlockLink|dropper}}、{{BlockLink|shulker box}}、{{BlockLink|Suspicious Sand}}、{{BlockLink|Suspicious Gravel}}、{{BlockLink|Decorated Pot}}の場合:
  +
}}
 
<div class="treeview">
 
<div class="treeview">
* {{nbt|compound}} ルータグ
+
* {{nbt|compound}} 上位のオブジェクト。
  +
** {{nbt|string|LootTable}}: 収納ブロックが何らかの操作(開く、および破壊・ホッパーでのアイテムの移動など)を受けた時に中身のアイテムを生成するために使用するルートテーブル。ラージチェストに関しては、このタグが付いている方のチェストに該当するスロットのみが影響する。サブフォルダの中のルートテーブルを使用する場合は、サブフォルダ名から書き始める必要がある。
** {{nbt|string|DeathLootTable}}: エンティティが倒されたときにドロップするアイテムに使用される。
 
** {{nbt|long|DeathLootTableSeed}}: ルートテーブルを生成するために使用されるシード。これは、ワールドにおけるシード値と同じように動作する。0たは省略にすることでランダムなる。
+
** {{nbt|long|LootTableSeed}}: ルートテーブル使用るシード値。指定しない場合及び0を指定し場合ランダムなシード値を使用する。
 
</div>
 
</div>
  +
これらのタグは、アイテムが生成されるとともに即座に削除される。
   
  +
[[Mob]]の場合:
Mob とコンテナのルートテーブルは、{{cmd|entitydata}} と {{cmd|blockdata}} で変更することができる。
 
   
カスタムマップでは、この表を使用してコンテナにどのアイテムが配置されるかを変更することが可能となっている。そのため、既存のどれかのルートテーブルを変更したり、新しいものの作成ができる。以下はそのファイルの配置である:
 
 
<div class="treeview">
 
<div class="treeview">
  +
* {{nbt|compound}} 上位のオブジェクト。
* '''< ワールドが保存されているフォルダ >'''
 
  +
** {{nbt|string|DeathLootTable}}: このエンティティが死んだときのドロップアイテムを生成するのに使用するルートテーブル。サブフォルダの中のルートテーブルを使用する場合は、サブフォルダ名から書き始める必要がある。
** '''data'''
 
  +
** {{nbt|long|DeathLootTableSeed}}: ルートテーブルが使用するシード値。指定しない場合及び0を指定した場合は、ランダムなシード値を使用する。
*** '''loot_tables'''
 
 
</div>
 
</div>
   
  +
Mobおよび収納ブロックのルートテーブルは、{{cmd|execute store}}または{{cmd|data}}を用いて変更することができる。またプレイヤーは、{{cmd|loot}}を用いることでもルートテーブルを召喚することができる。
「loot_tables」の下位フォルダは名前空間となっている。デフォルトのファイルは「minecraft」下の名前空間にあるが、カスタムマップや Mod はそれぞれ独自の名前空間を有している。例えば、「楽しいパルクールマップ」という名前のカスタムマップを作成する場合、名前空間は「tanoshi_parukuru_mappu」となるだろう(空白を含めることは不可)。この名前空間には、そのマップで使用されるすべてのルートテーブルが含まれることとなる。
 
   
  +
== 構造 ==
また、デフォルトのルートテーブルを上書きにするには、「minecraft」の名前空間に対象を配置する必要がある。下記の[[#ルートテーブルの一覧|ルートテーブルの一覧]]の節で解説されているように、これらはエンティティ、コンテナ、釣りによって構成される。ゲーム内でオリジナルの名前空間のルートテーブルを使用するには、.json 拡張子なしで'''「namespace:table_name」'''と書いて呼び出す。'''「namespace」'''に名前空間名、'''「table_name」'''に表のファイル名を指定し、そしてルートテーブルのタグを設定することで可能である。
 
  +
本項では、ルートテーブルの記述方法を解説する。ルートテーブルは[[JSON]]形式によって記述され、以下の構造をもつ。
   
  +
<div class="treeview">
== タグ ==
 
  +
* {{nbt|compound}} ルートテーブルの最上位のオブジェクト。
  +
** {{nbt|string|type}}: 任意の要素。ルートテーブルを呼び出す状況を指定する。アイテム関数、プレディケート、ナンバープロバイダーは、使用されているパラメータにこのルート状況が対応しているかどうかを検証したうえで使用され、対応していない状況パラメータが検出された場合には警告メッセージが出力される。有効な値の一覧は[[#ルート状況|後項]]を参照。
  +
** {{nbt|list|functions}}: このルートテーブルによって生成されたすべてのアイテムスタックに使用する[[ルートテーブル#アイテム関数|アイテム関数]]のリスト。施したい順序に従ってリスト内に指定する。使用範囲を限定したい場合はここではなく、プールや項目の階層の{{nbt|list|functions}}を用いる。
  +
*** {{nbt|compound}} それぞれのアイテム関数。このオブジェクトのJSON構造は、[[アイテム修飾子#アイテム関数のJSONフォーマット|アイテム修飾子]]のページを参照されたい。
  +
** {{nbt|list|pools}}: このルートテーブル内のすべてのプールのリスト。それぞれのプールはアイテムのスタックをその試行回数だけ生成する。プールは記述されている順番通りに使用される。
  +
*** {{nbt|compound}}それぞれのプール。この部分のJSON構造は、[[#プール|次項]]を参照。
  +
** {{nbt|string|random_sequence}}:このルートテーブルがアイテムの生成に使用するランダム配列。これとシード値の組み合わせによりアイテム配列が生成される。同じパラメータと同じシード値を用いた場合は、同じアイテム配列が生成される。任意の要素であり、配列のIDが与えらなかった場合は、非決定的なランダム配列を使用する。
  +
</div>
   
  +
=== プール ===
ルートテーブルは[[wikipedia:JavaScript Object Notation|JSON形式]]を使用して定義されている。以下は、使用されているタグの一覧である:
 
 
<div class="treeview">
 
<div class="treeview">
* {{nbt|compound|The root tag}}
+
* {{nbt|compound}} 最上位のオブジェクト
  +
** {{nbt|list|conditions}}: このプールが使用されるために通過が必要な[[#プレディケート|プレディケート]]のリスト。
** {{nbt|string|type:}} ルートテーブルの種類。下のどれか。
 
  +
*** {{nbt|compound}} それぞれのプレディケート。この部分のJSON構造は[[プレディケート|当該記事]]を参照。
*** <code>empty</code> なし
 
  +
** {{nbt|list|functions}}: このプールが生成したアイテムスタックに作用する[[#アイテム関数|アイテム関数]]のリスト。作用させたい順番通りに記述する。
*** <code>entity</code> エンティティからのドロップ
 
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は[[アイテム修飾子]]の記事を参照。
*** <code>block</code> ブロックからのドロップ
 
  +
** {{nbt|int}}{{nbt|compound|rolls}}: このプールの試行回数(抽選回数)を指定する。後述する[[#ナンバープロバイダー|ナンバープロバイダー]]で指定する。
*** <code>chest</code> ダンジョンや構造物などに生成されるチェストの中身
 
  +
** {{nbt|float}}{{nbt|compound|bonus_rolls}}: 属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})1ポイント当たりの追加の生成試行回数を指定する。乗算の後四捨五入される。[[#ナンバープロバイダー|ナンバープロバイダー]]で指定する。デフォルトでは0.0。
*** <code>fishing</code> 釣り
 
  +
** {{nbt|list|entries}}: ルートテーブルの「中身」にあたる、「設定項目」。1回の試行で、この中のどれか1つがランダムに抽選される。後述する{{nbt|int|weight}}で抽選を偏らせることができるが、この処理は個々のオブジェクトに対して行われる。
*** <code>gift</code> 猫や村人からのプレゼント
 
  +
*** {{nbt|compound}} それぞれのエントリプロバイダー。そのJSON構造は[[#エントリプロバイダー|次項]]を参照のこと。
*** <code>advancement_reward</code> 進捗達成時
 
*** <code>generic</code> 上記のどれでもない
 
** {{nbt|list|pools:}} エンティティのすべてのプールのリスト。ロールの数に基づいて、アイテムのリストからアイテムを生成する際に用いられる各プールである。プールは、順番に適応される。
 
*** {{nbt|compound|A pool}}
 
**** {{nbt|list|conditions:}} プールを使用するための条件を決定する。複数の条件が指定されている場合は、すべてを渡される必要がある。
 
***** {{nbt|compound|A condition}}
 
****** {{nbt|string|condition:}} 条件の名前。有効な条件については[[#条件|下記参照]]。
 
**** {{nbt|int|rolls:}} 抽選回数。ここに指定された数だけアイテムが選ばれる。
 
**** {{nbt|compound|rolls:}} 抽選回数に範囲を持たせたい場合はこちらを使う。
 
***** {{nbt|int|min:}} 抽選の最小数。
 
***** {{nbt|int|max:}} 抽選の最大数。
 
**** {{nbt|float|bonus_rolls:}} [[幸運 (ステータス効果)|幸運]]が付いている場合、ここに指定した回数分、抽選される数が追加される。乗算のあとに切り捨てられる。
 
**** {{nbt|compound|bonus_rolls:}} ボーナスロールに範囲を持たせたい場合はこちらを使う。
 
***** {{nbt|float|min:}} ボーナスロールの最小数。
 
***** {{nbt|float|max:}} ボーナスロールの最大数。
 
**** {{nbt|list|entries:}} 抽選されるアイテムの候補リスト。{{nbt|compound|rolls}}の数だけ無作為に選ばれる。
 
***** {{nbt|compound|An entry}}
 
****** {{nbt|list|conditions:}} アイテムが選ばれる条件を決定する。複数条件指定されている場合は、すべて満たす必要がある。
 
******* {{nbt|compound|A condition}}
 
******** {{nbt|string|condition:}} 条件の名前。有効な条件については[[#条件|下記参照]]。
 
****** {{nbt|string|type:}} エントリーの種類。アイテムの場合は <code>item</code> を指定し、何も生成しない場合は <code>empty</code> 、別のルートテーブルから呼び出す場合は <code>loot_table</code> を指定できる。
 
****** {{nbt|string|name:}}
 
******* <code>item</code> ID(例:<code>minecraft:diamond</code>)。<code>functions</code> によって変更されない場合、デフォルトでは、アイテムのデフォルトインスタンスは1のスタックになっている。
 
******* <code>tag</code> アイテムの[[タグ]]を指定する(例:<code>arrows</code>)。
 
******* <code>loot_table</code> 呼び出すルートテーブルの名前。(例:<code>minecraft:gameplay/fishing/junk</code>)。
 
******* <code>dynamic</code> <code>contents</code> か <code>self</code> の2つがある。<code>contents</code> は、ブロックエンティティの中身、<code>self</code> は、旗と Mob の頭に使われる。
 
****** {{nbt|list|children}}:
 
******* <code>group</code> 1つの条件を同時に複数の候補に適用することができる。
 
******* <code>alternatives</code> 選出を分岐させることができる。一番上にある物から、条件を満たすものを選ぶ。
 
******* <code>sequence</code> 選出を分岐させることができる。こちらは、一番上にある物の選出が失敗するまで選出を行う。
 
****** {{nbt|boolean|expand}}: {{nbt|string|type}} を''tag'' にした場合に適用される。true にすると、タグに指定したアイテムの中から1つ選ばれる。false にした場合、全て選ばれる。
 
****** {{nbt|list|functions:}} <code>item</code> の場合に使用可能。選出されるアイテムに何らかの機能を付与する。これは順に適応され、例えば <code>looting_enchant</code> を正しく動作させるには <code>set_count</code> のあとにしなくてはならいない。
 
******* {{nbt|compound|A function:}}
 
******** {{nbt|string|function:}} {{nbt|list|functions}}の名前。有効な関数については[[#関数|下記参照]]。
 
******** {{nbt|list|conditions:}} 関数を使用するために条件を指定する。複数の条件が指定されている場合は、すべて満たす必要がある。
 
********* {{nbt|compound|A condition}}
 
********** {{nbt|string|condition:}} 条件の名前。有効な条件については[[#条件|下記参照]]。
 
****** {{nbt|int|weight:}} 選出されやすさ。大きいほど選ばれやすい。(確率は{{frac|このエントリーの値|全エントリーの値の合計}})。
 
****** {{nbt|int|quality:}} プレイヤーの倒す/開く/釣りの運属性に基づいて、エントリーの <code>weight</code> を変更する。式は <code>floor( weight + (quality * generic.luck))</code>。
 
 
</div>
 
</div>
<!-- weightは省略し、「値」とした -->
 
   
=== 関数 ===
+
=== エントリプロバイダー ===
  +
{{nbt|list|entries}}に記述する項目で、次のJSON構造によって記述される。
   
ルートテーブルでは、ドロップするアイテムのスタックの個数を変更したり、エンチャントを加えるなどの、様々な関数が使用できる。以下は、有効な関数、およびそれによって使用されるタグの一覧である。タグは、{{nbt|string|function}} と同じ関数オブジェクトに配置される:
 
 
<div class="treeview">
 
<div class="treeview">
  +
* {{nbt|compound}} エントリプロバイダーの最上位のオブジェクト。
* '''apply_bonus''' - Applies a predefined bonus formula.
 
  +
** {{nbt|list|conditions}}: この項目が、自身の属するプールに項目を生成する為に通過する必要のある[[#プレディケート|プレディケート]]のリスト。
** {{nbt|string|enchantment}}: [[Enchantments#Data values|Enchantment ID]] used for level calculation.
 
  +
*** {{nbt|compound}} 個々のプレディケート。この部分のJSON構造は[[プレディケート]]のページを参照のこと。
** {{nbt|string|formula}}: Can be <code>binomial_with_bonus_count</code> for a biominal distribution (with <code>n=level + extra</code>, <code>p=probability</code>), <code>uniform_bonus_count</code> for uniform distribution (from <code>0</code> to <code>level * bonusMultiplier</code>), or <code>ore_drops</code> for a special function used for ore drops in the vanilla game (<code>Count * (max(0; random(0..Level + 2) - 1)+1)</code>).
 
  +
** {{nbt|string|type}}: entriesのタイプを[[名前空間ID]]で指定する。この種類に応じて以降の項目が変化する。
** {{nbt|list|parameters}}: Values required for the formula.
 
  +
</div>
*** {{nbt|int|extra}}: For formula 'binomial_with_bonus_count', the extra value.
 
*** {{nbt|float|probability }}: For formula 'binomial_with_bonus_count', the probability.
 
*** {{nbt|float|bonusMultiplier }}: For formula 'uniform_bonus_count', the bonus multiplier.
 
   
  +
有効な{{nbt|string|type}}の値によって、それ以降の項目が以下のように変化する。
* '''copy_name''' - ブロック用。ブロックエンティティの <code>CustomName</code> に設定された名前をドロップしたアイテムの <code>display.Name</code> にコピーする。
 
** {{nbt|string|source: "block_entity"}} - ''block_entity''固定。
 
   
  +
<div class="treeview">
* '''copy_nbt''' - ドロップしたアイテムにNBTをコピーする。
 
** {{nbt|string|source}}: コピー元。
 
***<code>block_entity</code> 破壊したブロック。
 
***<code>this</code> 倒されたエンティティあるいは進捗を達成したり、コンテナを開けたりブロックを破壊したプレイヤー。
 
***<code>killer</code> エンティティを倒したエンティティ。
 
***<code>killer_player</code> エンティティを倒したプレイヤー
 
** {{nbt|list|ops}}: コピーの処理
 
*** {{nbt|compound|}} 処理
 
**** {{nbt|string|source}}: コピー元の NBT。[[コマンド/data]]の様式で指定する。
 
**** {{nbt|string|target}}: コピー先の NBT。[[コマンド/data]]の様式で指定する。
 
**** {{nbt|string|op}}:
 
*****<code>replace</code> 既にあるタグを置き換える。
 
*****<code>append</code> 追加。
 
*****<code>merge</code> 上書き。
 
* '''copy_state''' - 破壊したブロックのブロック状態をドロップしたアイテムの <code>BlockStateTag</code> にコピーする。
 
** {{nbt|string|block}}: コピー元のブロックのID。不適切な場合は、失敗する。
 
** {{nbt|list|properties}}: コピーするブロック状態のリスト。
 
*** {{nbt|string}} コピーするブロック状態
 
   
  +
* '''item''' - 1スロット分のアイテムをルート項目に追加する。
* '''enchant_randomly''' - ランダムに選択された1つのアイテムにエンチャント効果を付与する。エンチャントレベルは、適応可能ならばランダムになる。
 
  +
** {{nbt|list|functions}}: アイテムのスロットに作用させる[[#アイテム関数|アイテム関数]]のリスト。
** {{nbt|list|enchantments:}} [[エンチャント#データ値|エンチャント名]]のリストからエンチャントを選択する。これを省略した場合、アイテムにすべてのエンチャントが適応可能になる。
 
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は、[[アイテム修飾子]]を参照のこと。
* '''enchant_with_levels''' - 指定された[[エンチャントの仕組み#エンチャントの選択方法|エンチャントレベル]]でアイテムをエンチャント効果を付与する([[エンチャントテーブル]]を使用する場合とほぼ同等)。
 
  +
** {{nbt|int|weight}}: エントリが、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、<code>この項目の比重/プール内に生成されるすべての項目の比重</code>となる。
** {{nbt|bool|treasure:}} 宝のエンチャントがこのアイテムに適応可能かを決定する。
 
  +
** {{nbt|int|quality}}: [[#ルート状況|ルート状況]]によって与えられたエンティティの属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})に準じて、この項目の{{nbt|int|weight}}の値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、{{cd|entity}}の場合は{{cd|killer_entity}}のエンティティを、それ以外のルート状況の種類においては{{cd|this}}のエンティティの属性値が参照される。補正公式は、{{cd|floor(weight + (quality &times; generic.luck))}}である。
** {{nbt|int|levels:}} 使用する正確なエンチャントレベルを指定する。
 
  +
** {{nbt|string|name}}: {{cd|minecraft:diamond}}など、生成するアイテムの名前空間IDを指定する。アイテム関数によって編集を受けていない場合、ここで指定したアイテムが1つ、生成される。
** {{nbt|compound|levels:}} 指定した範囲内からランダムにエンチャントレベルを指定する。
 
*** {{nbt|int|min:}} 使用する最小レベル。
 
*** {{nbt|int|max:}} 使用する最大レベル。
 
* '''furnace_smelt''' - かまどでアイテムが製錬されるか否か。倒された動物から食料を調理する際に、<code>entity_properties</code> の条件と組み合わせて使用する。
 
* '''limit_count''' - ドロップするアイテムの個数を制限する。
 
** {{nbt|int|limit}}: ドロップするアイテムの個数をこの値に制限する。
 
** {{nbt|compound|limit}}: 制限に範囲を持たせたい場合はこちらを使う。この範囲内でランダムになる。
 
*** {{nbt|int|min}}: 最小値
 
*** {{nbt|int|max}}: 最大値
 
* '''looting_enchant''' - <code>killer</code> エンティティの[[ドロップ増加]]のエンチャントレベルに基づいて、スタック数を調整する。
 
** {{nbt|int|count:}} ドロップ増加のレベルごとに増加するアイテムの正確な数を指定する。
 
** {{nbt|compound|count:}} ドロップ増加のレベルごとに増加するアイテムの乱数(範囲)を指定する。乱数は少数となる可能性があり、その場合はドロップ増加のレベルに乗算されたあと切り捨てられる。
 
*** {{nbt|int|min:}} 最小増加数。
 
*** {{nbt|int|max:}} 最大増加数。
 
** {{nbt|int|limit:}} ドロップ増加によって増加される最終的な数の最大数。値を0とすると、無制限になる。
 
* '''set_attributes''' - アイテムに[[属性]]の修飾子を追加する。
 
** {{nbt|list|modifiers}}
 
*** {{nbt|compound|A modifier}}
 
**** {{nbt|string|name:}} 修飾子の名前。
 
**** {{nbt|string|attribute:}} 修飾子が動作する属性の名前。
 
**** {{nbt|string|operation:}} 「addition」、「multiply_base」または「multiply_total」のいずれかでなければならない。
 
**** {{nbt|float|amount:}} 修飾子が変化する正確な量を指定する。
 
**** {{nbt|compound|amount:}} 指定した範囲内からランダムな量を指定する。
 
***** {{nbt|float|min:}} 最小量。
 
***** {{nbt|float|max:}} 最大量。
 
**** {{nbt|string|id:}} 任意 : 修飾子の UUID。指定されていなければ、新しい UUID が生成される。
 
**** {{nbt|string|slot:}} スロットアイテムが有効にする修飾子を次の値の中から選択する必要がある: 「mainhand」、「offhand」、「feet」、「legs」、「chest」、「head」
 
**** {{nbt|list|slot:}} リストされているスロットの1つがランダムに選択される。
 
* '''set_count''' - スタック数を設定する。
 
** {{nbt|int|count:}} 設定する正確なスタック数を指定する。
 
** {{nbt|compound|count:}} 範囲内からランダムにスタック数を指定する。
 
*** {{nbt|int|min:}} 最小スタック数。
 
*** {{nbt|int|max:}} 最大スタック数。
 
* '''set_damage''' - 道具のアイテムのダメージ値(耐久値)を設定する。
 
** {{nbt|float|damage:}} 設定する耐久の消耗率を指定する(1.0で未使用、0.0で耐久0となる)。
 
** {{nbt|compound|damage:}} 範囲内からランダムに耐久の消耗率を指定する。
 
*** {{nbt|float|min:}} 最小値。
 
*** {{nbt|float|max:}} 最大値。
 
   
* '''set_nbt''' - アイテムに NBT データを追加する。
 
** {{nbt|string|tag:}} コマンド使用されるものと同様のタグ文字列を追加する。最初にかっこが必要で、引用符はバックスラッシュ (<code>\</code>) を使用してエスケープする必要がある。
 
</div>
 
   
  +
* '''tag''' - 特定の[[タグ#アイテム|アイテムタグ]]に含まれる一つ一つのアイテムをそれぞれすべてプール内の項目に追加するか、またはタグに含まれるすべてのアイテムの中から一つアイテムを選出する項目を一つだけプールに追加する。
=== 条件 ===
 
  +
** {{nbt|list|functions}}: アイテムのスロットに作用させる[[#アイテム関数|アイテム関数]]のリスト。
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は、[[アイテム修飾子]]を参照のこと。
  +
** {{nbt|int|weight}}: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、<code>この項目の比重/プール内に生成されるすべての項目の比重</code>となる。
  +
** {{nbt|int|quality}}: [[#ルート状況|ルート状況]]によって与えられたエンティティの属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})に準じて、この項目の{{nbt|int|weight}}の値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、{{cd|entity}}の場合は{{cd|killer_entity}}のエンティティを、それ以外のルート状況の種類においては{{cd|this}}のエンティティの属性値が参照される。補正公式は、{{cd|floor(weight + (quality &times; generic.luck))}}である。
  +
** {{nbt|string|name}}: 参照するアイテムタグの名前空間ID(例:{{cd|minecraft:arrows}})
  +
** {{nbt|boolean|expand}}: {{cd|true}}の場合はタグ内のすべてのアイテムについて一つずつ、指定された比重と比重補正値で項目を生成する。{{cd|false}}の場合はタグ内のすべてのアイテムを生成しうる項目を一つだけ生成する。アイテム関数によって編集を受けていない場合、アイテムは1つ生成される。
   
  +
ルートテーブルは、抽選される際や関数が使用される際に適用される。以下は、有効な条件、およびそれによって使用されるタグの一覧である。タグは、{{nbt|string|condition:}} と同じ条件オブジェクトに配置される:
 
  +
* '''loot_table''' - プールの項目として、別のルートテーブルを与える。
<div class="treeview">
 
  +
** {{nbt|list|functions}}: アイテムのスロットに作用させる[[#アイテム関数|アイテム関数]]のリスト。
* '''alternative''' - 複数の条件を適用する。この場合、どれか1つを満たせばよい。
 
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は、[[アイテム修飾子]]を参照のこと。
** {{nbt|list|terms}}: 適用する条件
 
  +
** {{nbt|int|weight}}: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、<code>この項目の比重/プール内に生成されるすべての項目の比重</code>となる。
* '''block_state_property''' - [[ブロック状態]]をチェックする。
 
  +
** {{nbt|int|quality}}: [[#ルート状況|ルート状況]]によって与えられたエンティティの属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})に準じて、この項目の{{nbt|int|weight}}の値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、{{cd|entity}}の場合は{{cd|killer_entity}}のエンティティを、それ以外のルート状況の種類においては{{cd|this}}のエンティティの属性値が参照される。補正公式は、{{cd|floor(weight + (quality &times; generic.luck))}}である。
** {{nbt|string|block}}: ブロックのID。不適切だと失敗する。
 
** {{nbt|compound|properties}}: 省略可能。プロパの名前で。文字列指定。合わない場合は失敗する
+
** {{nbt|string|name}}: 使用するルートーブルの名前空間ID(例:{{cd|minecraft:gameplay/fishing/junk}})
  +
* '''entity_properties''' - エンティティのテストプロパティ。
 
  +
** {{nbt|string|entity:}} 条件を確認するエンティティを指定する。倒されたエンティティを使用するには <code>this</code>、無作為に攻撃させるには <code>killer</code>、プレイヤーのみを攻撃させるには <code>killer_player</code> を設定する。
 
  +
* '''dynamic''' - チェストを破壊した際など、それぞれのブロック特有のドロップアイテムを生成する項目を生成する。
** {{nbt|compound|properties:}} 確認するプロパティ。
 
*** {{nbt|bool|on_fire:}} エンィティが燃えていテストする
+
** {{nbt|list|functions}}: アイムのスロットに作用させ[[#アイム関数|アイテム関数]]のリスト。
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は、[[アイテム修飾子]]を参照のこと。
* '''entity_scores''' - エンティティの[[スコアボード]]のスコアをテストする。
 
  +
** {{nbt|int|weight}}: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、<code>この項目の比重/プール内に生成されるすべての項目の比重</code>となる。
** {{nbt|string|entity:}} 条件を確認するエンティティを指定する。倒されたエンティティを使用するには <code>this</code>、無作為に攻撃させるには <code>killer</code>、プレイヤーのみを攻撃させるには <code>killer_player</code> を設定する。
 
  +
** {{nbt|int|quality}}: [[#ルート状況|ルート状況]]によって与えられたエンティティの属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})に準じて、この項目の{{nbt|int|weight}}の値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、{{cd|entity}}の場合は{{cd|killer_entity}}のエンティティを、それ以外のルート状況の種類においては{{cd|this}}のエンティティの属性値が参照される。補正公式は、{{cd|floor(weight + (quality &times; generic.luck))}}である。
** {{nbt|compound|scores:}} スコアを確認する。すべての指定したスコアが渡されるべき条件に渡される必要がある。
 
  +
** {{nbt|string|name}}: <code>contents</code>に指定すると、ブロックエンティティの中身のアイテムが生成される。
*** {{nbt|int|A score:}} キー名は、値が渡されるべき条件に必要な、正確なスコア値があるときのオブジェクトである。<!-- 要改訳 -->
 
  +
*** {{nbt|compound|A score:}} キー名は、値が渡されるべき条件jに必要なスコア値をの範囲を指定するオブジェクトである。
 
  +
**** {{nbt|int|min:}} 最小スコア。
 
  +
* '''empty''' - 選択された際に何もアイテムを生成しない項目を作成するための項目。
**** {{nbt|int|max:}} 最大スコア。
 
  +
** {{nbt|list|functions}}: アイテムのスロットに作用させる[[#アイテム関数|アイテム関数]]のリスト。
* '''inverted''' - 条件を反転する。即ち、指定した条件を'''満たさない'''場合に候補が選出される。
 
  +
*** {{nbt|compound}} それぞれのアイテム関数。この部分のJSON構造は、[[アイテム修飾子]]を参照のこと。
** {{nbt|compound|term}}: 反転させる条件
 
  +
** {{nbt|int|weight}}: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、<code>この項目の比重/プール内に生成されるすべての項目の比重</code>となる。
* '''killed_by_player''' - <code>killer_player</code> のエンティティがいる場合にテストする。
 
  +
** {{nbt|int|quality}}: [[#ルート状況|ルート状況]]によって与えられたエンティティの属性値「[[属性#プレイヤーの属性|運]]」({{cd|minecraft:generic.luck}})に準じて、この項目の{{nbt|int|weight}}の値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、{{cd|entity}}の場合は{{cd|killer_entity}}のエンティティを、それ以外のルート状況の種類においては{{cd|this}}のエンティティの属性値が参照される。補正公式は、{{cd|floor(weight + (quality &times; generic.luck))}}である。
** {{nbt|bool|inverse:}} true の場合に、<code>killer_player</code> がいなければ条件が渡される。
 
  +
* '''match_tool''' - ルートテーブルが適用される際、使用していたアイテムをチェックする。
 
  +
**{{nbt|compound|predicate}}: Predicate applied to item, uses same structure as advancements.
 
  +
* '''group''' - グループ化する。1個の条件を複数のエントリに適用したい場合などに便利。
*** {{Nbt_inherit/conditions/item|indent=***}}
 
  +
** {{nbt|list|children}}: エントリプロバイダーのリスト。
* '''random_chance''' - 乱数が0.0~1.0の規定値未満である場合にテストする。
 
** {{nbt|float|chance:}} 0.0~1.0数としての成功率
+
*** {{nbt|compound}} それぞれ項目
  +
* '''random_chance_with_looting''' - 乱数が0.0~1.0の値よりも小さく、<code>killer</code> のエンティティに[[ドロップ増加]]のレベルによって影響を受けた場合にテストする。<!-- 要改訳 -->
 
  +
** {{nbt|float|chance:}} 基本成功率。
 
  +
* '''alternatives''' - リスト内を順番に参照していき、最初に条件を通過したエントリプロバイダーのみを適用する。
** {{nbt|float|looting_multiplier:}} 基本成功率をドロップ増加で調整する。式は <code>chance + (looting_level * looting_multiplier)</code>。
 
  +
** {{nbt|list|children}}: エントリプロバイダーのリスト。
* '''weather_check ''' - 天候をチェックする。
 
  +
*** {{nbt|compound}} エントリプロバイダー。
** {{nbt|boolean|raining}}: true のとき、雨が降っている間のみこの条件が満たされる。
 
  +
** {{nbt|boolean|thundering}}: true のとき、雷が鳴っている間ののみこの条件が満たされる{{Verify|英語版だと、trueのとき、雷が鳴っている間のみfalseと評価される、という意味不明な文章でした。一度検証してみる必要がありそうです。}}。
 
  +
  +
* '''sequence''' - リスト内を順番に参照していき、条件を通過できないエントリプロバイダーが出現するまですべての項目を適用する。条件を通過出来なくなった時点で試行は終了となる。
  +
** {{nbt|list|children}}: 項目のリスト。
  +
*** {{nbt|compound}} エントリプロバイダー。
 
</div>
 
</div>
   
== ルートテーブルの一覧 ==
+
== ルートテーブルおよびそ他のデータパックファイルで繰り返し使用されるJSON構造 ==
   
  +
=== プレディケート ===
以下は、デフォルトで存在するすべてのルートテーブルの一覧である。カスタムマップで使用する保存ワールドでは、これに加え複数の表を追加できる。
 
  +
{{main|プレディケート}}
  +
'''プレディケート'''は、ルートテーブル内においてはドロップの発生、アイテムの生成、プールの使用、関数の使用に条件を設定するために使用される。
   
  +
プレディケートはルートテーブル内に直接組み込んで記述する以外にも個別のJSONファイルとして定義することができ、この場合にはルートテーブル以外にも様々な場面で使用することができる。
  +
  +
プレディケートのJSON構造については[[プレディケート|当該記事]]を参照のこと。
  +
  +
=== アイテム関数 ===
  +
{{main|アイテム修飾子}}
  +
'''アイテム関数'''および'''ルート関数'''は、ルートテーブル内においては生成されたアイテムのスタックに個数の変更やエンチャントの追加など様々な変更を施すために使用される。
  +
  +
アイテム関数はルートテーブルに直接記述される以外にも、一つまたは複数のアイテム関数のセットであり'''アイテム修飾子'''と呼ばれる個別のファイルで定義することが可能であり、この場合はルートテーブル以外の場面においても{{cmd|item}}を介してインベントリや収納ブロック内のアイテムに変更を加えることができる。
  +
  +
アイテム関数のJSON構造は[[アイテム修飾子|当該記事]]を参照のこと。
  +
  +
=== ナンバープロバイダー ===
  +
ナンバープロバイダーは、ルートテーブルやアイテム関数などの随所で整数や単精度浮動小数点数を指定するのに使用されている。
  +
  +
定数を指定する場合と、オブジェクトで指定する場合がある。
  +
  +
;定数型
 
<div class="treeview">
 
<div class="treeview">
  +
* {{nbt|int}}{{nbt|float}}: 使用する定数。
* '''loot_tables'''
 
**'''chests''' - [[チェストの戦利品]]のアイテム。
 
***'''abandoned_mineshaft''' - [[廃坑]]で見つかる[[チェスト付きトロッコ]]。
 
***'''bastion_bridge''' -[[砦の遺跡#.E6.A9.8B 2|砦の遺跡の橋]]で見つかるチェスト。
 
***'''bastion_hoglin_stable'''-[[砦の遺跡#.E3.83.9B.E3.82.B0.E3.83.AA.E3.83.B3.E3.81.AE.E5.B0.8F.E5.B1.8B 2|砦の遺跡のホグリンの小屋]]で見つかるチェスト'''。'''
 
***'''bastion_other'''-[[砦の遺跡#.E4.B8.80.E8.88.AC|砦の遺跡の一般]]で見つかるチェスト。
 
***'''bastion_treasure'''-[[砦の遺跡#.E5.AE.9D.E7.89.A9.E9.83.A8.E5.B1.8B 2|砦の遺跡の宝物部屋]]で見つかるチェスト。
 
***'''desert_pyramid''' - [[砂漠の寺院]]内部の宝物庫で見つかるチェスト。
 
***'''end_city_treasure''' - [[エンドシティ]]で見つかるチェスト。
 
***'''igloo_chest''' - [[イグルー]]の地下にあるチェスト。
 
***'''jungle_temple''' - [[ジャングルの寺院]]で見つかるチェスト。
 
***'''jungle_temple_dispenser''' - [[ジャングルの寺院]]で見つかるディスペンサー。
 
***'''nether_bridge''' - [[ネザー要塞]]で見つかるチェスト。
 
***'''simple_dungeon''' - [[ダンジョン]]のチェスト。
 
***'''spawn_bonus_chest''' - [[ボーナスチェスト]]が有効になっている際に、[[ワールド]]生成時に現れるチェスト。
 
***'''stronghold_corridor''' - [[要塞#ハーフブロックの祭壇|要塞内廊下]]で見つかるハーフブロックの祭壇のチェスト。
 
***'''stronghold_crossing''' - [[要塞#物置|要塞内物置]]で見つかる上位チェスト。
 
***'''stronghold_library''' - [[要塞#図書室 2|要塞内図書室]]で見つかるチェスト。
 
***'''village_blacksmith''' - [[村]]で見つかる鍛冶屋のチェスト。
 
** '''entities''' - [[エンティティ]]がドロップするアイテム。スタック数が0で生成された一部のアイテムによって、チェストに適応された際に問題が発生する可能性がある。
 
*** '''sheep''' - ヒツジの羊毛。染色されたヒツジによっても継承される。
 
**** '''black'''
 
**** '''blue'''
 
**** '''brown'''
 
**** '''cyan'''
 
**** '''gray'''
 
**** '''green'''
 
**** '''light_blue'''
 
**** '''lime'''
 
**** '''magenta'''
 
**** '''orange'''
 
**** '''pink'''
 
**** '''purple'''
 
**** '''red'''
 
**** '''silver'''
 
**** '''white'''
 
**** '''yellow'''
 
*** '''bat'''
 
*** '''blaze'''
 
*** '''cave_spider'''
 
*** '''chicken'''
 
*** '''cow'''
 
*** '''creeper'''
 
*** '''donkey'''
 
*** '''elder_guardian'''
 
*** '''enderman'''
 
*** '''endermite'''
 
*** '''ghast'''
 
*** '''giant'''
 
*** '''guardian'''
 
*** '''horse'''
 
*** '''husk'''
 
*** '''iron_golem'''
 
*** '''magma_cube'''
 
*** '''mule'''
 
*** '''mushroom_cow'''
 
*** '''ocelot'''
 
*** '''pig'''
 
*** '''rabbit'''
 
*** '''sheep''' - 毛がないヒツジ。毛のあるヒツジによっても継承される。
 
*** '''shulker'''
 
*** '''silverfish'''
 
*** '''skeleton'''
 
*** '''skeleton_horse'''
 
*** '''slime'''
 
*** '''snowman''' - スノウゴーレム。
 
*** '''spider'''
 
*** '''squid'''
 
*** '''witch'''
 
*** '''wither_skeleton'''
 
*** '''wolf'''
 
*** '''zombie'''
 
*** '''zombie_horse'''
 
*** '''zombie_pigman'''
 
*** '''zombie_villager'''
 
** '''gameplay'''
 
*** '''fishing'''
 
**** '''fish''' - ガーディアンやエルダーガーディアンによっても継承される。
 
**** '''junk'''
 
**** '''treasure'''
 
*** '''fishing''' - 釣りのフォルダから3つの表を読み込み、それぞれに幸運を適応することにより、釣れるアイテムを決定するために使用される。
 
** '''empty''' - アイテムなし。
 
 
</div>
 
</div>
   
  +
;範囲型
== カスタムマップ ==
 
  +
<div class="treeview">
  +
* {{nbt|compound}}: ナンバープロバイダーの最上位のタグ。
  +
** {{nbt|string|type}}: ナンバープロバイダーの形式。この値に従って、ナンバープロバイダーは対応する追加のプロパティと機能を持つ。
  +
</div>
  +
  +
{{nbt|string|type}}の取り得る値と対応する追加のプロパティは次の通り。
   
カスタムマップにおいても、コンテナに入ったり Mob からドロップされるアイテムを、ルートテーブルを使用して変更できる。これは、既存のルートテーブルの変更や、新しく作成することも可能である。以下はそのファイルの配置である:
 
 
<div class="treeview">
 
<div class="treeview">
  +
* '''< ワールドが保存されているフォルダ >'''
 
  +
* '''constant''' - 定数を生成する。
** '''data'''
 
  +
** {{nbt|int}}{{nbt|float|value}}: 指定したい値。
*** '''loot_tables'''
 
  +
**** '''minecraft'''
 
  +
**** '''< カスタムディレクトリ >'''
 
  +
* '''uniform''' - 指定した数値間の範囲(閉区間)から、均一な確率で数値を生成する。
  +
** {{nbt|int}}{{nbt|float}}{{nbt|compound|min}}: 最小値を生成するナンバープロバイダー。
  +
** {{nbt|int}}{{nbt|float}}{{nbt|compound|max}}: 最大値を生成するナンバープロバイダー。
  +
  +
  +
* '''binomial''' - 指定したnとpに拠る二項分布に従った確率で数値を生成する。
  +
** {{nbt|int}}{{nbt|compound|n}}: ナンバープロバイダー。二項分布の試行回数の値。
  +
** {{nbt|float}}{{nbt|compound|p}}: ナンバープロバイダー。二項分布の確率の値。
  +
  +
  +
* '''score''' - 数値をスコアボードの値から取得する。
  +
** {{nbt|compound|target}}: スコアボードの値の参照先となるエンティティやプレイヤーを指定するコンパウンド。
  +
*** {{nbt|string|type}}: プレイヤー名やエンティティのUUIDで指定する場合は{{cd|fixed}}を、ルート状況によって与えられるエンティティを使用する場合は{{cd|context}}を指定する。
  +
*** {{nbt|string|name}}: {{nbt|string|type}}が{{cd|fixed}}の場合のみ使用される。スコアボードの値を参照するプレイヤーの名前またはエンティティの [[UUID]]<small>(ハイフン付き16進形式)</small>を指定する。
  +
*** {{nbt|string|target}}: {{nbt|string|type}}が{{cd|context}}の場合のみ使用される。スコアボードの値を参照するエンティティを、[[#ルート条件の種類|ルート条件]]によって与えられる引数で指定する。取りうる値は、{{cd|this}}、{{cd|killer}}、{{cd|direct_killer}}、{{cd|killer_player}}のいずれかである。
  +
** {{nbt|string|score}}: 値を取得するスコアボードのオブジェクト。
  +
** {{nbt|float|scale}}: 任意の要素。スコアボードの値を何倍にしてルートテーブル内で使用するかを決定する倍率。
 
</div>
 
</div>
   
  +
== ルート状況 ==
JSON ファイルは、このフォルダに入る。ゾンビのファイルを例にすると、<code>data/loot_tables/minecraft/entities/zombie.json</code> に配置されることになる。これは、そのワールドのあらゆるゾンビのデフォルトであるルートテーブルを、作成したルートテーブルに置き換えて使用することができるということである。カスタマイズされたルートテーブルを追加するには、ディレクトリを新しく作成し、その中に配置する必要がある。その後、DeathLootTable のデータタグでルートテーブルのディレクトリとファイル(.json 拡張子なし)の名前を指定して、Mob を召喚すれば良い。例えば「MyLootTable」というフォルダ内に「Test1」というフォルダを作成し、その中に「example.json」という名前でファイルを配置した場合は<code>{DeathLootTable:"MyLootTable:test1/example"}</code> とする。
 
  +
<!--編者註:英語版より文章構成をやや改めています。~~~~ -->
  +
'''ルート状況'''({{en|Loot context}})とは、ルートテーブルが召喚された状況に対応したさまざまなパラメータをプレディケート、ルート関数、ナンバープロバイダーに与えるための仕組みである。ルート状況はフィールド{{nbt|string|type}}を用いて指定する。
  +
  +
データパックの読み込み時には、ルートテーブル内で使用されている状況パラメータが指定されているルート状況に対応しているかどうかを検証することができ、ゲーム内で実際にルートテーブルを使用する前にエラーを検出することができる。状況パラメータの中には、そのルート状況において必ず値を提供するものと場合によって提供しないものがあり、ルートテーブルが召喚された際にはルートテーブルが今回提供されていない状況パラメータが使用されていないか改めて確認される。
  +
  +
有効なルート状況の値とその用途、対応している状況パラメータは下表の通り。
  +
  +
{| class="wikitable" data-description="Invocation methods for predicates and loot functions"
  +
! scope="col" | ルート状況の値
  +
! scope="col" | 用途
  +
! scope="col" | 必ず提供される状況パラメータ
  +
! scope="col" | 場合によって提供される状況パラメータ
  +
|-
  +
| {{cd|empty}} ||
  +
* 使用されていないルート状況。特に状況パラメータを与えない。
  +
* {{cd|"type":"empty"}}を指定した場合、このルートテーブル内では状況パラメータが一切使用できないことを示す。
  +
| なし || なし
  +
|-
  +
| {{cd|chest}} ||
  +
* ルートテーブルを伴う収納ブロック({{#var:containers}})を開いたとき。
  +
* {{cmd|loot &hellip; loot &lt;loot_table&gt;}}の実行時。
  +
|
  +
* '''{{cd|Origin}}''' ブロックの座標。
  +
|
  +
* '''{{cd|this}}''' 収納ブロックを開いたエンティティ
  +
|-
  +
| {{cd|command}} ||
  +
* ルートテーブルでは使用されないため、ルートテーブル内で{{cd|"type":"command"}}を指定しても意味を為さない。
  +
* {{cmd|item modify}}や{{cmd|execute (if{{!}}unless) predicate}}のコマンドを実行した際には、内部的にこのルート状況が使用されている。
  +
|
  +
* '''{{cd|Origin}}''':コマンドの実行地点
  +
|
  +
* '''{{cd|this}}''':コマンドの実行時の文脈上で{{cd|@s}}に設定されているエンティティ。
  +
|-
  +
| {{cd|selector}} ||
  +
* ルートテーブルでは使用されないため、ルートテーブル内で{{cd|"type":"selector"}}を指定しても意味を為さない。
  +
* {{cd|predicate}}の[[ターゲットセレクター]]の引数として内部的に使用される。
  +
|
  +
* '''{{cd|Origin}}''':エンティティがプレディケートによって確認を受けた地点。
  +
* '''{{cd|this}}''':確認を受けたエンティティ。
  +
|
  +
|-
  +
| {{cd|fishing}} ||
  +
* [[釣り]]。
  +
* コマンド{{cmd|loot &hellip; fish &lt;loot_table&gt;}}の実行時。
  +
|
  +
* '''{{cd|Origin}}''':釣り竿の浮きの座標。
  +
* '''Tool''':プレイヤーが手に持っている釣り竿。
  +
|
  +
* '''{{cd|this}}''':釣り竿の浮き(エンティティ)。
  +
|-
  +
| {{cd|entity}} ||
  +
* 生物エンティティからのドロップ時。
  +
* コマンド{{cmd|loot &hellip; kill &lt;target&gt;}}の実行時。
  +
|
  +
* '''{{cd|this}}''':死亡したエンティティ。
  +
* '''Origin''':死亡位置。
  +
* '''Damage source''':致命打のダメージ源。
  +
|
  +
* '''{{cd|killer}}''':致命打の根本的な原因 となったエンティティ。例えばエンティティが矢などの飛翔体によって死亡した場合、これを発射したエンティティが{{cd|killer}}に該当する。
  +
* '''{{cd|direct_killer}}''':致命打を直接与えたエンティティ。例えばエンティティが飛翔体によって死亡した場合、発射者ではなく飛翔体自身がこれに該当する。
  +
* '''{{cd|killer_player}}''':死亡したエンティティを最も直近で攻撃したプレイヤー。
  +
|-
  +
| {{cd|archaeology}} ||
  +
* [[Brush]]を[[Suspicious Sand]]/[[Suspicious Gravel|Gravel]]に使用した際。
  +
|
  +
* '''Origin''':Suspicious Sand/Gravelの座標。
  +
|
  +
* '''{{cd|this}}''':Suspicious Sand/GravelにBrushを使用したエンティティ。
  +
|-
  +
| {{cd|gift}} ||
  +
* ネコの朝の贈り物、[[スニッファー]]が地面から古代の種を発掘した際、または襲撃撃破時の村人からの贈り物を生成する際。
  +
|
  +
* '''Origin''':村人及びネコの位置。
  +
* '''{{cd|this}}''':贈り物の対象となるエンティティ。
  +
|
  +
|-
  +
| {{cd|barter}} ||
  +
* [[ピグリン]]との[[物々交換]]時。
  +
|
  +
* '''{{cd|this}}''':物々交換をしたピグリン。
  +
|
  +
|-
  +
| {{cd|advancement_reward}} ||
  +
* [[進捗/JSONフォーマット|進捗達成報酬]]のアイテム生成に使用するように設定されたルートテーブル内。
  +
|
  +
* '''{{cd|this}}''':進捗を達成したプレイヤー。
  +
* '''Origin''':進捗達成時のプレイヤーの位置。
  +
|
  +
|-
  +
| {{cd|advancement_entity}} ||
  +
* ルートテーブル内では使用されないため、ルートテーブル上で{{cd|"type":"advancement_entity"}}を指定しても意味を為さない。
  +
* 進捗が、エンティティに関する達成要件の確認などの目的でプレディケートを呼び出す際に内部的に用いられる。
  +
|-
  +
| {{cd|advancement_location}} ||
  +
* ルートテーブル内では使用されないため、ルートテーブル上で{{cd|"type":"advancement_location"}}を指定しても意味を為さない。
  +
* 進捗が、ブロックに関する達成要件の確認などの目的でプレディケートを呼び出す際に内部的に用いられる。
  +
|
  +
* '''{{cd|this}}''':プレディケートによる確認を受けたエンティティ。
  +
* '''Origin''':この達成要件トリガーを発生させたプレイヤーの座標。
  +
* '''Block state''':設置・操作を受けたブロック及びそのブロック状態。
  +
* '''Tool''':操作・設置に使用された道具。
  +
|-
  +
| {{cd|generic}} ||
  +
* 使用されていない。これを使用する場合、データパック読み込み時状況パラメータの確認を行わない。
  +
| なし || なし
  +
|-
  +
| {{cd|block}} ||
  +
* 破壊されたブロックからのドロップ時。
  +
* コマンド{{cmd|loot &hellip; mine &lt;pos&gt;}}の実行時。
  +
|
  +
* '''Block state''':破壊されたブロック及びそのブロック状態。
  +
* '''Origin''':破壊されたブロックの座標。
  +
* '''Tool''':破壊に使用された道具。
  +
|
  +
* '''{{cd|this}}''':ブロックを破壊したプレイヤー。
  +
* '''Block entity''':破壊されたブロックがブロックエンティティであった場合のみ与えられる、ブロックエンティティデータ。
  +
* '''Explosion radius''':ブロックが爆風によって破壊された場合にのみ与えられる、幕臣からの半径。
  +
|}
   
 
== 歴史 ==
 
== 歴史 ==
   
{{history|release}}
+
{{History|java}}
{{history||1.9|snap=2015年10月19日|slink={{tweet|Dinnerbone|656102828595920896}}|Dinnerbone がルートテーブルについて発表した。}}
+
{{history||1.9|snap=2015年10月19日|slink={{tweet|Dinnerbone|656102828595920896}}|[[Dinnerbone]] がルートテーブルについて発表した。}}
 
{{history|||snap=15w43a|ルートテーブルが追加された。}}
 
{{history|||snap=15w43a|ルートテーブルが追加された。}}
 
{{history|||snap=15w43b|'''entity_scores''' の条件が追加された。}}
 
{{history|||snap=15w43b|'''entity_scores''' の条件が追加された。}}
 
{{history|||snap=15w43c|「villager_golem.json」が「iron_golem.json」に改名された。
 
{{history|||snap=15w43c|「villager_golem.json」が「iron_golem.json」に改名された。
|釣りのルートテーブル、毛ないヒツジ、ゾンビおよびスケルトンホースが追加された。
+
|釣り、をドロップしないヒツジ、ゾンビおよびスケルトンホースのルートテーブルが追加された。
 
|{{nbt|string|item:}} タグが {{nbt|string|name:}} に、{{nbt|compound|items:}} タグが {{nbt|compound|entries:}} に改名された。
 
|{{nbt|string|item:}} タグが {{nbt|string|name:}} に、{{nbt|compound|items:}} タグが {{nbt|compound|entries:}} に改名された。
 
|{{nbt|string|type:}} タグとアイテムの代わりにルートテーブルを読み込むサポートが追加された。
 
|{{nbt|string|type:}} タグとアイテムの代わりにルートテーブルを読み込むサポートが追加された。
|実際何もしないコードが、{{nbt|int|luck:}} タグのデフォルトファイルとして追加された。
+
|{{nbt|int|luck:}} タグのデフォルトファイルとして追加された。当時は特に機能を持たなかった。
 
|'''set_damage''' の関数が追加された。
 
|'''set_damage''' の関数が追加された。
 
}}
 
}}
326行目: 341行目:
 
|{{nbt|int|luck}} と {{nbt|float|luck_multiplier}} タグが削除された。
 
|{{nbt|int|luck}} と {{nbt|float|luck_multiplier}} タグが削除された。
 
|{{nbt|compound|bonus_rolls}} タグが追加された。}}
 
|{{nbt|compound|bonus_rolls}} タグが追加された。}}
{{history|||snap=15w51a|[[スペクテイター]]モードにおいて、アテム生成するめのルートテーブルの使用必要となるコンテナのトリガー必要なくなった。}}
+
{{history|||snap=15w51a|[[スペクテイター]]モードのプレヤーが収納ブロックの中身閲覧しようとし際に、ルートテーブルによって中身生成されなくなった。}}
 
{{History||1.9.1|snap=1.9.1-pre1|[[ディスペンサー]]と[[ドロッパー]]で使用可能になった。
 
{{History||1.9.1|snap=1.9.1-pre1|[[ディスペンサー]]と[[ドロッパー]]で使用可能になった。
|デフォルトのルートテーブルとして <code>chests/jungle_temple_dispenser</code> が追加された。}}
+
|デフォルトのルートテーブル<code>chests/jungle_temple_dispenser</code> が追加された。}}
{{History||1.11|snap=16w32a|ロバ、ラバ、ハスク、村人ゾンビは、ウマやゾンビで使用されるではなく、それぞれ個別のを持つようになった。}}
+
{{History||1.11|snap=16w32a|ロバ、ラバ、ハスク、村人ゾンビは、ウマやゾンビで使用されるルートテーブルではなく、それぞれ個別のルートテーブルを持つようになった。}}
 
{{History|||snap=16w43a|村人、ヴェックス、エンダードラゴンが自身のルートテーブルを持つようになった。}}
 
{{History|||snap=16w43a|村人、ヴェックス、エンダードラゴンが自身のルートテーブルを持つようになった。}}
  +
{{History||1.13|snap=17w43a|カスタマイズしたルートテーブルの格納場所が、[[データパック]]内に移動した。}}
{{history|foot}}
 
  +
{{History||1.14|snap=18w43a|破壊したブロックからのドロップに、ルートテーブルが使用されるようになった。
  +
|ルートテーブルに様々な設定項目が追加された。
  +
|チェスト及びブロックのルートテーブルにおいて、エンティティを指定するところでルート状況パラメータ{{cd|this}}を使用すると、プレイヤーを指定できるようになった。}}
  +
{{History|||snap=18w44a|ネコの贈り物用のルートテーブル{{cd|cat_morning_gift}}と、プレイヤーおよびウィザーのルートテーブルが追加された。
  +
|新しいブロック用のルートテーブルが追加された。|アイテム関数{{cd|set_lore}}が追加された。}}
  +
{{History|||snap=18w46a|イリュージョナーのルートテーブルが追加された。}}
  +
{{History|||snap=18w48a|村のチェスト用の{{tooltip|様々なルートテーブル|village_cartographer, village_desert_house, village_plains_house, village_savanna_house, village_snowy_house, village_taiga_house, village_tannery, village_weaponsmith}}が追加されたが、一部は当時は使用されていなかった。
  +
|ルートテーブル{{cd|village_blacksmith}}が削除された。}}
  +
{{History|||snap=18w49a|{{cd|d=and|village_savanna_house|village_snowy_house}}が実際に使用されるようになった。
  +
|村のチェスト用の{{tooltip|追加のルートテーブル|village_armorer, village_butcher, village_mason, village_shepherd}}が追加された。}}
  +
{{History|||snap=18w50a|{{cd|village_desert_house|village_taiga_house}}が使用されるようになった。これにより、未使用だったルートテーブルがすべて実装された。}}
  +
{{History|||snap=?|空のルートテーブルがハードコード化された。}}
  +
{{History||1.15|snap=19w34a|アイテム関数{{cd|copy_state}}が追加された。}}
  +
{{History||1.16|snap=20w12a|釣り竿の浮きのプロパティを確認するため、サブプレディケート fishing_hook が追加された。}}
  +
{{History||1.20|snap=Pre-release 1|ルートテーブルからアイテムを生成する際に、名前付きの乱数列を使用するようになった。|各ランダム配列は、ワールドのシード値と配列IDに従って特有のアイテムの配列を生成する。これにより、同じワールド・同じパラメータでルートテーブルを機能させた場合には同じ結果が帰って来る。
  +
|ルートテーブルが使用する乱数列のIDを指定する新しいフィールド{{cd|random_sequence}}が追加された。}}
  +
{{History|||snap=Pre-release 6|ランダム配列のID({{nbt|string|random_sequences}})の指定が任意になった。配列のIDが与えらなかった場合は、非決定的な乱数列を使用する。}}
  +
{{History||1.20.2|snap=23w32a|アイテム関数を使用する際に、ルートテーブル上からでもJSON配列形式を使用することで複数のルート関数をアイテム関数{{cd|sequence}}と同様の振る舞いで実行することができるようになった。
  +
|プレディケートを使用する際に、ルートテーブル上からでもJSON配列形式を使用することで条件の種類{{cd|all_of}}と同様の振る舞いで実行することができるようになった。}}
  +
  +
{{History|foot}}
   
 
== 問題点 ==
 
== 問題点 ==
 
 
{{issue list}}
 
{{issue list}}
  +
  +
== 脚注 ==
  +
{{Reflist}}
   
 
{{Data packs}}
 
{{Data packs}}
 
{{デフォルトソート:るうとてえふる}}
 
   
 
[[de:Beutetabellen]]
 
[[de:Beutetabellen]]
[[en:Loot table]]
+
[[en:Loot Tables]]
 
[[fr:Table de butin]]
 
[[fr:Table de butin]]
 
[[ko:노획물 목록]]
 
[[ko:노획물 목록]]
350行目: 386行目:
 
[[ru:Таблицы добычи]]
 
[[ru:Таблицы добычи]]
 
[[zh:战利品表]]
 
[[zh:战利品表]]
  +
  +
{{デフォルトソート:るうとてえふる}}

2023年12月15日 (金) 23:59時点における最新版

ルートテーブル(英:Loot Table)とは、ゲーム内の様々な場面においてどのようにアイテムを生成するかを決定している技術的なJSONファイルである。具体的には、自然生成された収納ブロックの中身Mobからのドロップアイテム釣りで得られるアイテムなどの場面で使用されている。なお、ルートテーブルはMobからドロップする経験値や、アイテム以外のドロップするエンティティ(虫食いブロックからのシルバーフィッシュや分裂したスライムなど)には関与しない。

定義方法

カスタムデータパックでは、自然生成される収納ブロックの中身やMobのドロップアイテムを変更する目的でルートテーブルを使用することができる。但し、岩盤やネザーポータルなどサバイバルでは破壊できないブロックはルートテーブルを持たないこと、また看板と壁にかけられた看板など一部のブロックはルートテーブルを共有していること、および特定のドロップアイテム(帯電クリーパーに巻き込まれたMobの頭のドロップ、ウィザーのネザースターなど)はルートテーブルを使用していないこと[1] に注意が必要である。

ルートテーブルは、データパックの次の位置に配置することで機能する。

  • (データパック名)
    • data
      • (名前空間名)
        • loot_tables
          • (ルートテーブル名).jsonおよびルートテーブルの下位フォルダ

バニラのMinecraftで使用されるルートテーブルは5つの下位グループに分類される。その4グループとは、

である。例えばzombie.jsondata pack name/data/minecraft/loot_tables/entitiesに配置し、これを編集したデータパックを使用することで通常のドロップ品ではなくここで設定したアイテムをゾンビにドロップさせることができる。

呼び出し方

ルートテーブルを召喚する際は、ルートテーブルを使用するエンティティおよびブロックエンティティのNBTタグに 使用するルートテーブル 使用するシード値を設定する必要がある。同じルートテーブルとシード値を使用した場合、必ず同じアイテムが生成される。なおルートテーブルはどのスロットにアイテムを配置するかまでは決定しておらず、これはシード値によってランダムに決定される。

実際のNBTタグの記述方法は次の通り。

チェストトラップチェストホッパーチェスト付きのトロッコチェスト付きのボートホッパー付きのトロッコディスペンサードロッパーシュルカーボックス怪しげな砂怪しげな砂利飾り壺の場合:

  • 上位のオブジェクト。
    •  LootTable: 収納ブロックが何らかの操作(開く、および破壊・ホッパーでのアイテムの移動など)を受けた時に中身のアイテムを生成するために使用するルートテーブル。ラージチェストに関しては、このタグが付いている方のチェストに該当するスロットのみが影響する。サブフォルダの中のルートテーブルを使用する場合は、サブフォルダ名から書き始める必要がある。
    •  LootTableSeed: ルートテーブルが使用するシード値。指定しない場合及び0を指定した場合は、ランダムなシード値を使用する。

これらのタグは、アイテムが生成されるとともに即座に削除される。

Mobの場合:

  • 上位のオブジェクト。
    •  DeathLootTable: このエンティティが死んだときのドロップアイテムを生成するのに使用するルートテーブル。サブフォルダの中のルートテーブルを使用する場合は、サブフォルダ名から書き始める必要がある。
    •  DeathLootTableSeed: ルートテーブルが使用するシード値。指定しない場合及び0を指定した場合は、ランダムなシード値を使用する。

Mobおよび収納ブロックのルートテーブルは、/execute storeまたは/dataを用いて変更することができる。またプレイヤーは、/lootを用いることでもルートテーブルを召喚することができる。

構造

本項では、ルートテーブルの記述方法を解説する。ルートテーブルはJSON形式によって記述され、以下の構造をもつ。

  • ルートテーブルの最上位のオブジェクト。
    •  type: 任意の要素。ルートテーブルを呼び出す状況を指定する。アイテム関数、プレディケート、ナンバープロバイダーは、使用されているパラメータにこのルート状況が対応しているかどうかを検証したうえで使用され、対応していない状況パラメータが検出された場合には警告メッセージが出力される。有効な値の一覧は後項を参照。
    •  functions: このルートテーブルによって生成されたすべてのアイテムスタックに使用するアイテム関数のリスト。施したい順序に従ってリスト内に指定する。使用範囲を限定したい場合はここではなく、プールや項目の階層の functionsを用いる。
      • それぞれのアイテム関数。このオブジェクトのJSON構造は、アイテム修飾子のページを参照されたい。
    •  pools: このルートテーブル内のすべてのプールのリスト。それぞれのプールはアイテムのスタックをその試行回数だけ生成する。プールは記述されている順番通りに使用される。
      • それぞれのプール。この部分のJSON構造は、次項を参照。
    •  random_sequence:このルートテーブルがアイテムの生成に使用するランダム配列。これとシード値の組み合わせによりアイテム配列が生成される。同じパラメータと同じシード値を用いた場合は、同じアイテム配列が生成される。任意の要素であり、配列のIDが与えらなかった場合は、非決定的なランダム配列を使用する。

プール

  • 最上位のオブジェクト
    •  conditions: このプールが使用されるために通過が必要なプレディケートのリスト。
      • それぞれのプレディケート。この部分のJSON構造は当該記事を参照。
    •  functions: このプールが生成したアイテムスタックに作用するアイテム関数のリスト。作用させたい順番通りに記述する。
      • それぞれのアイテム関数。この部分のJSON構造はアイテム修飾子の記事を参照。
    •  rolls: このプールの試行回数(抽選回数)を指定する。後述するナンバープロバイダーで指定する。
    •  bonus_rolls: 属性値「」(minecraft:generic.luck)1ポイント当たりの追加の生成試行回数を指定する。乗算の後四捨五入される。ナンバープロバイダーで指定する。デフォルトでは0.0。
    •  entries: ルートテーブルの「中身」にあたる、「設定項目」。1回の試行で、この中のどれか1つがランダムに抽選される。後述する weightで抽選を偏らせることができるが、この処理は個々のオブジェクトに対して行われる。
      • それぞれのエントリプロバイダー。そのJSON構造は次項を参照のこと。

エントリプロバイダー

 entriesに記述する項目で、次のJSON構造によって記述される。

  • エントリプロバイダーの最上位のオブジェクト。
    •  conditions: この項目が、自身の属するプールに項目を生成する為に通過する必要のあるプレディケートのリスト。
      • 個々のプレディケート。この部分のJSON構造はプレディケートのページを参照のこと。
    •  type: entriesのタイプを名前空間IDで指定する。この種類に応じて以降の項目が変化する。

有効な typeの値によって、それ以降の項目が以下のように変化する。

  • item - 1スロット分のアイテムをルート項目に追加する。
    •  functions: アイテムのスロットに作用させるアイテム関数のリスト。
      • それぞれのアイテム関数。この部分のJSON構造は、アイテム修飾子を参照のこと。
    •  weight: エントリが、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、この項目の比重/プール内に生成されるすべての項目の比重となる。
    •  quality: ルート状況によって与えられたエンティティの属性値「」(minecraft:generic.luck)に準じて、この項目の weightの値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、entityの場合はkiller_entityのエンティティを、それ以外のルート状況の種類においてはthisのエンティティの属性値が参照される。補正公式は、floor(weight + (quality × generic.luck))である。
    •  name: minecraft:diamondなど、生成するアイテムの名前空間IDを指定する。アイテム関数によって編集を受けていない場合、ここで指定したアイテムが1つ、生成される。


  • tag - 特定のアイテムタグに含まれる一つ一つのアイテムをそれぞれすべてプール内の項目に追加するか、またはタグに含まれるすべてのアイテムの中から一つアイテムを選出する項目を一つだけプールに追加する。
    •  functions: アイテムのスロットに作用させるアイテム関数のリスト。
      • それぞれのアイテム関数。この部分のJSON構造は、アイテム修飾子を参照のこと。
    •  weight: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、この項目の比重/プール内に生成されるすべての項目の比重となる。
    •  quality: ルート状況によって与えられたエンティティの属性値「」(minecraft:generic.luck)に準じて、この項目の weightの値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、entityの場合はkiller_entityのエンティティを、それ以外のルート状況の種類においてはthisのエンティティの属性値が参照される。補正公式は、floor(weight + (quality × generic.luck))である。
    •  name: 参照するアイテムタグの名前空間ID(例:minecraft:arrows
    •  expand: trueの場合はタグ内のすべてのアイテムについて一つずつ、指定された比重と比重補正値で項目を生成する。falseの場合はタグ内のすべてのアイテムを生成しうる項目を一つだけ生成する。アイテム関数によって編集を受けていない場合、アイテムは1つ生成される。


  • loot_table - プールの項目として、別のルートテーブルを与える。
    •  functions: アイテムのスロットに作用させるアイテム関数のリスト。
      • それぞれのアイテム関数。この部分のJSON構造は、アイテム修飾子を参照のこと。
    •  weight: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、この項目の比重/プール内に生成されるすべての項目の比重となる。
    •  quality: ルート状況によって与えられたエンティティの属性値「」(minecraft:generic.luck)に準じて、この項目の weightの値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、entityの場合はkiller_entityのエンティティを、それ以外のルート状況の種類においてはthisのエンティティの属性値が参照される。補正公式は、floor(weight + (quality × generic.luck))である。
    •  name: 使用するルートテーブルの名前空間ID(例:minecraft:gameplay/fishing/junk)。


  • dynamic - チェストを破壊した際など、それぞれのブロック特有のドロップアイテムを生成する項目を生成する。
    •  functions: アイテムのスロットに作用させるアイテム関数のリスト。
      • それぞれのアイテム関数。この部分のJSON構造は、アイテム修飾子を参照のこと。
    •  weight: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、この項目の比重/プール内に生成されるすべての項目の比重となる。
    •  quality: ルート状況によって与えられたエンティティの属性値「」(minecraft:generic.luck)に準じて、この項目の weightの値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、entityの場合はkiller_entityのエンティティを、それ以外のルート状況の種類においてはthisのエンティティの属性値が参照される。補正公式は、floor(weight + (quality × generic.luck))である。
    •  name: contentsに指定すると、ブロックエンティティの中身のアイテムが生成される。


  • empty - 選択された際に何もアイテムを生成しない項目を作成するための項目。
    •  functions: アイテムのスロットに作用させるアイテム関数のリスト。
      • それぞれのアイテム関数。この部分のJSON構造は、アイテム修飾子を参照のこと。
    •  weight: 生成されたそれぞれの項目が、どの程度の確率でプールから選出されるかを決定する比重。選ばれる確率は、この項目の比重/プール内に生成されるすべての項目の比重となる。
    •  quality: ルート状況によって与えられたエンティティの属性値「」(minecraft:generic.luck)に準じて、この項目の weightの値を補正する。属性値を参照するエンティティはルート状況の種類によって異なり、entityの場合はkiller_entityのエンティティを、それ以外のルート状況の種類においてはthisのエンティティの属性値が参照される。補正公式は、floor(weight + (quality × generic.luck))である。


  • group - グループ化する。1個の条件を複数のエントリに適用したい場合などに便利。
    •  children: エントリプロバイダーのリスト。
      • それぞれの項目。


  • alternatives - リスト内を順番に参照していき、最初に条件を通過したエントリプロバイダーのみを適用する。
    •  children: エントリプロバイダーのリスト。
      • エントリプロバイダー。


  • sequence - リスト内を順番に参照していき、条件を通過できないエントリプロバイダーが出現するまですべての項目を適用する。条件を通過出来なくなった時点で試行は終了となる。
    •  children: 項目のリスト。
      • エントリプロバイダー。

ルートテーブルおよびその他のデータパックファイルで繰り返し使用されるJSON構造

プレディケート

詳細は「プレディケート」を参照

プレディケートは、ルートテーブル内においてはドロップの発生、アイテムの生成、プールの使用、関数の使用に条件を設定するために使用される。

プレディケートはルートテーブル内に直接組み込んで記述する以外にも個別のJSONファイルとして定義することができ、この場合にはルートテーブル以外にも様々な場面で使用することができる。

プレディケートのJSON構造については当該記事を参照のこと。

アイテム関数

詳細は「アイテム修飾子」を参照

アイテム関数およびルート関数は、ルートテーブル内においては生成されたアイテムのスタックに個数の変更やエンチャントの追加など様々な変更を施すために使用される。

アイテム関数はルートテーブルに直接記述される以外にも、一つまたは複数のアイテム関数のセットでありアイテム修飾子と呼ばれる個別のファイルで定義することが可能であり、この場合はルートテーブル以外の場面においても/itemを介してインベントリや収納ブロック内のアイテムに変更を加えることができる。

アイテム関数のJSON構造は当該記事を参照のこと。

ナンバープロバイダー

ナンバープロバイダーは、ルートテーブルやアイテム関数などの随所で整数や単精度浮動小数点数を指定するのに使用されている。

定数を指定する場合と、オブジェクトで指定する場合がある。

定数型
  • : 使用する定数。
範囲型
  • : ナンバープロバイダーの最上位のタグ。
    •  type: ナンバープロバイダーの形式。この値に従って、ナンバープロバイダーは対応する追加のプロパティと機能を持つ。

 typeの取り得る値と対応する追加のプロパティは次の通り。

  • constant - 定数を生成する。
    •  value: 指定したい値。


  • uniform - 指定した数値間の範囲(閉区間)から、均一な確率で数値を生成する。
    •  min: 最小値を生成するナンバープロバイダー。
    •  max: 最大値を生成するナンバープロバイダー。


  • binomial - 指定したnとpに拠る二項分布に従った確率で数値を生成する。
    •  n: ナンバープロバイダー。二項分布の試行回数の値。
    •  p: ナンバープロバイダー。二項分布の確率の値。


  • score - 数値をスコアボードの値から取得する。
    •  target: スコアボードの値の参照先となるエンティティやプレイヤーを指定するコンパウンド。
      •  type: プレイヤー名やエンティティのUUIDで指定する場合はfixedを、ルート状況によって与えられるエンティティを使用する場合はcontextを指定する。
      •  name:  typefixedの場合のみ使用される。スコアボードの値を参照するプレイヤーの名前またはエンティティの UUID(ハイフン付き16進形式)を指定する。
      •  target:  typecontextの場合のみ使用される。スコアボードの値を参照するエンティティを、ルート条件によって与えられる引数で指定する。取りうる値は、thiskillerdirect_killerkiller_playerのいずれかである。
    •  score: 値を取得するスコアボードのオブジェクト。
    •  scale: 任意の要素。スコアボードの値を何倍にしてルートテーブル内で使用するかを決定する倍率。

ルート状況

ルート状況(英:Loot context)とは、ルートテーブルが召喚された状況に対応したさまざまなパラメータをプレディケート、ルート関数、ナンバープロバイダーに与えるための仕組みである。ルート状況はフィールド typeを用いて指定する。

データパックの読み込み時には、ルートテーブル内で使用されている状況パラメータが指定されているルート状況に対応しているかどうかを検証することができ、ゲーム内で実際にルートテーブルを使用する前にエラーを検出することができる。状況パラメータの中には、そのルート状況において必ず値を提供するものと場合によって提供しないものがあり、ルートテーブルが召喚された際にはルートテーブルが今回提供されていない状況パラメータが使用されていないか改めて確認される。

有効なルート状況の値とその用途、対応している状況パラメータは下表の通り。

ルート状況の値 用途 必ず提供される状況パラメータ 場合によって提供される状況パラメータ
empty
  • 使用されていないルート状況。特に状況パラメータを与えない。
  • "type":"empty"を指定した場合、このルートテーブル内では状況パラメータが一切使用できないことを示す。
なし なし
chest
  • Origin ブロックの座標。
  • this 収納ブロックを開いたエンティティ
command
  • ルートテーブルでは使用されないため、ルートテーブル内で"type":"command"を指定しても意味を為さない。
  • /item modify/execute (if|unless) predicateのコマンドを実行した際には、内部的にこのルート状況が使用されている。
  • Origin:コマンドの実行地点
  • this:コマンドの実行時の文脈上で@sに設定されているエンティティ。
selector
  • ルートテーブルでは使用されないため、ルートテーブル内で"type":"selector"を指定しても意味を為さない。
  • predicateターゲットセレクターの引数として内部的に使用される。
  • Origin:エンティティがプレディケートによって確認を受けた地点。
  • this:確認を受けたエンティティ。
fishing
  • 釣り
  • コマンド/loot … fish <loot_table>の実行時。
  • Origin:釣り竿の浮きの座標。
  • Tool:プレイヤーが手に持っている釣り竿。
  • this:釣り竿の浮き(エンティティ)。
entity
  • 生物エンティティからのドロップ時。
  • コマンド/loot … kill <target>の実行時。
  • this:死亡したエンティティ。
  • Origin:死亡位置。
  • Damage source:致命打のダメージ源。
  • killer:致命打の根本的な原因 となったエンティティ。例えばエンティティが矢などの飛翔体によって死亡した場合、これを発射したエンティティがkillerに該当する。
  • direct_killer:致命打を直接与えたエンティティ。例えばエンティティが飛翔体によって死亡した場合、発射者ではなく飛翔体自身がこれに該当する。
  • killer_player:死亡したエンティティを最も直近で攻撃したプレイヤー。
archaeology
  • Origin:Suspicious Sand/Gravelの座標。
  • this:Suspicious Sand/GravelにBrushを使用したエンティティ。
gift
  • ネコの朝の贈り物、スニッファーが地面から古代の種を発掘した際、または襲撃撃破時の村人からの贈り物を生成する際。
  • Origin:村人及びネコの位置。
  • this:贈り物の対象となるエンティティ。
barter 
  • this:物々交換をしたピグリン。
advancement_reward
  • 進捗達成報酬のアイテム生成に使用するように設定されたルートテーブル内。
  • this:進捗を達成したプレイヤー。
  • Origin:進捗達成時のプレイヤーの位置。
advancement_entity
  • ルートテーブル内では使用されないため、ルートテーブル上で"type":"advancement_entity"を指定しても意味を為さない。
  • 進捗が、エンティティに関する達成要件の確認などの目的でプレディケートを呼び出す際に内部的に用いられる。
advancement_location
  • ルートテーブル内では使用されないため、ルートテーブル上で"type":"advancement_location"を指定しても意味を為さない。
  • 進捗が、ブロックに関する達成要件の確認などの目的でプレディケートを呼び出す際に内部的に用いられる。
  • this:プレディケートによる確認を受けたエンティティ。
  • Origin:この達成要件トリガーを発生させたプレイヤーの座標。
  • Block state:設置・操作を受けたブロック及びそのブロック状態。
  • Tool:操作・設置に使用された道具。
generic
  • 使用されていない。これを使用する場合、データパック読み込み時状況パラメータの確認を行わない。
なし なし
block
  • 破壊されたブロックからのドロップ時。
  • コマンド/loot … mine <pos>の実行時。
  • Block state:破壊されたブロック及びそのブロック状態。
  • Origin:破壊されたブロックの座標。
  • Tool:破壊に使用された道具。
  • this:ブロックを破壊したプレイヤー。
  • Block entity:破壊されたブロックがブロックエンティティであった場合のみ与えられる、ブロックエンティティデータ。
  • Explosion radius:ブロックが爆風によって破壊された場合にのみ与えられる、幕臣からの半径。

歴史

Java Edition
1.92015年10月19日Dinnerbone がルートテーブルについて発表した。
15w43aルートテーブルが追加された。
15w43bentity_scores の条件が追加された。
15w43c「villager_golem.json」が「iron_golem.json」に改名された。
釣り、羊毛をドロップしないヒツジ、ゾンビおよびスケルトンホースのルートテーブルが追加された。
 item: タグが  name: に、 items: タグが  entries: に改名された。
 type: タグとアイテムの代わりにルートテーブルを読み込むサポートが追加された。
 luck: タグのデフォルトファイルとして追加された。当時は特に機能を持たなかった。
set_damage の関数が追加された。
15w44aenchant_randomlyset_attributes の関数が追加された。
15w44b quality タグが追加された。
 luck luck_multiplier タグが削除された。
 bonus_rolls タグが追加された。
15w51aスペクテイターモードのプレイヤーが収納ブロックの中身を閲覧しようとした際に、ルートテーブルによって中身が生成されなくなった。
1.9.11.9.1-pre1ディスペンサードロッパーで使用可能になった。
デフォルトのルートテーブルchests/jungle_temple_dispenser が追加された。
1.1116w32aロバ、ラバ、ハスク、村人ゾンビは、ウマやゾンビで使用されるルートテーブルではなく、それぞれ個別のルートテーブルを持つようになった。
16w43a村人、ヴェックス、エンダードラゴンが自身のルートテーブルを持つようになった。
1.1317w43aカスタマイズしたルートテーブルの格納場所が、データパック内に移動した。
1.1418w43a破壊したブロックからのドロップに、ルートテーブルが使用されるようになった。
ルートテーブルに様々な設定項目が追加された。
チェスト及びブロックのルートテーブルにおいて、エンティティを指定するところでルート状況パラメータthisを使用すると、プレイヤーを指定できるようになった。
18w44aネコの贈り物用のルートテーブルcat_morning_giftと、プレイヤーおよびウィザーのルートテーブルが追加された。
新しいブロック用のルートテーブルが追加された。
アイテム関数set_loreが追加された。
18w46aイリュージョナーのルートテーブルが追加された。
18w48a村のチェスト用の様々なルートテーブルが追加されたが、一部は当時は使用されていなかった。
ルートテーブルvillage_blacksmithが削除された。
18w49avillage_savanna_houseおよびvillage_snowy_houseが実際に使用されるようになった。
村のチェスト用の追加のルートテーブルが追加された。
18w50avillage_desert_house village_taiga_houseが使用されるようになった。これにより、未使用だったルートテーブルがすべて実装された。
?空のルートテーブルがハードコード化された。
1.1519w34aアイテム関数copy_stateが追加された。
1.1620w12a釣り竿の浮きのプロパティを確認するため、サブプレディケート fishing_hook が追加された。
1.20Pre-release 1ルートテーブルからアイテムを生成する際に、名前付きの乱数列を使用するようになった。
各ランダム配列は、ワールドのシード値と配列IDに従って特有のアイテムの配列を生成する。これにより、同じワールド・同じパラメータでルートテーブルを機能させた場合には同じ結果が帰って来る。
ルートテーブルが使用する乱数列のIDを指定する新しいフィールドrandom_sequenceが追加された。
Pre-release 6ランダム配列のID( random_sequences)の指定が任意になった。配列のIDが与えらなかった場合は、非決定的な乱数列を使用する。
1.20.223w32aアイテム関数を使用する際に、ルートテーブル上からでもJSON配列形式を使用することで複数のルート関数をアイテム関数sequenceと同様の振る舞いで実行することができるようになった。
プレディケートを使用する際に、ルートテーブル上からでもJSON配列形式を使用することで条件の種類all_ofと同様の振る舞いで実行することができるようになった。

問題点

「ルートテーブル」に関する問題点は、バグトラッカーにて管理されている。問題点の報告はそちらで行ってほしい。

脚注