内容をスキップ

コマンド最低1つ! アイテムがランダムに出る「ガチャ」の簡単な作り方。LootTableを使って設定【Minecraft】

UPDATE :
LootTableを使ったガチャ装置の作り方

ランダムに色々なアイテムが出てくる「ガチャ(ガシャ)」装置。例えば「運が良ければダイヤモンドが出てくる」「運が悪ければゴミアイテムが出てくる」など、マルチプレイのサーバーや配布ワールドに設置してみたいですよね。今回はバージョン1.9の新機能「Loot Table」を使って、コマンド最少1つだけ(回路無し)でのガチャ装置の作り方を解説します。この方法なら、json文書を編集するだけで高度な条件/確率の設定ができるんです。世界に一つだけのガチャを作ってみませんか。

記事公開当初は「コマンドは最低2つ」としていましたが、なんと1コマンドだけで実現できたのでコマンド解説の部分を書き直しました。棒レンジ氏、ありがとうございました!

この記事で解説する装置は、Minecraftバージョン1.9以上でしか動きませんのでご注意下さい。

 

マイクラで「ガチャ」ってどんな感じ? ダイヤ等を投入して回せます

ガチャの会場

どこかで見たことあるようなないようなこのレッドカーペットの通路。奥にはドラゴンが構えています。御存知の通り某ソシャゲのガチャ画面を再現したわけですが、果たしてマイクラではどのようにガチャを回すのでしょうか。

事前に特別な「オーブ」というアイテムが用意されていて、それを5個ホッパーに投入するとポイッとアイテムが出てきます。“回す”と言うより”出す”ガチャですね。

経験値を消費して回す例

ただアイテムを投入して引くだけでなく、経験値を消費して引く、だとか様々な方法でガチャを回せます。単純にボタンを押すと回せる、でもいいですし、配布ワールドで「ランダムに○○する」イベントを発動するきっかけの装置にもできます。

各アイテムには出やすさが設定できます

もちろんただアイテムがポンポン出ているだけではなく、各アイテムごとに出やすさを設定できます。「運」効果を持っていれば特定のアイテムを出やすくすることも可能です。

ガチャの必要最低限のコマブロはこれだけ

もう少し噛み砕いていいますと、なんと▲1コマンドだけでガチャが作れちゃうんです。「アイテムを複数出したりできるの?」と心配な方もいらっしゃるかもしれませんが、マイクラ1.9からはたった1つのコマンドで大量の種類のアイテムを自由自在な確率で出すことが可能なんです。そう、Loot Tableがあればね。

LootTableを使ったガチャ装置の仕組み

いつもの雑パワポ図解にするとこんな感じ。ガチャで出てくるアイテムを、あらかじめLoot TableのJSONファイルに書いておいて、出やすさやエンチャ等を設定しておきます。それをマイクラ内でガチャを引く時に、Loot Tableを設定した、即死ぬ透明なエンダーマイトを召喚すればドロップ表に設定してあるアイテムが出てくるわけですよ。これならコマンドは1つだけで済みます。

「エンダーマイトって敵だからピースフルじゃ使えないでしょ」とお思いの方、私も最初はそう思っていたのですがどちらにせよ即死するのでこのエンダーマイトはピースフルでも使えます。

 

アイテムの種類や量、出てくる確率や条件を決める「Loot Table」を用意しよう

ガチャで出てくるアイテムの出やすさや量、エンチャントやNBTタグ等を定義するために、これから「Loot Table」のファイルを作成していきます。JSON形式なので書き方はとっても単純。

これがLoot Tableだ

こちらがLoot Tableを実際に書いてみた例です。“pools”(=まとまり)に出てくるアイテムの合計量を指定して、“entries”(=項目)にアイテムを書いていきます。それぞれに“function”(=機能)を設定してエンチャント効果やNBTタグなどを付けていきます。さらにpool/entry(アイテム)/functionに多種多様な”condition”(=条件)を設定できます。どんどん書き足すことで、いくらでも複雑なガチャが作れちゃうんです。

