この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
こんにちは!
マインクラフターのなつめ(@natsume_717b)です。
この記事では、こんな疑問を解決します!
- 変数を使ってエンダーチェストの中身をランダムに取り出す
今回はエンダーチェストの中身をランダムに選び、それを付与するコマンドを紹介していきます。
実際にやってみた様子がこちら。
以前作成したエンダーチェストの中身をランダムに選出するという機構
— 夏メ│Natsume (@natsume_717b) January 11, 2024
どこかで公開しておくべきなんだけど、検索されるほどのものでもないだろうと踏んでいるので悩んでいる pic.twitter.com/D58bKchdOE
storageや変数を扱いますが、記述するコマンド数は少ないため、めちゃくちゃ難しいわけではありません。
さっそく見ていきましょう!
変数を使ってエンダーチェストの中身をランダムに取り出す
エンダーチェストの中身を参照してアイテムを付与させる場合
- ランダムに数字を1つ選ぶ
- 選出された数字とエンダーチェストの中身(位置)から該当するアイテムを参照し、付与させる
といった段階を踏む必要があります。
また、今回は変数を扱うためfunctionコマンドを使用します。
データパックを作成する必要がありますので、その説明もしていきます。
データパックの構造
mcfunctionを呼び出せればよいので、難しいことはしません。
- datapack本体
- data
- sample
- functions
- draw_result.mcfunction
- draw_item.mcfunction
- functions
- sample
- pack.mcmeta
- data
いつものことですが、pack.mcmeta、mcfunction以外は全てフォルダです。
また、pack.mcmetaは以下のように書いておけば機能します。
{
"pack": {
"pack_format": 26,
"description": ""
}
}
次項からは各mcfunctionの内容とどのような働きがあるのかを見ていきましょう。
draw_result.mcfunction
draw_result.mcfunctionでは、エンダーチェストの中身からアイテムをランダムに選ぶことを行います。
具体的な記述内容はこちら。
#ランダムにドロー
execute store result storage draw:item number int 1 run random value 0..26
#乱数を指示した関数に渡しつつ実行
function sample:draw_item with storage draw:item
2行目のコマンドにて、randomコマンドを用いて0~26の値を抽選しつつ、それをdraw:itemのnumberに格納しています。
この辺りはstorageの知識がいるため、よく分かっていないという方は【マイクラ】dataコマンドでstorageにデータを追加するあたりの記事で勉強することをお勧めします。
格納後は4行目のfunctionコマンドにて、sample:draw_itemを呼び出しています。
ここに含まれているコマンドについては次項で解説しますが、覚えておきたいのは、withを用いてdraw:itemのデータを参照すると言っている点ですね。
先ほど保存したデータを、呼び出す関数で活用します。
というわけでdraw_item.mcfunctionを見ていきましょう。
draw_item.mcfunction
記述されている内容はこちら。
$item replace entity @s hotbar.0 from entity @s enderchest.$(number)
itemコマンドが書かれており、文末に$(number)があります。
この部分は呼び出す際に指示していたdraw:itemの、numberを参照するということなので、言ってしまえばランダムに選ばれた数字に置き換えられます。
1が抽選されていた場合には、”enderchest.1”と同じ意味合いになるわけですね。
これによって、hotbar.0の位置にエンダーチェストの中身(該当するアイテム)へと置き換えることが可能というわけです。
データパック作成後
データパックでの作業を終え導入することができたら、エンダーチェストにアイテムを詰め込みます。
その後
/function sample:draw_result
を実行してみましょう。
ホットバーの左端に、ランダムに選ばれたアイテムが設置されるはずです。
まとめ
というわけで、今回のまとめです。
- エンダーチェストの中身を参照してランダムに中身を取り出すには、変数を駆使する必要がある。
この記事は以上になります。
2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!