ルートおよびトレード テーブル関数

ルート テーブルとトレード テーブルは同じ関数セットを共有しています。 大部分は両方で機能しますが、特定の種類内でしか機能しないものもいくつかあります。 一般にルート テーブルとトレード テーブルには制限があります。たとえば、ルート テーブルまたはトレード テーブルを通じて can_place_oncan_destroy をアイテムに追加することはできません。 利用できるさまざまな関数とその使用方法の例については、以下をご確認ください。

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

  • ルート テーブルおよびトレード テーブルのさまざまな関数と、それらを利用してアイテムを変更する方法。

要件

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

エンチャント

以下のさまざまなエンチャント関数では、固有のエンチャント パラメーターを設定できます。

enchant_book_for_trading (トレード テーブルのみ)

この関数は、村人が販売しているアイテムをエンチャントするためのアルゴリズムを使用して本をエンチャントします。 base_costbase_random_costper_level_random_costper_level_cost という 4 つのパラメーターがあります。

                {
                    "item": "minecraft:book",
                    "quantity": 1,
                    "functions": [
                        {
                            "function": "enchant_book_for_trading",
                            "base_cost": 2,
                            "base_random_cost": 5,
                            "per_level_random_cost": 10,
                            "per_level_cost": 3
                        }
                    ]
                }

現時点では、これらのパラメーターを定義してもエンチャントには影響しません。 現在は上記のデフォルト値がハードコーディングされています。 将来的に、これらの値を細かく調整することで、この関数によって得られるエンチャントとエンチャント レベルの範囲を絞り込むことができるようになる予定です。

enchant_random_gear

バニラのモブの装備をエンチャントするのに使用されるものと同じアルゴリズムでアイテムをエンチャントします。 chance 修飾子を使用してアルゴリズムを操作します。 chance 修飾子が 1.0 でも装備が 100% の確率でエンチャントされるわけではないことに注意してください。 確率は難易度に応じて変更されます。 難易度がピースフルおよびイージーの場合、確率は常に 0% になります。 難易度がハードの場合、確率は chance が 1.0 なら 100% ですが、難易度がノーマルの場合、そのおよそ 2/3 になります。

                {
                    "type": "item",
                    "name": "minecraft:chainmail_boots",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_random_gear",
                        "chance": 0.25
                      }
                    ]
                }

1.0 を上回る数値に chance を増やすと、難易度がノーマルの場合の確率の低下を無視できます。 たとえば、chance を 2.0 に設定すると、難易度がノーマルでもハードでも常にアイテムがエンチャントされることになります。

enchant_randomly

アイテムに対応したランダム エンチャントを生成します。 オプションとしてトレジャーのブーリアン値 boolean (true/false) がサポートされているので、トレジャーエンチャントのオン/オフを切り替えることができます。 トレジャー エンチャントはエンチャントテーブルを通じて取得できないエンチャントであり、氷渡り、修繕、魂の速度、束縛の呪い、消滅の呪いなどがあります。

                {
                    "type": "item",
                    "name": "minecraft:leather_helmet",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_randomly",
                        "treasure": true
                      }
                    ]
                }

enchant_with_levels

levels パラメーターによって定義した最小および最大 XP レベルを使用し、エンチャントテーブルを通じてエンチャントされたかのようにエンチャントを適用します。 ブーリアン値の treasure (true/false) によって財宝限定のエンチャントを使用できます。 トレジャー エンチャントはエンチャントテーブルを通じて取得できないエンチャントであり、氷渡り、修繕、魂の速度、束縛の呪い、消滅の呪いなどがあります。

                {
                    "type": "item",
                    "name": "minecraft:diamond_sword",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "enchant_with_levels",
                        "treasure": true,
                        "levels": {
                          "min": 20,
                          "max": 39
                        }
                      }
                    ]
                }

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
                             }
                          ]
                       }
                    ]
                }

アイテムの変更

以下の一連の関数では、返されるアイテムの数の設定、そのデータ値の設定、アイテムの名前と伝承の設定など、さまざまな方法で結果を変更できます。

looting_enchant (ルート テーブルのみ)

