ルート テーブルの概要

ルート テーブルは、ゲーム内でアイテムがどのように生成されるかを定義するのに使用される JSON 形式のファイルです。 チェストの中身を生成したり、エンティティが死んだときにドロップするアイテムや、エンティティが装備しているアイテムを定義したりするのに使用できます。 場合によっては、ムーシュルームの乳しぼりや釣りなどのゲームプレイ メカニズムに使用されることもあります。

チェストを開いてルートを見ているアレックスを示す画像。

ルート テーブル ファイルは、ビヘイビアー パックのルート ディレクトリ内にあり、通常は、"プール" と呼ばれる 3 つのメイン セクションで構成されています。

  • 抽選回数
    • このプールでエントリを選ぶための抽選が行われる回数です。 これは、一定の抽選回数となる整数か、抽選回数として選択できる最小値と最大値の範囲のいずれかです。
  • 条件 (オプション) 詳細
    • これは、このプールで抽選を行うために満たさなければならない条件です。
  • エントリ
    • これは、抽選時に選択されるオブジェクトのリストです。 itemloot_table のほか、抽選で何も起きない可能性が必要な場合は empty にできます。

このチュートリアルでは、次の内容を学びます。

  • JSON を使用してルート テーブルを定義する方法。
  • 関数をエントリに適用して選択対象のアイテムを変更する方法。
  • 条件を使用してどのような場合にプールやエントリが選択されるかを細かく制限する方法。

要件

本チュートリアルを開始する前に、以下を完了しておくことをお勧めします。

基本的な使用方法

まずは、呼び出されたときに 1 個のダイヤモンドを返すルート テーブルを作成しましょう。

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

ご覧のように、抽選を 1 回だけ行い、そのたびに 1 個のダイヤモンドが含まれる単一のプールを定義しました。 これをエンティティのビヘイビアー ファイル内の minecraft:loot コンポーネントと組み合わせると、死んだときにそのダイヤモンドを落とすようになります。

では、2 つのアイテムから選択したい場合はどうでしょうか? ダイヤモンドか石炭の欠片を返したい場合はどうしますか? そのような場合は、entries オブジェクトに 2 つ目の値を追加します。

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

現状ではダイヤモンドと石炭の欠片を落とす確率が同じであることに気が付くかと思います。 すべての entries には weight が割り当てられています。 これを指定していない場合はデフォルトで 1 になり、すべての entries に抽選の確率が同等に与えられます。 これを調整するには、自分で weight 値を定義する必要があります。

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

どのように weight が抽選に影響するかを理解するには、上記の例に 2 つのエントリではなく 8 つのエントリ、つまり石炭 7 個とダイヤモンド 1 個が含まれていると想像するのが一番です。 その場合、抽選の結果が石炭の欠片になる確率はダイヤモンドよりも 7 倍大きくなります。

Bedrock Edition のバニラ ファイル内には Java Edition の quality 修飾子 (プレーヤーの幸運属性に基づき weight を調整する) がありますが、現在 Bedrock Edition では幸運属性がサポートされていないので、この機能の有用性が失われています。

一連の entries の抽選回数をランダム化することもできます。 rolls キーは min および max 値と共に設定でき、その範囲内の値がランダムに選ばれます。

{
    "pools": [
        {
            "rolls": {
                "min": 1,
                "max": 3
            },
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:diamond",
                    "weight": 1
                },
                {
                    "type": "item",
                    "name": "minecraft:coal",
                    "weight": 7
                }
            ]
        }
    ]
}

上記の場合、エントリの抽選が 1 ~ 3 回行われます。 その結果、このルート テーブルが呼び出されるたびに最小で 1 個、最大で 3 個のアイテムが生成されます。

以下はルート テーブルをエントリの 1 つとして使用した別の例です。 この場合、他のルート テーブルが呼び出され、その結果が返されます。

{
    "pools": [
        {
            "rolls": {
                "min": 1,
                "max": 3
            },
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:diamond",
                    "weight": 1
                },
                {
                    "type": "item",
                    "name": "minecraft:coal",
                    "weight": 7
                },
                {
                    "type": "loot_table",
                    "name": "loot_tables/custom/some_loot_table",
                    "weight": 1
                }
            ]
        }
    ]
}

ルート テーブルはどのような方法でもそれ自体を参照できないという点に注意してください。 抽選の結果が再帰的なルート テーブルになった場合は、何も返されません。

関数とアイテムの変更

関数は、エントリに追加することでアイテムを変更できるオプション操作です。 返されるアイテムの数の定義や、そのアイテムの属性の変更、その他いくつもの操作を行えます。 この記事では、関数のより一般的な使用方法の一部を解説していきますが、利用できるすべての関数の詳しい説明については、ルートおよびトレード テーブル関数のチュートリアルをご覧ください。

set_count

このエントリによって返されるアイテムの最小数と最大数を設定できます。

                {
                    "type": "item",
                    "name": "minecraft:diamond",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "set_count",
                          "count": {
                            "min": 1,
                            "max": 6
                          }
                        }
                    ]
                }

上の例では、エントリの抽選が行われるたびに 1 ~ 6 個のダイヤモンドが返されます。

set_data

