「Loot Table (ドロップ表)」の使い方 Part2 JSONの書き方と条件分岐
Loot Table解説のPart2です。今回はJSONの書き方を解説します。「運効果を持っていればこのアイテムが出やすい」「スコアボードの値に応じてアイテムを出す」「燃やして死んだらアイテムのNBTタグを変える」「アイテムにランダムで指定したエンチャントを付ける」など、様々な「function」と「condition(条件)」の使い方を解説しています。Part1とPart3も合わせてご覧ください。
[2020/2/22追記] 1.14仕様に更新しました。1.13以前ではこの方式は使えないので注意してください。
ここからは、オリジナルのLoot table(ドロップ表)を自作する手順とJSONファイルの書き方を解説します。サンプルをコピペして少しずつ弄っていけば誰でも思い通りのルートテーブルが作れるはずなので、是非諦めずに自作に挑戦してみてください。
(簡単にJSONを生成するツールもありますが、また別の機会に紹介するかもです)
LootTableを作成する場所とは。セーブデータ内のフォルダの構造を解説
- 「データパック」の作成手順/フォルダ構成/使い方 (Java版1.13)
https://asobinon.com/data-pack-perfect-guide/
まずは▲の記事を参考に、あなたのワールドの中に「データパック」を作ってください。
データパックを作る際に名前空間フォルダを作りますが、バニラのルートテーブルを上書きしたい場合は「minecraft」に、そうでない場合は英数字で好きな名前を付けてください。

そして名前空間フォルダの中に、loot_tablesという名前のフォルダを作成します。

loot_tablesフォルダの中にルートテーブルのJSONを入れていくわけですが、この中にさらにフォルダを作成して、JSONを整理することもできます。もちろんloot_tablesフォルダ直下にJSONを入れても構いません。
そこに新規テキストファイルを作成して、小文字の英数字とアンダーバーで名前を付け、末尾に.jsonを付けてください。
jsonの編集にはメモ帳ではなく高機能なテキストエディタを使おう

作成したJSONファイルをいよいよ編集していくのですが、ここで注意点を1つ。Windows付属の「メモ帳」はおすすめしません。こういう文書ファイルでは一文字のミスも許されませんから、自動整形だとか構文チェックをしてくれる多機能なエディタでjsonファイルを開くことをお勧めします。
ちなみに私は「Sublime Text 3」にMaterialってテーマを適用して使ってます。
ルートテーブルの基本の書き方。アイテムのスロット数と出現確率を設定するには
まずは以下のサンプルをコピペしてjsonに貼り付けてみましょう。
{ "pools": [ { "rolls": 3, "bonus_rolls":2, "entries": [ { "type": "item", "name": "minecraft:stone", "weight": 2 }, { "type": "item", "name": "minecraft:diamond", "weight": 1 } ] } ] }
基本的な書き方が分かっていただけたかと思います。「pools」の中に「entries」があり、その中にアイテムを書いていくんです。
- "pools": [] - 四角カッコの中にアイテムのパターンを書きます。
- "rolls": 数値 - 出現する項目の数を設定します。アイテム自体の数量ではなく、例えばチェストなら占有するスロットの数です。
- "bonus_rolls": 数値 - バージョン1.9で追加された「運(luck)」効果を持っていた際に追加で出てくるアイテムの数です。luck効果は/effect @p minecraft:luck 100 0 trueで自分に付与できます。
- "entries": [] - 四角カッコの中にアイテムなどの項目を書きます。
- "type": "タイプ" - アイテムの場合は"item", 他のルートテーブルを呼び出す際は"loot_table", 何もない場合は"empty"と書きます。
- "name": "何か" - typeをitemにした場合はアイテムID、loot_tableにした場合はminecraft:chests/nether_bridgeのようにloot tableを指定します。
- "weight": 数値 - そのアイテムの出やすさです。weightが多いほど出やすく、少ないほどレアになります。