この関数では、アイテムボーナスのエンチャントを備えたアイテムによってエンティティが殺されたときに返されるアイテムの数を変更できます。 そのため、この関数はルート テーブルがエンティティの死によって呼び出された場合にのみ機能します。

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "looting_enchant",
                            "count": {
                                "min": 0,
                                "max": 1
                            }
                        }
                    ]
                }

random_block_state

生成されるアイテムのブロックの状態をランダム化できます。 たとえば、次のコード例では石 (0)、花崗岩 (1)、磨かれた花崗岩 (2)、閃緑岩 (3)、磨かれた閃緑岩 (4)、または安山岩 (5) を落とすことができます。

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "random_block_state",
                          "block_state": "stone_type",
                          "values": {
                            "min": 0,
                            "max": 5
                          }
                        }
                      ]
                }

random_aux_value

random_block_state と同様に、アイテムの補助値をランダムに選択できます。 次の例では、ランダムな色の染料が生成されます。

                {
                    "type": "item",
                    "name": "minecraft:dye",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "random_aux_value",
                          "values": {
                            "min": 0,
                            "max": 15
                          }
                        }
                    ]
                }

set_actor_id

これはスポーン エッグでのみ機能する関数で、そのスポーン エッグのエンティティ ID を設定するために使用します。

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_actor_id",
                            "id": "compass:cool_entity"
                        }
                    ]
                }

id を省略すると、そのルート テーブルに関連付けられているエンティティのエンティティ ID を継承することもできます (ウサギにウサギのスポーン エッグを落とさせるなど)。

                {
                    "type": "item",
                    "name": "minecraft:spawn_egg",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_actor_id"
                        }
                    ]
                }

チェストのルート テーブルで set_actor_id を使用する場合に id 値を省略すると、チェストを開けたプレイヤーのスポーン エッグが生成されることに注意してください。 プレイヤーのスポーン エッグは立っているだけの "プレイヤー" をスポーンさせて Molang エラーを発生させることになります (プレイヤーのビヘイビアー ファイルとコントローラーを使用しようとするため)。 set_actor_id から継承した ID を使用するルート テーブルが含まれるチェストを壊すと、何もスポーンさせないデフォルトのスポーン エッグを落とします。

set_banner_details

この関数は旗にのみ利用でき、現在は type1 の旗のみがサポートされています。 type1 の旗は、邪悪な村人の旗となります。

                {
                    "type": "item",
                    "name": "minecraft:banner",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_banner_details",
                            "type": 1
                        }
                    ]
                }

set_book_contents

この関数では、本の内容を設定できます。

                {
                    "type": "item",
                    "name": "minecraft:written_book",
                    "functions": [
                        {
                            "function": "set_book_contents",
                            "author": "Steve",
                            "title": "Creator Woes",
                            "pages": [
                                "Once upon a time there were some marketplace partners that had to edit items using NBT. And it made them sad.",
                                "Then the Bedrock team added the ability to customize items from JSON and everyone rejoiced."
                            ]
                        }
                    ]
                }

rawtext を使用して本の内容をローカライズすることもできます。 rawtext を使用する際は、"\ などの特殊文字を常にエスケープする (\) のを忘れないでください。

                {
                    "type": "item",
                    "name": "minecraft:written_book",
                    "functions": [
                        {
                            "function": "set_book_contents",
                            "author": "Steve",
                            "title": "Creator Woes",
                            "pages": [
                                "{\"rawtext\":[ {\"translate\":\"custom.book.page.1\"}]}",
                                "{\"rawtext\":[ {\"translate\":\"custom.book.page.2\"}]}"
                            ]
                        }
                    ]
                }

rawtext を本の内容 (pages) に対して使用できるタイミングは、その記述時に限られることに注意してください。rawtextauthor タグおよび title タグでは機能しません

set_count

count 値を設定することによって返されるアイテムの数を設定します。 次の例のような正確な数値にすることもできます。

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "weight": 1,
                    "functions": [
                        {
                          "function": "set_count",
                          "count": 5
                        }
                    ]
                }

また、次のように最小/最大の範囲内にすることもできます。

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

set_damage

damage 値を設定することにより、耐久度のあるアイテムの残りの耐久度の割合を設定します。 1.0 の場合は残りの耐久度が 100% (ダメージを受けていない)、0.0 の場合は残りの耐久度がゼロです。