アイテムのデータ値を設定します。 特定のポーションや特定の色の染料を返すような場合に便利です。 また、特定の色のウールや特定の種類の丸太など、さまざまなブロック値を返すこともできます。

                {
                    "type": "item",
                    "name": "minecraft:potion",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_data",
                        "data": 21
                      }
                    ]
                }

上の例では、治癒のポーションを返します。

                {
                    "type": "item",
                    "name": "minecraft:wool",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_data",
                        "data": 1
                      }
                    ]
                }

この例では、オレンジのウールを返します。

specific_enchants

この関数では、アイテムに対する特定のエンチャントのリストを設定できます。 この方法により、通常はゲーム内でエンチャントできないアイテムにエンチャントを適用できます。

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "specific_enchants",
                          "enchants": [
                             "knockback",
                             "fire_aspect"
                          ]
                        }
                    ]
                }

エンチャントをオブジェクトとして定義することにより、エンチャント レベルも定義できます。 最大エンチャント レベルはハードコーディングされているので上書きできません。

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "specific_enchants",
                          "enchants": [
                             {
                                "id": "knockback",
                                "level": 1
                             },
                             {
                                "id": "unbreaking",
                                "level": 3
                             }
                          ]
                        }
                    ]
                }

複数の関数

複数の関数を定義できます。 以下は 2 つの関数を組み合わせた例です。 この例では、エントリから 1 ~ 3 個の治癒のポーションが返されます。

                {
                    "type": "item",
                    "name": "minecraft:potion",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_count",
                            "count": {
                              "min": 1,
                              "max": 3
                            }
                        },
                        {
                            "function": "set_data",
                            "data": 21
                        }
                    ]
                }

複数の関数として同じ関数を複数使用することもできますが、それらの関数間で競合が起きた場合は、最後に定義されたものが優先されます。

たとえば、次の例のように複数の set_count 関数を使用すると、重複する関数のうち最後の関数のみが使用されるので、アイテムの数は 1 ~ 3 ではなく 5 ~ 7 となります。

                {
                    "type": "item",
                    "name": "minecraft:potion",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_count",
                            "count": {
                              "min": 1,
                              "max": 3
                            }
                        },
                        {
                            "function": "set_count",
                            "count": {
                              "min": 5,
                              "max": 7
                            }
                        }
                    ]
                }

条件

条件とは、プールを使用するか個々のエントリを選択する前に満たさなければならない要件のリストです。 すべての条件は、条件リスト内に保存されます。 各条件は一度に 1 つずつ実行されます。 リスト内に満たされない条件があると、同じリスト内の残りの条件は無視されます。

一致ツールの条件

match_tool は、ルートのドロップに使用されたツール (またはプレーヤーが使用している武器などのアイテム) が、指定された修飾子条件のセットに一致するかどうかをチェックする条件です。 使用される条件は、count、durability、enchantments、item です。

  • count: アイテムの数量
    • range_max: 最大値
    • range_min: 最小値
  • durability: アイテムの耐久度
    • range_max: 最大値
    • range_min: 最小値
  • enchantments: エンチャントのリスト
    • enchantment: エンチャント ID
    • levels: エンチャントのレベル
    • range_max: 最大値
    • range_min: 最小値
  • item: アイテム ID

例:


"conditions": [  
            {  
              "condition": "match_tool",  
              "enchantments": [  
                {  
                  "enchantment": "sharpness",  
                  "levels": {  
                    "range_max": 6  
                  }  
                }  
              ],  
              "item": "minecraft:diamond_sword",  
              "count": 1,  
              "durability": {  
                "range_min": 1  
              }  
            }  
          ]  

プールの条件

条件をプールに適用すると、定義した条件に基づいてプール全体を実行できます。

以下の例では、これを呼び出しているエンティティがスケルトンに殺された場合にのみ、ダイヤモンドか石炭の欠片を返します。

{
    "pools": [
        {
            "conditions": [
                {
                    "condition": "killed_by_entity",
                    "entity_type": "minecraft:skeleton"
                }
            ],
            "rolls": 1,
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:diamond",
                    "weight": 1
                },
                {
                    "type": "item",
                    "name": "minecraft:coal",
                    "weight": 1
                }
            ]
        }
    ]
}

エントリの条件

条件を抽選内の特定の entries に適用することもできます。 次の例では、これを呼び出したエンティティがプレーヤーに殺された場合にのみ 50% の確率でダイヤモンドを返します。 その他の場合は、石炭を返します。

{
    "pools": [
        {
            "rolls": 1,
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:diamond",
                    "weight": 1,
                    "conditions": [
                        {
                            "condition": "killed_by_player"
                        }
                    ]
                },
                {
                    "type": "item",
                    "name": "minecraft:coal",
                    "weight": 1
                }
            ]
        }
    ]
}

利用できるさまざまな関数条件について詳しくなると、プレーヤーのエクスペリエンスを詳細にカスタマイズできるようになります。 アイテムに名前を付けて伝承を加えたり、物資がたっぷり入った資源箱を落としたりできるほか、指示や情報が書かれた本を作成することもできます。

次のステップ

他にも選択したアイテムを変更できる関数がたくさんあります。 次のチュートリアルでは、それらの関数を紹介します。