"roll": 数値でアイテムの量(というよりスロットの数)を指定するのですが、いつも同じ数のアイテムが出てくるってつまらないですよね。出てくるアイテムの量をランダムにするにはどうすれば良いのでしょうか。
{
"pools": [
{
"rolls": {
"min": 1,
"max": 5
},
"bonus_rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:stone",
"weight": 2
},
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1
}
]
}
]
}
違いがお分かり頂けましたか? そう、「"rolls"」の中にさらにカッコが増えてますね。その中に「"min"」「"max"」の値を書くことで、出てくるアイテムの最小の量と最大の量を設定できるんです。「"bonus_rolls"」の数値も同じように最小値と最大値を設定できます。
バージョン1.9では「luck」という新効果が追加されたことはご存知ですよね。この運効果が付いている間だけ、特定のアイテムが出てくる確率を上げる(=特定のアイテムの量を増やす)にはどうすれば良いのでしょうか。
{
"pools": [
{
"rolls": {
"min": 1,
"max": 5
},
"bonus_rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:stone",
"weight": 2
},
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1,
"quality": 5
}
]
}
]
}
"quality": 数値という項目をダイヤモンドに設定しています。すると以下のようにアイテムの出やすさが増えます。
- "quality"を設定した際のluck効果のレベルに応じたアイテムの出やすさの変化の式
- アイテムの出やすさ: "weight"の値 + ("quality"の値 × luck効果のレベル)
例えば"weight"が3、"quality"が5、プレイヤーの「運」がレベル2だった場合は「3+(5*2) = 13」となり、最終的なアイテムの出やすさは「13」となります。プレイヤーの運レベルが高ければ、"quality"をちょっと変えただけで大きく出やすさが変わるんです。
1ページ目でも述べましたが、このルートテーブルをチェストなどに設定した場合は「初めて開けて中身を見た時」にluck効果を持っていればアイテムが増えます。設置/設定時の効果は中身の決定に影響しません。
アイテムのまとまり、「pool」とは
{ "pools": [ { "rolls": 11, "entries": [ { "type": "item", "name": "minecraft:stone", "weight": 10 }, { "type": "item", "name": "minecraft:diamond", "weight": 1 } ] }, { "rolls": 3, "entries": [ { "type": "item", "name": "minecraft:stick", "weight": 2 }, { "type": "item", "name": "minecraft:paper", "weight": 1 } ] } ] }
▲このルートテーブルでは、"pool": []の中に複数のまとまり(pool)がありますよね。こういう風に複数のpoolに分けて書くことで、アイテムの出やすさ(weightとquality)の比較をバラバラに行えるんです。

上記ルートテーブルでは、「焼石:ダイヤ=10:1」「棒:紙=2:1」という2つの「pool」で別々に出やすさの比較が行われます。上手に「pool」を分けて、アイテムの出やすさを思い通りに操りましょう。
基本的な「functions」の使い方