「こんなの手書きできねえよ!」と思った方も安心して下さい、こちらでJSONを書かずともLootTableが作れるツールを紹介しています。

 

Loot Table(ドロップ表)のファイルを書く準備

ワールドフォルダー内にsaves→loot_tablesフォルダーを作成

まずは使っているワールドのフォルダーを開き、dataフォルダーの中にloot_tablesフォルダーを作成します。

さらにフォルダーを作成してjsonを配置

loot_tablesフォルダーの中に、さらに好きな名前のフォルダーを作成します。例えば配布ワールドの名前だとか、オリジナルの名前を付けると良いでしょう。このフォルダーの名前が、LootTableを指定する際の“Foo:bar/baz”Foo部分になります。バニラのLoot tableを上書きする場合はminecraftという名前にします。この記事では、mcthnkという名前にした前提で解説を進めます。

作ったフォルダーの中に、好きな名前のjsonファイルを作成します。Windowsの場合は右クリック→新規作成→テキスト(rytxtファイルを作った後、拡張子を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:の中にアイテムを書いていくわけです。それぞれアイテム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”(機能)を書きます。

 

各種function、condition等LootTableの全要素を網羅した大長編解説記事はこちら
LootTable(ドロップ表)完全ガイド

ここで登場した機能は全体のほんの一部に過ぎません。この記事では全然解説できてませんので、LootTableの書き方については▲の記事を是非お読みください。全ての機能、さらには”条件”等を片っ端から解説しています。(前も言った気がしますが多分このブログで最長の技術系記事です)

 

JSONを書くのが面倒な方は、ツールを使って簡単にLoot Tableを生成しよう

め゛ん゛どぐぜえ゛

め゛ん゛どぐぜえ゛!!!

これ使ってみ

「これ使ってみ。」

 

Loot Tableがクリックポチポチでとっても簡単に作れるサイト
LootTable作成ツール
http://minecraft.tools/en/loots.php

LootTableのJSONを書くのが面倒なあなたに朗報です。いとも簡単にLootTableが作成できてしまうサイトがあるんです。当ブログで度々登場しているサイト「Minecraft Tools」のLootTableコーナーです。

まずモードを選択

サイトにアクセスしたらまずLootTable自体の種類を選びましょう。「Kill a Mob or Entity (Mob Drops)」にします。

※このツールではLootTableを「チェスト用」「ドロップアイテム用」に分けて扱っていますが、実際LootTableは別け隔てなく使えるものです。このツールではこの選択によっていくつかのオプションが非表示になるのでご注意下さい。手書きなら好き放題全機能を使えます。

基本的な設定項目

画面は単純明快なので説明するまでもないかもしれませんが、一応図で項目の場所を示しておきます。

More options

「More Options」をクリックするとさらに設定項目が表示されます。それぞれの項目の効果についてはこちらの記事で詳しく解説していますので是非お読みください。特にエンチャント指定とNBTタグ欄はよく使います。

jsonを生成してファイルをダウンロードするかコピー

「GENERATE YOUR LOOTS TABLE」をクリックするとJSONが生成されます。自動生成ではないので使う度に押しましょう。そして下のClick here to downloadの「here」をクリックします。するとJSONファイルがダウンロードできます

jsonをコピー

記事前半のこちらの解説を読んでLootTable専用フォルダーを作成して下さい。配置する準備が整ったら、ダウンロードしたJSONファイルをloot_tableフォルダー内の好きな場所に設置します。一緒に名前を分かりやすいものに変えておきましょう。

 

ガチャのコマンドと装置の作り方を解説

ここからはコマンドの解説です

LootTableの作成お疲れ様でした。ここからはコマンドを解説していきます。

 

アイテムをホッパーに投入して回す方式の作り方

2つの座標を確認

まずは「”オーブ”等のアイテムを投入して回すガチャ」の作り方を解説します。装置作成前に、以下の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の指定方法
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
▲ガチャを回すと同時に効果音を鳴らします。

数が多すぎると

注意点として、ホッパーに必要以上に一気に入れても認識されませんのでご注意下さい。

※LootTableに変更を加えた場合、ワールドに入り直さないと反映されないのでご注意下さい。

 

経験値レベルを消費して回す方式の作り方

レベルが足りないと警告してくれる

次は「レベルを消費してガチャを回す」装置の作り方を解説します。

経験値払うガチャ装置

※マウスオーバーすると説明が出る箇所を用意しています。
「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>

 

※LootTableに変更を加えた場合、ワールドに入り直さないと反映されないのでご注意下さい。

 


最後までお読みいただきありがとうございました

Loot Tableさえ用意すれば、後はそれをドロップアイテムに設定した即死エンダーマイトを召喚するだけ。それが新時代のガチャ装置の作り方です。皆さんも自由にLootTableとガチャ装置周辺の回路を設計して、思い通りの”ガチャ”を作ってみてください。最後までお読みいただきありがとうございました。

ポスト
マイクラ思考編集部
YouTubeでマインクラフトの役立つ動画を投稿しています。クロスマルチプレイ対応のマイクラサーバー「くろまる」も運営中!

40件のコメント

  1. GW?なにそれ美味しいの?
    2016年5月2日
    記事投稿お疲れ様です! 二日間偶に訪れてはF5連打して待っていました!(DOS攻撃ではないです) 眠気眼を擦って早速製作させて頂きます!
  2. おはようござません
    2016年5月2日
    Twitterとかプッシュ通知とか使えよww
  3. たつやチャンネル
    2016年5月3日
    スコアボードの値を経験値に表示する方法を教えてほしいです。 3時間自力でやったんですができませんでした。 助けてください
  4. 雨降り暇人
    2016年5月4日
    質問です、この記事で紹介されたガチャ機構を前作のガチャ機構のように 低確率のアイテムが出てくると「レア!」や「激レア!」といった /titleが出るように改造したいのですが、何か方法はありますか?
  5. 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"}
  6. ookiikuma
    2016年5月4日
    二進数使えばいけますよ
  7. たつやチャンネル
    2016年5月5日
    やってみたんですが上手くいきませんでした(´;ω;`)
  8. 漆黒のイデア
    2016年5月6日
    hereを押してもダウンロード出来ません。
  9. 2016年5月6日
    使っているブラウザを教えていただければ助かります。
  10. 漆黒のイデア
    2016年5月7日
    mac osです。
  11. 2016年5月7日
    ブラウザ、つまりWebの閲覧に使っているソフトを教えて頂ければ助かります。例えばSafari、Chromeなどです
  12. 漆黒のイデア
    2016年5月7日
    すみませんSafariです。
  13. 豚さんを守る会
    2016年5月8日
    それで理解できる方はかなり少ないかと(´・ω・`)
  14. 豚さんを守る会
    2016年5月8日
    なるほどDOSですね。
  15. ookiikuma
    2016年5月8日
    スコアボードの値を別のスコアボードに代入して代入した値が2のべき乗(2^n)以上あればxpコマンドで経験値を増やして代入した値からそのべき乗の数を引いてそれを大きい方からやれば行けます 文字だと非常に分かりにくいですが・・・
  16. たつやチャンネル
    2016年5月8日
    ああ、なるほど!ためしてみます!
  17. たつやチャンネル
    2016年5月8日
    小さい方からやって混乱しましたw
  18. 漆黒のイデア
    2016年5月8日
    すみませんsafariです。
  19. 2016年5月8日
    Safariですか... 私Macを持っていないので検証できません、申し訳ないです Chromeなど他のブラウザーで試してみてください
  20. なか
    2016年5月9日
    前回のコマンドの上に防具立てを置いてランダムでレッドストーンブロックを設置する方法に関して質問があります。 excuteコマンドでGachaという防具立ての上にランダムで設置するようにコマンドブロックを入れたのですが 肝心のGachaという防具立ての出し方がわかりません・・・・ 厳密にいえばgachaという防具立ては出せたのですがそこにレッドストーンが設置できなくなっています。 防具立てを設置するときはどのようなコマンドでやればよろしいのでしょうか?
  21. たつやチャンネル
    2016年5月10日
    https://twitter.com/tatsuya10251997/status/729705432013381632 できました!
  22. 2016年5月10日
    まずレッドストーンブロックを先に設置して、その上に立ちます。 次に以下のコマンドで、プレイヤーの1ブロック下に防具立てを召喚します。 /summon ArmorStand ~ ~-1 ~ {CustonName:"Gacha",CustomNameVisible:1} こんな風に相対座標を使えば、最初からブロックと重なった状態でエンティティを召喚できます。
  23. なか
    2016年5月10日
    申し訳ございません、試してみたのですが表示が防具立てのままでした・・・ ちなみにこの場合って前回のガチャの方法で行けばガチャという名の防具立て にあるレッドストーンか消えガチャを回すときにまた防具立てにレッドストーンブロックが 設置されるわけですが、そのまま防具立てに重ねてまた設置できるのでしょうか?
  24. 2016年5月11日
    ごめんなさいミスタイプで「CustonName」になってました、正しくは /summon ArmorStand ~ ~-1 ~ {CustomName:"Gacha",CustomNameVisible:1} です(上のコメントは修正済みです) ブロックの設置についてはエンティティの有無にかかわらず設置されるのでレッドストーンブロックはいつでも設置できます。
  25. なか
    2016年5月11日
    解決しました!ありがとうございます!!
  26. コマンドでメラゾーマ作った人
    2016年5月12日
    自分がある防具を着ているときに感知するコマンドを教えてください
  27. 2222
    2016年5月19日
    前のガチャの記事の方がよかった
  28. つるりん@絵師っぽい人
    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です
  29. でんでん (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では使えないかもです (&gt;_&lt;)
  30. でんでん (Minecraft ID:denden0816)
    2016年12月17日
    /testfor @p {ArmorItems:[{},{},{id:diamond_chestplate,Count:1b},{}]}
  31. パープルの実況チャンネル!
    2016年12月23日
    1.11で使えましたよ!!
  32. 匿名希望
    2017年5月30日
    weightの設定で出やすさを設定するのではなく、確実に出すようにするにはどうしたらいいですか?例えば10個の中から3個を選び、その1個1個にweightの設定がされていると3個選んだのに2個しか出てこないなんてこともあるはずです。上の例でいうなら、10個の中から3個選び、そのアイテムを100%の確率で1個ずつだけ出すようにするにはどうしたらいいでしょう?
  33. kumakuma
    2017年8月7日
    here というのをクリックしてもダウンロードできません(´;ω;`)win10です
  34. soushi53
    2017年10月7日
    jasonではなく jsonです
  35. 柊 真冬(あーくん)
    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ファイルが別途必要であれば、どこかのアプロダにあげますので… 何卒、よろしくお願いします。
  36. 柊 真冬(あーくん)
    2017年10月22日
    少し試した結果を。 コマンドの「Lifetime:2400」を1400に変え、エンダーマイトを召喚→普通に攻撃して倒すと、設定したドロップアイテムになりました。もう少し頑張ってみます。
  37. サディ実況者
    2017年11月29日
    懐かしい記事だなぁ
  38. zZjurijuirZz
    2017年12月24日
    前回のも残して欲しかったな...
  39. 匿名
    2021年9月26日
    エンダーマイトは死ぬんですけど指定したアイテムが出てきませんなにかアドバイスください。
  40. 2023年5月26日
    じょぃtこ5;3qj54:q

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です