【ドロップアイテム】

はじめに

ここでは本環境のアドオンパック内のオリジナルアイテムを例に挙げて、モブのドロップアイテムを定義するためのルートテーブル(Loot Table)の書き方をご紹介します。
基本的な書き方は▶基本の書き方の方でご紹介していますのでそちらをご覧ください。

※ルートテーブルの記述はJSON形式なのでJSONの仕様を理解している前提で話を進めます。

定義ファイルの内容

アイテムドロップ用のルートテーブルはビヘイビアパック内のloot_tables/entitiesというディレクトリ配下に格納されています。
ここでは本環境で使っている鶏のルートテーブルを見ていきます。

※以下の黄色の部分、浮遊の羽(customize:floating_feather)は本環境用に追加したものです。
loot_tables/entities/chicken.json
{
    "pools": [
        {
            "rolls": 1,
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:feather",
                    "weight": 4,
                    "functions": [
                        {
                            "function": "set_count",
                            "count": {
                                "min": 0,
                                "max": 2
                            }
                        },
                        {
                            "function": "looting_enchant",
                            "count": {
                                "min": 0,
                                "max": 1
                            }
                        }
                    ]
                },

                {
                    "type": "item",
                    "name": "customize:floating_feather",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "set_count",
                            "count": {
                                "min": 1,
                                "max": 1
                            }
                        },
                        {
                            "function": "set_name",
                            "name": "浮遊の羽"
                        },
                        {
                            "function": "set_lore",
                            "lore": [
                                "浮力を付与する効果がある"
                            ]
                        }
                    ]
                }

            ]
        },
        {
            "rolls": 1,
            "entries": [
                {
                    "type": "item",
                    "name": "minecraft:chicken",
                    "weight": 1,
                    "functions": [
                        {
                            "function": "furnace_smelt",
                            "conditions": [
                                {
                                    "condition": "entity_properties",
                                    "entity": "this",
                                    "properties": {
                                        "on_fire": true
                                    }
                                }
                            ]
                        },
                        {
                            "function": "looting_enchant",
                            "count": {
                                "min": 0,
                                "max": 1
                            }
                        }
                    ]
                }
            ]
        }
    ]
}
                    


関数の種類

ここではアイテムドロップ専用の関数をピックアップしています。
それ以外の関数については▶基本の書き方でご紹介していますのでそちらをご覧ください。

looting_enchant

アイテムボーナスのエンチャントを備えたアイテムによってエンティティが倒されたときに返されるアイテムの数を変更できます。
「ドロップ増加」のエンチャントがこれに当たります。
具体的な計算式はわかりませんが、数字を増やせば増やすほどエンチャントのレベルと掛け合わされてドロップ数が増えるようです。

furnace_smelt

返されるアイテムに精錬レシピがあり、エンティティが火 (火属性、火打ち石と打ち金、溶岩など) を使った要因で倒された場合は、そのアイテムを精錬したものがドロップされます。

まとめ

鶏のルートテーブルでは、大きく分けて羽(minecraft:feather)と鶏肉(minecraft:chicken)のアイテムに分かれて登録されている事がわかると思います。
rollがそれぞれ1なので、羽と鶏肉のアイテムそれぞれで1回ずつ抽選が行われます。

羽アイテムの抽選では、羽と浮遊の羽のweight設定により4:1の割合で抽出されます。

-羽のドロップ数の内訳-
通常のドロップ数(set_count)
0(min)~2(max)個の範囲でドロップ
ドロップ増加のエンチャント付き(looting_enchant)
係数0(min)~1(max)の範囲で掛け合わされた結果になる
-鶏肉のドロップ数の内訳-
通常のドロップ数
1個は必ずドロップ
ドロップ増加のエンチャント付き(looting_enchant)
係数0(min)~1(max)の範囲で掛け合わされた結果になる

また、火属性のエンチャントが付与されたアイテムで倒されると焼き鳥をドロップします。

バニラのデータにはfurnace_smelt関数と伴にconditionsの項目が定義されていますがon_fireプロパティがtrueである事から火に見舞われている状態には変わりはないので結果は同じようです。