コマンド最低1つ! アイテムがランダムに出る「ガチャ」の簡単な作り方。LootTableを使って設定【Minecraft】
ランダムに色々なアイテムが出てくる「ガチャ(ガシャ)」装置。例えば「運が良ければダイヤモンドが出てくる」「運が悪ければゴミアイテムが出てくる」など、マルチプレイのサーバーや配布ワールドに設置してみたいですよね。今回はバージョン1.9の新機能「Loot Table」を使って、コマンド最少1つだけ(回路無し)でのガチャ装置の作り方を解説します。この方法なら、json文書を編集するだけで高度な条件/確率の設定ができるんです。世界に一つだけのガチャを作ってみませんか。
記事公開当初は「コマンドは最低2つ」としていましたが、なんと1コマンドだけで実現できたのでコマンド解説の部分を書き直しました。棒レンジ氏、ありがとうございました!
目次
マイクラで「ガチャ」ってどんな感じ? ダイヤ等を投入して回せます
どこかで見たことあるようなないようなこのレッドカーペットの通路。奥にはドラゴンが構えています。御存知の通り某ソシャゲのガチャ画面を再現したわけですが、果たしてマイクラではどのようにガチャを回すのでしょうか。
事前に特別な「オーブ」というアイテムが用意されていて、それを5個ホッパーに投入するとポイッとアイテムが出てきます。“回す”と言うより”出す”ガチャですね。
ただアイテムを投入して引くだけでなく、経験値を消費して引く、だとか様々な方法でガチャを回せます。単純にボタンを押すと回せる、でもいいですし、配布ワールドで「ランダムに○○する」イベントを発動するきっかけの装置にもできます。
もちろんただアイテムがポンポン出ているだけではなく、各アイテムごとに出やすさを設定できます。「運」効果を持っていれば特定のアイテムを出やすくすることも可能です。
もう少し噛み砕いていいますと、なんと▲1コマンドだけでガチャが作れちゃうんです。「アイテムを複数出したりできるの?」と心配な方もいらっしゃるかもしれませんが、マイクラ1.9からはたった1つのコマンドで大量の種類のアイテムを自由自在な確率で出すことが可能なんです。そう、Loot Tableがあればね。
いつもの雑パワポ図解にするとこんな感じ。ガチャで出てくるアイテムを、あらかじめLoot TableのJSONファイルに書いておいて、出やすさやエンチャ等を設定しておきます。それをマイクラ内でガチャを引く時に、Loot Tableを設定した、即死ぬ透明なエンダーマイトを召喚すればドロップ表に設定してあるアイテムが出てくるわけですよ。これならコマンドは1つだけで済みます。
「エンダーマイトって敵だからピースフルじゃ使えないでしょ」とお思いの方、私も最初はそう思っていたのですがどちらにせよ即死するのでこのエンダーマイトはピースフルでも使えます。
アイテムの種類や量、出てくる確率や条件を決める「Loot Table」を用意しよう
ガチャで出てくるアイテムの出やすさや量、エンチャントやNBTタグ等を定義するために、これから「Loot Table」のファイルを作成していきます。JSON形式なので書き方はとっても単純。
こちらがLoot Tableを実際に書いてみた例です。“pools”(=まとまり)に出てくるアイテムの合計量を指定して、“entries”(=項目)にアイテムを書いていきます。それぞれに“function”(=機能)を設定してエンチャント効果やNBTタグなどを付けていきます。さらにpool/entry(アイテム)/functionに多種多様な”condition”(=条件)を設定できます。どんどん書き足すことで、いくらでも複雑なガチャが作れちゃうんです。
「こんなの手書きできねえよ!」と思った方も安心して下さい、こちらでJSONを書かずともLootTableが作れるツールを紹介しています。
Loot Table(ドロップ表)のファイルを書く準備
まずは使っているワールドのフォルダーを開き、dataフォルダーの中にloot_tablesフォルダーを作成します。
loot_tablesフォルダーの中に、さらに好きな名前のフォルダーを作成します。例えば配布ワールドの名前だとか、オリジナルの名前を付けると良いでしょう。このフォルダーの名前が、LootTableを指定する際の“Foo:bar/baz”のFoo部分になります。バニラのLoot tableを上書きする場合はminecraftという名前にします。この記事では、mcthnkという名前にした前提で解説を進めます。
作ったフォルダーの中に、好きな名前のjsonファイルを作成します。Windowsの場合は右クリック→新規作成→テキスト(ryでtxtファイルを作った後、拡張子をjsonに変更しましょう。
▲ダブルクオーテーションを打ち忘れるなど、間違いがあると分かりやすく視覚的にお知らせしてくれる。
JSONファイルを編集するソフトについてですが、Windows付属のメモ帳ははっきり言ってダメです。SublimeTextやAtomなどの、構文チェックや自動補完機能付きの高機能なテキストエディタを使うことをおすすめします。各テキス
トエディタの導入方法については割愛させていただきます。
ガチャアイテム一覧のLootTableの書き方を解説
作成したJSONファイルを開いて中身を書いていきます。突然ですが完成品の例。
{ "pools": [ { "rolls": 1, "entries": [ { "type": "item", "name": "minecraft:diamond_block", "weight": 1, "quality": 5 }, { "type": "item", "name": "minecraft:diamond", "weight": 9, "quality": 2 }, { "type": "item", "name": "minecraft:stone", "weight": 10, "quality": 0 } ] } ] }
初めての方は、これをコピーしてテキストエディタに貼り付けてください。こちらの記事を既に読まれた方なら構造が丸わかりだと思いますが、読んでいない方のためにも要点を掻い摘んで解説いたします。
- “rolls”: 数値 – 出てくるアイテムの項目(entry)の数です。一般的なガチャの場合は1でいいでしょう。
- “entries”: – この中に項目を書いていきます。
- “type”: “種類” – ここでは単純にアイテムを指定するので”item”にします。
- “name”: “アイテムID” – アイテムIDを指定します。必ずminecraft:を付けましょう。
- “weight”: 数値 – そのアイテムの出やすさです。確率というよりは”出る比重”ですね。
- “quality”: 数値 – 運効果による出やすさの増減の大きさです。よく分からない場合は書かなくて構いません。
“weight”の値 + (“quality”の値 × luck効果のレベル)
詳しくはこちらで解説しています。
- “entries”: – この中に項目を書いていきます。
要するにentries:の中にアイテムを書いていくわけです。それぞれアイテムIDと出やすさを指定していくだけ。
- LootTableで使うJSON記法の基本的なルール
-
- 数値はそのまま、文字列は””で囲む!
- 複数項目があるときは[]で囲む!
- 最後の項目の後にコンマを付けるとエラーになる
{ "pools": [ { "rolls": 1, "entries": [ { "type": "item", "name": "minecraft:iron_ingot", "weight": 6, "functions": [ { "function": "minecraft:set_count", "count": { "min": 5, "max": 10 } } ] }, { "type": "item", "name": "minecraft:diamond", "weight": 1, "functions": [ { "function": "minecraft:set_count", "count": { "min": 1, "max": 3 } } ] }, { "type": "item", "name": "minecraft:wool", "weight": 3, "functions": [ { "function": "minecraft:set_data", "data": 10 } ] } ] } ] }
▲(新機能!)マウスオーバーすると説明が表示される箇所を用意しています
Loot Tableはコマンドとは違った方法でアイテムの数やデータ値(羊毛などの種類を指定する数値)を指定します。“weight”等と並べて“functions”:[]と書き、中に”function”(機能)を書きます。
ここで登場した機能は全体のほんの一部に過ぎません。この記事では全然解説できてませんので、LootTableの書き方については▲の記事を是非お読みください。全ての機能、さらには”条件”等を片っ端から解説しています。(前も言った気がしますが多分このブログで最長の技術系記事です)
JSONを書くのが面倒な方は、ツールを使って簡単にLoot Tableを生成しよう
め゛ん゛どぐぜえ゛!!!
「これ使ってみ。」
- Loot Tableがクリックポチポチでとっても簡単に作れるサイト
http://minecraft.tools/en/loots.php
LootTableのJSONを書くのが面倒なあなたに朗報です。いとも簡単にLootTableが作成できてしまうサイトがあるんです。当ブログで度々登場しているサイト「Minecraft Tools」のLootTableコーナーです。
サイトにアクセスしたらまずLootTable自体の種類を選びましょう。「Kill a Mob or Entity (Mob Drops)」にします。
※このツールではLootTableを「チェスト用」「ドロップアイテム用」に分けて扱っていますが、実際LootTableは別け隔てなく使えるものです。このツールではこの選択によっていくつかのオプションが非表示になるのでご注意下さい。手書きなら好き放題全機能を使えます。
画面は単純明快なので説明するまでもないかもしれませんが、一応図で項目の場所を示しておきます。
「More Options」をクリックするとさらに設定項目が表示されます。それぞれの項目の効果についてはこちらの記事で詳しく解説していますので是非お読みください。特にエンチャント指定とNBTタグ欄はよく使います。
「GENERATE YOUR LOOTS TABLE」をクリックするとJSONが生成されます。自動生成ではないので使う度に押しましょう。そして下のClick here to downloadの「here」をクリックします。するとJSONファイルがダウンロードできます。
記事前半のこちらの解説を読んでLootTable専用フォルダーを作成して下さい。配置する準備が整ったら、ダウンロードしたJSONファイルをloot_tableフォルダー内の好きな場所に設置します。一緒に名前を分かりやすいものに変えておきましょう。
ガチャのコマンドと装置の作り方を解説
LootTableの作成お疲れ様でした。ここからはコマンドを解説していきます。
アイテムをホッパーに投入して回す方式の作り方
まずは「”オーブ”等のアイテムを投入して回すガチャ」の作り方を解説します。装置作成前に、以下の2つの場所を決めておきましょう。
- 事前に確認しておく座標
-
- ホッパーの座標 – 以下、座標Hとします
- アイテム排出場所の座標 – 以下、座標Oとします
ガチャを回すためのアイテムを事前に入手しておきましょう▼。コマンドの作成ならMCStackerが便利です
- ガチャを回す対価となるアイテムを入手するコマンド
/give @p diamond 64 0 {display:{Name:”オーブ”,Lore:[“ガチャに入れてね”,”5個で一回回せるよ”]},ench:[{id:34,lvl:5}],HideFlags:1}
▲目立たせるために適当なエンチャント効果を付けていますが、ひでフラグ:1にしてあるためツールチップには表示されません。
4つコマンドブロッ
クを同じ向きで並べます。
※マウスオーバーすると説明が出る箇所を用意しています。 | |
---|---|
「1」 | Repeat(リピート)Unconditional(無条件)Always Active(常時実行) |
/testforblock 座標Hのx y z minecraft:hopper 0 {Items:[{Slot:0b,id:minecraft:diamond,Damage:0s,Count:5b,tag:{display:{Name:”オーブ”,Lore:[“ガチャに入れてね”,”5個で一回回せるよ”]},ench:[{id:34,lvl:5}]}}]} ホッパーの一番左のスロットにオーブが5個入ったかどうかをtestforblocksコマンドで判定します。 |
|
「2」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/summon Endermite 座標Oのx y z {Tags:[“GachaDeath”],Silent:1,Lifetime:2400,DeathLootTable:”LootTableの場所と名前“,ActiveEffects:[{Id:14,Amplifier:0,Duration:100,ShowParticles:0b},{Id:20,Amplifier:127,Duration:20}]} 「1」が成功したら実行。座標Oに、LootTableを設定した、ライフタイム2400でウィザー効果も付けた即死エンダーマイトを召喚します。(ちなみにライフタイムを2400にするのは煙を消すためです) LootTableの場所と名前についてはこの図の通りです。例: DeathLootTable:”mcthnk:gacha/gacha1″ |
|
「3」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/blockdata 座標Hのx y z {Items:[{Slot:0b,id:minecraft:air}]} ホッパーの一番左のスロットを空にします。 |
|
「4」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/playsound minecraft:entity.player.levelup master @a 音源にしたい座標x y z ▲ガチャを回すと同時に効果音を鳴らします。 |
注意点として、ホッパーに必要以上に一気に入れても認識されませんのでご注意下さい。
経験値レベルを消費して回す方式の作り方
次は「レベルを消費してガチャを回す」装置の作り方を解説します。
※マウスオーバーすると説明が出る箇所を用意しています。 | |
---|---|
「a」 | Repeat(リピート)Unconditional(無条件)Always Active(常時実行) |
/testfor @p[l=9] 最寄りの人のレベルが9以下かどうか判定します。 |
|
「b」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/tell @p レベルが足りませんぜ! レベル9以下なら警告。 |
|
「c」 | Repeat(リピート)Unconditional(無条件)Always Active(常時実行) |
/testfor @p[lm=10] これはUnconditionalなので無条件に実行。今度はレベルが10以上かどうか判定します。 |
|
「d」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/xp -10L @p レベル10以上ならレベルを10マイナス。 |
|
「e」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/summon Endermite 排出場所のx y z {Tags:[“GachaDeath”],Silent:1,Lifetime:2400,DeathLootTable:”LootTableの場所と名前“,ActiveEffects:[{Id:14,Amplifier:0,Duration:100,ShowParticles:0b},{Id:20,Amplifier:127,Duration:20}]} 指定した座標にLootTableを設定した即死エンダーマイトを召喚します。 |
|
「f」 | Chain(チェーン)Conditional(条件付き)Always Active(常時実行) |
/playsound minecraft:entity.player.levelup master @a 音源にしたい座標x y z 効果音を鳴らします。< /td> |
Loot Tableさえ用意すれば、後はそれをドロップアイテムに設定した即死エンダーマイトを召喚するだけ。それが新時代のガチャ装置の作り方です。皆さんも自由にLootTableとガチャ装置周辺の回路を設計して、思い通りの”ガチャ”を作ってみてください。最後までお読みいただきありがとうございました。
40件のコメント
-
GW?なにそれ美味しいの?2016年5月2日記事投稿お疲れ様です! 二日間偶に訪れてはF5連打して待っていました!(DOS攻撃ではないです) 眠気眼を擦って早速製作させて頂きます!
-
おはようござません2016年5月2日Twitterとかプッシュ通知とか使えよww
-
たつやチャンネル2016年5月3日スコアボードの値を経験値に表示する方法を教えてほしいです。 3時間自力でやったんですができませんでした。 助けてください
-
雨降り暇人2016年5月4日質問です、この記事で紹介されたガチャ機構を前作のガチャ機構のように 低確率のアイテムが出てくると「レア!」や「激レア!」といった /titleが出るように改造したいのですが、何か方法はありますか?
-
匿名2016年5月4日出てきたアイテムにscoreboardの値を付与して、値が1の時だけtitleコマンドを実行させれば実現できます。 /scoreboard objectives add gachaTitle dummy でスコアボードを作成。 以下2つを常時実行します /scoreboard players add @e[type=Item] gachaTitle 1 {Item:{id:minecraft:アイテムID,Damage:データ値s,tag:{display:{Name:"アイテム名",Lore:[説明文]}}}} /execute @e[type=Item,score_gachaTitle_min=1,score_gachaTitle=1] ~ ~ ~ title @a title {"text":"激レア!","color":"yellow"}
-
ookiikuma2016年5月4日二進数使えばいけますよ
-
たつやチャンネル2016年5月5日やってみたんですが上手くいきませんでした(´;ω;`)
-
漆黒のイデア2016年5月6日hereを押してもダウンロード出来ません。
-
匿名2016年5月6日使っているブラウザを教えていただければ助かります。
-
漆黒のイデア2016年5月7日mac osです。
-
匿名2016年5月7日ブラウザ、つまりWebの閲覧に使っているソフトを教えて頂ければ助かります。例えばSafari、Chromeなどです
-
漆黒のイデア2016年5月7日すみませんSafariです。
-
豚さんを守る会2016年5月8日それで理解できる方はかなり少ないかと(´・ω・`)
-
豚さんを守る会2016年5月8日なるほどDOSですね。
-
ookiikuma2016年5月8日スコアボードの値を別のスコアボードに代入して代入した値が2のべき乗(2^n)以上あればxpコマンドで経験値を増やして代入した値からそのべき乗の数を引いてそれを大きい方からやれば行けます 文字だと非常に分かりにくいですが・・・
-
たつやチャンネル2016年5月8日ああ、なるほど!ためしてみます!
-
たつやチャンネル2016年5月8日小さい方からやって混乱しましたw
-
漆黒のイデア2016年5月8日すみませんsafariです。
-
匿名2016年5月8日Safariですか... 私Macを持っていないので検証できません、申し訳ないです Chromeなど他のブラウザーで試してみてください
-
なか2016年5月9日前回のコマンドの上に防具立てを置いてランダムでレッドストーンブロックを設置する方法に関して質問があります。 excuteコマンドでGachaという防具立ての上にランダムで設置するようにコマンドブロックを入れたのですが 肝心のGachaという防具立ての出し方がわかりません・・・・ 厳密にいえばgachaという防具立ては出せたのですがそこにレッドストーンが設置できなくなっています。 防具立てを設置するときはどのようなコマンドでやればよろしいのでしょうか?
-
たつやチャンネル2016年5月10日https://twitter.com/tatsuya10251997/status/729705432013381632 できました!
-
匿名2016年5月10日まずレッドストーンブロックを先に設置して、その上に立ちます。 次に以下のコマンドで、プレイヤーの1ブロック下に防具立てを召喚します。 /summon ArmorStand ~ ~-1 ~ {CustonName:"Gacha",CustomNameVisible:1} こんな風に相対座標を使えば、最初からブロックと重なった状態でエンティティを召喚できます。
-
なか2016年5月10日申し訳ございません、試してみたのですが表示が防具立てのままでした・・・ ちなみにこの場合って前回のガチャの方法で行けばガチャという名の防具立て にあるレッドストーンか消えガチャを回すときにまた防具立てにレッドストーンブロックが 設置されるわけですが、そのまま防具立てに重ねてまた設置できるのでしょうか?
-
匿名2016年5月11日ごめんなさいミスタイプで「CustonName」になってました、正しくは /summon ArmorStand ~ ~-1 ~ {CustomName:"Gacha",CustomNameVisible:1} です(上のコメントは修正済みです) ブロックの設置についてはエンティティの有無にかかわらず設置されるのでレッドストーンブロックはいつでも設置できます。
-
なか2016年5月11日解決しました!ありがとうございます!!
-
コマンドでメラゾーマ作った人2016年5月12日自分がある防具を着ているときに感知するコマンドを教えてください
-
22222016年5月19日前のガチャの記事の方がよかった
-
つるりん@絵師っぽい人2016年10月15日エンダーマイトが死んでもアイテムが出てきません・・・ フォルダの構成とかは確認したんですが(コマンドの方も)、jasonが問題ですかね?ツールで作ったんですが /summon Endermite 15 80 -4 {Lifetime:2400,silent:1,DeathLootTable:"napoan:gacya/gacya2",ActiveEffects:[{Id:7,Amplifier:100,Duration:20,ShowParticles:0b},{Id:14,Amplifier:1,Duration:20,ShowParticles:0b}]} って感じなんですがさんの書いてくださったコマンドはあまり変えてないです フォルダの中はDesktopsipigotworlddataloot_tablesnapoangacyagasya2.jasonです
-
でんでん (Minecraft ID:denden0816)2016年12月17日/give @p diamond 64 0 {display:{Name:"オーブ",Lore:["ガチャに入れてね","5個で一回回せるよ"]},ench:[{id:34,lvl:5}],HideFlags:1} ▲目立たせるために適当なエンチャント効果を付けていますが、ひでフラグ:1にしてあるためツールチップには表示されません。 というところ、 /give @p diamond 64 0 {display:{Name:"オーブ",Lore:["ガチャに入れてね","5個で一回回せるよ"]},ench:[{}]} このほうが良いのではないのでしょうか? エンチャント効果をつけずに光らせる方法(ネザースターみたいなキラキラ✨)で改造してみたのですが... 1.11では使えないかもです (>_<)
-
でんでん (Minecraft ID:denden0816)2016年12月17日/testfor @p {ArmorItems:[{},{},{id:diamond_chestplate,Count:1b},{}]}
-
パープルの実況チャンネル!2016年12月23日1.11で使えましたよ!!
-
匿名希望2017年5月30日weightの設定で出やすさを設定するのではなく、確実に出すようにするにはどうしたらいいですか?例えば10個の中から3個を選び、その1個1個にweightの設定がされていると3個選んだのに2個しか出てこないなんてこともあるはずです。上の例でいうなら、10個の中から3個選び、そのアイテムを100%の確率で1個ずつだけ出すようにするにはどうしたらいいでしょう?
-
kumakuma2017年8月7日here というのをクリックしてもダウンロードできません(´;ω;`)win10です
-
soushi532017年10月7日jasonではなく jsonです
-
柊 真冬(あーくん)2017年10月22日はじめまして、いつも参考にさせていただいております。 以下の条件で『エンダーマイトは召喚できるが、アイテムをドロップしない』現象になっており教えていただきたく。 コマンドブロック②で何か間違えていると思うんですが…。 MCV:1.12.2 サーバ:Spigot jsonファイルの場所:略worlddataloot_tablesnms01gachanmsgacha.json コマブロ②の内容:/summon Endermite 474 81 259 {Tags:["GachaDeath"],Silent:1,Lifetime:2400,DeathLootTable:"nms01:gacha/nmsgacha",ActiveEffects:[{Id:14,Amplifier:0,Duration:100,ShowParticles:0b},{Id:20,Amplifier:127,Duration:20}]} jsonファイルが別途必要であれば、どこかのアプロダにあげますので… 何卒、よろしくお願いします。
-
柊 真冬(あーくん)2017年10月22日少し試した結果を。 コマンドの「Lifetime:2400」を1400に変え、エンダーマイトを召喚→普通に攻撃して倒すと、設定したドロップアイテムになりました。もう少し頑張ってみます。
-
サディ実況者2017年11月29日懐かしい記事だなぁ
-
zZjurijuirZz2017年12月24日前回のも残して欲しかったな...
-
匿名2021年9月26日エンダーマイトは死ぬんですけど指定したアイテムが出てきませんなにかアドバイスください。
-
うひ;ひyh2023年5月26日じょぃtこ5;3qj54:q