【マインクラフト（統合版）】ルートテーブル（Loot Table）の書き方まとめ（ドロップアイテム編）

# はじめに

ここでは以下の環境で使っているアドオンパック内のオリジナルアイテムを例に挙げて、モブのドロップアイテムを定義するためのルートテーブル（Loot Table）の書き方をご紹介します。

https://qiita.com/glasses_seven/items/433ac9d9fcbdb72c6d18/

基本的な書き方は以下のページでご紹介していますのでそちらをご覧ください。

https://qiita.com/glasses_seven/items/f0e745f9715e6ac34560/

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


# 定義ファイルの内容

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

:::note info
以下で定義している浮遊の羽（customize:floating_feather）は本環境用に追加したものです。
:::

```json: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
                            }
                        }
                    ]
                }
            ]
        }
    ]
}
```


# 関数の種類

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

https://qiita.com/glasses_seven/items/f0e745f9715e6ac34560/

### looting_enchant

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

### furnace_smelt

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


# まとめ

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


羽アイテムの抽選では、羽と浮遊の羽の`weight`設定により４：１の割合で抽出されます。
<br />
<dl>
    <dt>－羽のドロップ数の内訳－</dt>
    <dd>
        <dl>
            <dt>通常のドロップ数（set_count）</dt>
            <dd>０（min）～２（max）個の範囲でドロップ</dd>
            <dt>ドロップ増加のエンチャント付き（looting_enchant）</dt>
            <dd>係数０（min）～１（max）の範囲で掛け合わされた結果になる</dd>
        </dl>
    </dd>
</dl>
<br />
<dl>
    <dt>－鶏肉のドロップ数の内訳－</dt>
    <dd>
        <dl>
            <dt>通常のドロップ数<dt>
            <dd>１個は必ずドロップ</dd>
            <dt>ドロップ増加のエンチャント付き（looting_enchant）<dt>
            <dd>係数０（min）～１（max）の範囲で掛け合わされた結果になる</dd>
        </dl>
    </dd>
</dl>
<br />

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

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