コマンドを使って何かをするとき、ランダム要素を取り入れたい時ありますよね。
バージョン1.8までは、基本的に「アーマースタンド」を利用して、セレクタ「@r」などでランダムに抽選してたりしていましたが...
バージョン1.9から追加された「ルートテーブル(Loot table)」をうまく使えば、ランダムに抽選し、指定されたコマンドを実行させたりも出来ます。しかも、アーマースタンドは不要なので回路もコンパクトにまとめられます。
今回は、そのランダム要素をルートテーブルで実現させる方法を紹介します。
スポンサーリンク
ページ目次
出来上がりはこんな感じ
もちろんこれだけではなく、アレンジ次第で色んなギミックを作る事が出来ますよ!
まずはルートテーブルをある程度知っておくとイイヨ
一応、この記事を見れば、ランダム要素については一通り分かるように書きますが、「ルートテーブル」のノウハウを知っておくと色々と役立ちマスオ~。
是非とも、こちらの記事を合わせて読んでね!
スポンサーリンク
ルートテーブルを書いてファイル配置
ルートテーブルを使ったランダム抽選法といっても色んなやり方があると思いますが、今回は「HFC(Hopper from chest)検知法」を使ってやっていきます。適当に名前を付けました^^;
「HFC検知法」とはどんなものかと言うと
ルートテーブルを使って、ランダムで中身が入っているチェストを設置し、それをホッパーに移動させ、そのホッパー内のアイテムが何かを検知し、それに合ったコマンドを実行させる仕組みです!
まずはルートテーブルを用意しましょう。
新規作成からメモ帳を作成して「example.json」のようにJson形式で保存します。
そこにルートテーブルを描いていきますが、メモ帳のままだと編集しづらいので、「sublime text 3」「サクラエディタ」などのテキストエディターを用意しておくといいです。
①例文(5パターンバージョン)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
{ "pools": [ { "rolls": 1, "entries": [ { "type": "item", "name": "minecraft:slime_ball",//スライムボール "weight": 1,//weightは選ばれる確率(それぞれ比率) "functions": [ { "function": "set_nbt", "tag": "{display:{Name:\"1\"}}"//表示名を「1」 } ] }, { "type": "item", "name": "minecraft:slime_ball",//スライムボール "weight": 1, "functions": [ { "function": "set_nbt", "tag": "{display:{Name:\"2\"}}"//表示名を「2」 } ] }, { "type": "item", "name": "minecraft:slime_ball",//スライムボール "weight": 1, "functions": [ { "function": "set_nbt", "tag": "{display:{Name:\"3\"}}"//表示名を「3」 } ] }, { "type": "item", "name": "minecraft:slime_ball",//スライムボール "weight": 1, "functions": [ { "function": "set_nbt", "tag": "{display:{Name:\"4\"}}"//表示名を「4」 } ] }, { "type": "item", "name": "minecraft:slime_ball",//スライムボール "weight": 1, "functions": [ { "function": "set_nbt", "tag": "{display:{Name:\"5\"}}"//表示名を「5」 } ] } ] } ] } |
まずは、これをまるまるコピペしちゃってください。
もっとパターンを増やしたい場合は、6行~15行の文を60行と61行の間にどんどん足して、表示名の部分を「{Name:\"6\"}」と変更し、それを7,8,9...のように繰り返して増やしていきます。
今回はスライムボールを使用していますが、何でもいいです。
また「weight」の値は選ばれる比率を表しており、一つだけレア設定にしたいなら、それを「"weight": 1,」にして他4つを「"weight": 2,」にしたら、それぞれ確率は「1/9, 2/9, 2/9, 2/9, 2/9」になります。
出来上がったら、好きな名前「example.json」(.jsonは拡張子)で保存します。
「.minecraft\saves\新規ワールド\data」内に新規フォルダ「loot_tables」を作成。
「loot_tables」の中に新規フォルダ「lottery」を作成。
今作った「lottery」フォルダの中に今回作ったルートテーブルを入れます。
スポンサーリンク
コマンド回路を組み立てる
基本的にはこれだけでできます。
これはさっきGIFで見せたものの回路ですが、これを使って解説していきます。
抽選システム
まず「抽選システム」にコマブロが一個だけありますが、それは、ホッパーの上にのっかっているチェストの中身を更新するコマンドです。
/blockdata チェストの座標 {LootTable:"sumple:lottery"} |
「sumple」と「lottery」は、先ほど作成したフォルダ等の名前に合わせます。
このチェスト、ルートテーブルが仕込んであります。コマンドが実行されるたびに先ほど作成したルートテーブル通りにアイテムが配置されています。
そのアイテムが即座に下のホッパーに移動します。
抽選の結果
①でホッパー内のアイテムを検知し、②でホッパー内のアイテムをクリア。③以降は実行したいコマンドをつなげていきます。
①リピート 無条件 常時実行
/testforblock ホッパーの座標 hopper 0 {Items:[{id:minecraft:slime_ball,tag:{display:{Name:"1"}}}]} |
「1」の値は、「2,3,4,5...」のようにパターンごとに変えていきます。
②インパルス 無条件 動力が必要
/blockdata ホッパーの座標 {Items:[{}]} |
ホッパー内に入っているアイテムをクリアします。
③チェーン 無条件 常時実行
この部分は、自分で決めます。上のGIFでは下記のコマンドを使用しました。
/tellraw @p {"text":"一等"} |
これをパターン分だけ作って、完成です。
この仕組みを使ったガチャシステム
まとめ
これを利用したら、いろんな事が出来るんじゃないでしょうか。ぜひ試してみてね!
最後に、もしどうしても分からないという方がいれば、記事のコメントまたは僕のツイッター(@KzKzKazz)のDMまで来ていただけたらできる範囲で対応しますので、気軽にどうぞ!
スポンサーリンク
コメント
二つ目の見出しがルートテールになっていますよ。
ご指摘ありがとうございます!訂正いたしました!