アイテムを出現させることはできたものの、アイテムはすっぴんのまま。エンチャント効果を付けたり、NBTタグを使って名前や説明文を付けたり、スタック数を設定したりするにはどうすれば良いのでしょうか。
アイテムにランダムまたは指定したエンチャント効果を指定した確率で付与するには
{
"pools": [
{
"rolls": {
"min": 1,
"max": 5
},
"bonus_rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:stone",
"weight": 2
},
{
"type": "item",
"name": "minecraft:diamond_chestplate",
"weight": 1,
"quality": 5,
"functions": [
{
"function": "minecraft:enchant_randomly",
"enchantments": [
"minecraft:protection",
"minecraft:fire_protection",
"minecraft:unbreaking"
]
}
]
}
]
}
]
}
ここで新しく「functions」が出てきました。この「functions」内に色々書けば各種設定ができるわけです。上記ルートテーブルでは"function": "minecraft:enchant_randomly"と書くことで「enchant_randomly(ランダムにエンチャントする)」機能を設定しています。その下に"enchantments": ["エンチャントID","エンチャントID"]と書けば付与されるエンチャントの種類を指定できます。上記の場合は耐性、火炎耐性、耐久力エンチャントの内1つだけが付与されます。
{
"pools": [
{
"rolls": {
"min": 1,
"max": 5
},
"bonus_rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:stone",
"weight": 2
},
{
"type": "item",
"name": "minecraft:diamond_chestplate",
"weight": 1,
"quality": 5,
"functions": [
{
"function": "minecraft:enchant_randomly"
},
{
"function": "minecraft:enchant_randomly"
},
{
"function": "minecraft:enchant_randomly"
}
]
}
]
}
]
}
▲"enchantments"を指定しない"minecraft:enchant_randomly"を書けば、そのアイテムに適合するエンチャントがそれぞれ1つだけ付与されます。上記のように書けば適合するエンチャントが3つ付くわけです。
{ "pools": [ { "rolls": { "min": 1, "max": 5 }, "bonus_rolls": { "min": 1, "max": 3 }, "entries": [ { "type": "item", "name": "minecraft:diamond_chestplate", "weight": 1, "quality": 5, "functions": [ { "function": "minecraft:enchant_with_levels", "levels": 30 } ] }, { "type": "item", "name": "minecraft:diamond_leggings", "weight": 1, "quality": 5, "functions": [ { "function": "minecraft:enchant_with_levels", "levels": { "min": 10, "max": 30 }, "treasure": true } ] } ] } ] }
▲今度は"minecraft:enchant_with_levels"というfunctionを使ってみましょう。"levels"で指定したレベルに応じたエンチャント効果が付与されます。最小レベルと最大レベルを指定することも可能です。また、"treasure": trueと書けば「Mending(修繕)(修繕)」や「Frost Walker(氷上歩行)」などのトレジャーエンチャント(エンチャント台では付けられない効果)も出てくるようになります。
アイテムの数(スタック内の量)を指定するには
{ "pools": [ { "rolls": { "min": 1, "max": 5 }, "bonus_rolls": { "min": 1, "max": 3 }, "entries": [ { "type": "item", "name": "minecraft:diamond", "weight": 1, "functions": [ { "function": "minecraft:set_count", "count": 5 } ] }, { "type": "item", "name": "minecraft:gold_ingot", "weight": 2, "quality": 5, "functions": [ { "function": "minecraft:set_count", "count": { "min": 1, "max": 5 } } ] } ] } ] }
"minecaft:set_count"を使えば、"count"でアイテムの数を指定できます(スタックされた数)。これも最小値と最大値を指定可能。
一つの項目に何個も書いてしまった場合は、最後に書いてある数値が適用されます。
アイテムのデータ値を指定するには
{ "pools": [ { "rolls": { "min": 1, "max": 5 }, "bonus_rolls": { "min": 1, "max": 3 }, "entries": [ { "type": "item", "name": "minecraft:wool", "weight": 2, "quality": 5, "functions": [ { "function": "minecraft:set_data", "data": 5 } ] }, { "type": "item", "name": "minecraft:wool", "weight": 2, "quality": 5, "functions": [ { "function": "minecraft:set_data", "data": { "min": 6, "max": 10 } } ] } ] } ] }
羊毛など、同じIDでも色々な種類があるアイテムは「データ値」で種類を指定しますね。ルートテーブルでは、"minecraft:set_data"というfunctionでデータ値を指定します。"data"の数値にはもちろん最小値と最大値を指定できます。
一つの項目に何個も書いてしまった場合は、最後に書いてある数値が適用されます。
※1.13ではデータ値が廃止されるため、このfunctionは使えません
アイテムのダメージ値を指定するには
{ "pools": [ { "rolls": { "min": 1, "max": 5 }, "bonus_rolls": { "min": 1, "max": 3 }, "entries": [ { "type": "item", "name": "minecraft:diamond_shovel", "weight": 2, "quality": 5, ...
スポンサーリンク
---省略されました。オリジナルサイトでご覧下さい。---
続きはこちら
関連記事
-
-
[Minecraft] 統合版のフィードバックで改善されたこと・改善されること
Minecraft公式サイトに、「あなたのベータ版へのフィードバックがどのようにBetter Together Updateの開発に影響したか」をまとめた記事が投稿されました。座標の表示がチート扱いされている理由や、従来のゲーム機版と統合版の回路の挙動の違いなど、議論を呼びそうなテーマが含まれています。
-
-
リアルイベント「Minecraft Festival」が来年に開催延期、アプデ生放送は継続
日本語で開催告知がなかったため、あまり多くの人に知られないままの中止となった。
Minecraftのリアルイベント「Minecraft Festival」は当初、今年の9月末にフロリダ州オーランドでの開催が予定されていた。しかし昨今の新型コロナウイルスの流行により準備に支障が生じていることから、開催が「2021年秋」に延期された。ただ、アップデート内容などを発表する「Minecon Live」改め「Minecraft Live」は、9月に放送が予定されている。
-
-
[Minecraft] New3DS版に「クールな」ものを含むアップデートが来るぞ!
New3DS版プレイヤーの皆さん! ニュースですよ! もうすぐアップデートがやってきて、しかも「クールな」ものが含まれているそうなんです。
-
-
[Minecraft] MINECONの投票で砂漠が選ばれたら、ヤシの木とミーアキャットを追加するってよ
29日に開催されるマイクラの公式イベント「MINECON Earth 2018」。放送中に「タイガ・サバンナ・砂漠のどれに新要素を追加するか」の投票が行われるのですが、まず「砂漠」が選ばれた場合に追加される新要素が発表されました。
[Minecraft] MINECONの投票で砂漠が選ばれたら、ヤシの木とミーアキャットを追加するってよ by ナポアンのマイクラ
-
-
[Minecraft 1.9+] 右クリックで見ている方向にファイアボール爆弾を飛ばすバズーカの作り方 (マルチプレイ対応)
バズーカを持ち、オフハンドにファイアチャージをセットして右クリック! 視点の方向へファイアボールを発射! そんな「コマンドで作れたらいいな」の当ブログ要望No.1の仕掛けがついに完成しました。「視点をryやrxで判定して飛ばすんでしょ?」いいえ、この装置はたった6つのコマンドを常時動かせば動作します。マルチプレイでも使えるので、PvPの新しい武器として是非お使いください。
[Minecraft 1.9+] 右クリックで見ている方向にファイアボール爆弾を飛ばすバズーカの作り方 (マルチプレイ対応) by ナポアンのマイクラ
-
-
マイクラBEの「1.14」はハチのアプデに。Aubrey氏とCorner氏が確認
MineconLive2019では詳しく語られなかったBE(統合版)のアップデート予定について、開発者のコメントにより詳細が分かってきた。例えば新Mobの「ハチ」は、現在ベータ版が配信中の「1.13」ではなく、「1.14」で追加される。
-
-
【MOD紹介】家に帰ると、松明の明かりが消えていた… 新感覚の縛りプレイを「RealisticTorches」[Minecraft]
マイクラでのサバイバル生活で、地味に一番役立つアイテム「松明(たいまつ)」。昔から、暗い所に明かりを灯し、暖かい拠点づくりに、敵に侵略されない領土づくりにと、クラフターなら誰しも使っている必需品です。でもあれ、 冷静に考えたらおかしくないですか? なんで棒につ…
-
-
[MinecraftJE] (1.13) しばらく寝てないと何か起こる仕掛けの作り方
JE1.13のSnapShot18w07aで、気になる新要素が追加されました。プレイヤーが最後に起きてからの時間を計測する、time_since_sleepという”統計”です。これをコマンドで利用して作れる仕掛けを簡単にご紹介します。
-
-
[Minecraft] 配布ワールド作成に! 指定範囲内でダッシュを禁止する方法 – マルチプレイや1.8、1.9両方対応
アスレチック系の配布ワールド作成者の皆さん、ワールドに新しい"縛り"を作ってみませんか? 今回は「ダッシュ」を禁止する – つまりプレイヤーが走れなくなるコマンドを解説します。指定した範囲のプレイヤーのみに縛りをかけることも可能です。例えばダッシュできる部屋とダ…