アイテムの残りの耐久度を 50% に設定する次の例のように、正確な耐久度を設定することも、

                {
                    "type": "item",
                    "name": "minecraft:iron_leggings",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_damage",
                        "damage": 0.5
                      }
                    ]
                }

ランダムに選択されるよう最小/最大値を定義することもできます。 次の例では、残りの耐久度を 30% ~ 90% の範囲内のどこかに設定します。

                {
                    "type": "item",
                    "name": "minecraft:iron_leggings",
                    "weight": 1,
                    "functions": [
                      {
                        "function": "set_damage",
                        "damage": {
                          "min": 0.3,
                          "max": 0.9
                        }
                      }
                    ]
                }

set_data

ブロックやアイテムのデータ値に正確な ID を設定します。次の例では、磨かれた閃緑岩のブロックが生成されます。

                {
                    "type": "item",
                    "name": "minecraft:stone",
                    "functions": [
                        {
                            "function": "set_data",
                            "data": 4
                        }
                    ]
                }

set_data_from_color_index

関連付けられているエンティティの色のインデックスから生成されるアイテムのデータ値を継承します。 ゲーム内の例としては、死んだときにピンクのウールを落とすピンクの羊が挙げられます。 関連付けられているエンティティに色のインデックスが設定されていない場合 (またはチェストのルート テーブル内で使用されている場合)、データ値は常に 0 になります。

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

set_lore

この関数では、アイテムの伝承を設定できます。 伝承オブジェクト内の各行が、テキストの 1 行を表しています。 現在 rawtext はサポートされていません。

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_lore",
                            "lore": [
                                "Big Stick has been handed down",
                                "for generations from King to Prince",
                                "until it went missing four score ago"
                            ]
                       }
                    ]
                 }

set_name

この関数では、アイテムの名前を設定できます。 現在 rawtext はサポートされていません。

                {
                    "type": "item",
                    "name": "minecraft:stick",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_name",
                            "name": "Big Stick"
                        }
                    ]
                 }

その他

以下は、他のどこにも属さない関数です。

fill_container

この関数では、チェストのルート テーブルを定義できます。 アイテムが生成され、それをプレイヤーが配置すると、参照先のルート テーブル内に定義されている中身で満たされます。

チェストのルート テーブルは、開けたときや壊したときに生成されます。 シュレーディンガーの箱のようなものと考えてください。 チェストの中身は、中をのぞいてみるまでわかりません。

                  {
                      "type": "item",
                      "name": "minecraft:chest",
                      "functions": [
                          {
                              "function": "fill_container",
                              "loot_table": "loot_tables/chests/simple_dungeon.json"
                          }
                      ]
                  }

fill_container を使用する場合は、常に set_name を使用してチェストに名前を付けることをお勧めします。 そうしないと、生成されるチェストがプレイヤーの持ち物の中にある通常の空のチェストと見分けられなくなります。

exploration_map

通常のマップを隠された財宝の場所が示されている宝の地図に変換します。 destination 値で得られる宝の地図の種類を定義します。

                  {
                      "type": "item",
                      "name": "minecraft:map",
                      "weight": 1,
                      "functions": [
                          {
                              "function": "exploration_map",
                              "destination": "buriedtreasure"
                          }
                      ]
                  }

現在は以下の目的地から選ぶことができます。

目的地
buriedtreasure
endcity
fortress
mansion
mineshaft
monument
pillageroutpost
ruins
shipwreck
stronghold
temple
village

furnace_smelt (ルート テーブルのみ)

返されるアイテムに精錬レシピがあり、火 (火属性、火打ち石と打ち金、溶岩など) で殺されたエンティティによってルート テーブルがトリガーされた場合は、そのアイテムを精錬したものが生成されます。 そのような要件があるため、この関数は村人との取引やチェストに対しては機能しません。 この関数は、minecraft:loot 動作と併用した場合にのみ機能します。

次の例では、エンティティが火で殺された場合は石ブロック、そうでない場合は丸石を落とします。

                {
                    "type": "item",
                    "name": "minecraft:cobblestone",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "furnace_smelt"
                        }
                    ]
                }