はじめに
ここでは以下の環境で使っているアドオンパック内のオリジナルアイテムを例に挙げて、モブのドロップアイテムを定義するためのルートテーブル(Loot Table)の書き方をご紹介します。
基本的な書き方は以下のページでご紹介していますのでそちらをご覧ください。
ルートテーブルの記述はJSON形式なのでJSONの仕様を理解している前提で話を進めます。
定義ファイルの内容
アイテムドロップ用のルートテーブルはビヘイビアパック内のloot_tables/entities
というディレクトリ配下に格納されています。
ここでは本環境で使っている鶏のルートテーブルを見ていきます。
以下で定義している浮遊の羽(customize:floating_feather)は本環境用に追加したものです。
{
"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
である事から火に見舞われている状態には変わりはないので結果は同じようです。