execute storeコマンドは、コマンド実行によって得られた値をさまざまな保存先に保存できるコマンドです。入力例を紹介しながらわかりやすくまとめているので、ぜひ参考にしてください。(検証バージョン Java 1.21.4)
execute storeの基本構文
/execute store <result|success> <保存先> .. run <コマンド>
execute storeコマンドは、storeにつづけてresultまたはsuccessを入力します。resultでコマンド実行によって得られた値が、successでコマンドが成功したかどうか(成功→1、失敗→0)が保存されます。
execute storeでは、「数値」だけが保存できます。テキストを入れたいときは、data modifyが使えます。
execute store resultは得られた値が保存される
あらかじめscoreboardコマンドで、TEST1というスコアを作ります。
#スコアTEST1を作るコマンド
/scoreboard objectives add TEST1 dummy
続いて、以下のコマンドを実行してみます。
#プレイヤー以外をキルして得られた値を保存
/execute store result score @s TEST1 run kill @e[type=!player]
#スコアTEST1を表示する
/scoreboard players get @s TEST1
上記コマンドを順に実行すると、コマンド実行者のスコアTEST1に、killコマンドによってキルされたエンティティの総数が保存されていることがわかります。
今回は171体のエンティティがキルされたので、171という値がスコアTEST1に保存されました。
execute store successは成功なら1失敗なら0が保存される
successを使ったコマンドも実行してみましょう。いったんスコアTEST1を削除してから、同じものをもう一度作成し、以下のコマンドを実行します。result → successに変更したコマンドです。
#プレイヤー以外をキルして成功したかどうか保存
/execute store success score @s TEST1 run kill @e[type=!player]
このコマンドを実行すると、killコマンドが成功したときに、コマンド実行者のスコアTEST1に1が保存されます。
175体のエンティティがキルされましたが、TEST1に保存されている値は1です。もしエンティティが1体もキルされなければ、0が保存されます。
execute storeの保存先一覧
execute storeで値を保存できるのは、以下の5つの保存先です。resultまたはsuccessの直後で指定します。
block | ブロックのNBTに値をいれる |
---|---|
bossbar | ボスバーに値をいれる |
entity | エンティティ(プレイヤー以外)のNBTに値をいれる |
score | スコアボードに値をいれる |
storage | ストレージに値をいれる |
execute store blockは、ブロックのNBTに値をいれることができます。NBTとは、エンティティが内部的にもっているデータのことです。{キー:値}の形になっていて、dataコマンドを使うと表示させることができます。
コマンド内の<NBTパス>の部分で指定するのは、キー(上画像の水色の文字)です。対象によってもっているタグは違うので、dataコマンドで確認してから使うといいです。
execute store .. blockの構文と入力例
execute store .. blockは、取得した値をブロックエンティティのNBTに入れるコマンドです。次の構文で入力します。
/execute store (result|success) block <座標> <NBTパス> <型> <倍率> .. run ..
項目 | 項目の説明 | 例 |
---|---|---|
座標 | 値をいれるブロックの座標 | 100 64 120 |
NBTパス | 値をいれるNBTのキー | Items[0].count |
型 | 入れる値のデータ型 | int |
倍率 | 保存前に適用する倍率 | 1 |
<型>で指定するデータ型は、byte、short、int、long、float、doubleのいずれかです。それぞれ、下のような意味があります。
種類 | 意味 | 表示例 |
---|---|---|
byte | -128~127の整数 | 1b |
short | -32768~32768の整数 | 300s |
int | -2147483648 ~2147483647の整数 |
22 (数値のみ) |
long | intよりも広範囲の整数 | 943748L |
float | 小数 | 0.085f |
double | floatよりも広範囲の少数 | 71.0d |
詳細:NBT format – Minecraft Wiki
dataコマンドを使うと、数値のあとにbやfといったアルファベットがついているのが確認できるので、使われているものと同じものを使いましょう。
つづいて、execute store .. blockの入力例を見てみます。
#チェスト内のアイテム数をプレイヤーの体力の2倍にする
/execute store result block -11 53 248 Items[0].count int 2 run data get entity @s Health
上記のコマンドを実行すると、(x,y,z)=(-11,53,248)にあるチェストの左上(0番目)のスロットのアイテム数(Items[0].count)が、コマンド実行者の体力値(Health)の2倍に変更されます。
本来スタックできないアイテムでも、強制的に個数が変更されます。
execute store .. bossbarの構文と入力例
execute store .. blockは、取得した値をボスバーの現在値または最大値に入れるコマンドです。以下の構文で入力します。
/execute store (result|success) bossbar <id> (value|max) .. run ..
valueを指定すると取得した値がボスバーの現在値に、maxを指定すると最大値に上書きされます。たとえば以下のコマンドを実行すると、コマンド実行地点から20ブロック以内のエンティティの数(プレイヤー以外)が、ボスバー(minecraft:test)の現在値として保存されます。
#エンティティの数をボスバーに表示する
/execute store result bossbar minecraft:test value run execute if entity @e[type=!minecraft:player,distance=..20]
リピートコマンドブロックで実行すれば、リアルタイムでエンティティ数の変化を表示できます。
execute store .. entityの構文と入力例
execute store .. entityは、取得した値をプレイヤー以外のエンティティのNBTに保存するコマンドです。以下の構文で入力します。
/execute store (result|success) entity <ターゲット> <NBTパス> <型> <倍率> .. run ..
<ターゲット>で対象を指定し(ターゲットセレクターを使用)、保存したいNBT、データ型、倍率を順に入力します。<ターゲット>以降は、store .. blockと同じ入力方法です。
たとえば以下のコマンドを実行すると、もっとも近くにいるスケルトンの体力が、コマンド実行者の経験値レベルの値で上書きされます(最大値は20)。
#スケルトンの体力を経験値レベルの値にする
/execute store result entity @e[type=minecraft:skeleton,limit=1,sort=nearest] Health int 1 run data get entity @s XpLevel
プレイヤーのNBTを変更することはできないので、注意しましょう。
execute store .. scoreの構文と入力例
execute store .. scoreは、取得した値でスコアボードの値を上書きするコマンドです。以下の構文で入力します。
/execute store (result|success) score <ターゲット> <オブジェクティブ> .. run ..
たとえば以下のコマンドを実行すると、コマンド実行者の現在のX座標を2.0倍した値が、オブジェクティブ「TEST1」に保存されます。
#コマンド実行者のX座標を保存する
/execute store result score @s TEST1 run data get entity @s Pos[0] 2.0
execute store .. storageの構文と入力例
execute store .. storageは、取得した値をストレージに保存するコマンドです。以下の構文で入力します。
/execute store (result|success) storage <ストレージ名> <NBTパス> <型> <倍率> .. run ..
たとえば、以下のコマンドを実行すると、ホットバーの最初のスロットに入っているアイテムの個数が、ストレージume101の「アイテム数」という項目に保存されます。
#持っているアイテムの個数を保存する
/execute store result storage ume101 “アイテム数” int 1 run data get entity @s Inventory[0].count
指定したストレージが存在しない場合は、execute store ..storageコマンドを実行した時点で作成されます。【マイクラ】storageの使い方を解説!作成例も紹介しますも、合わせてチェックしてみてください。
ということで、ストレージの使い方まとめでした。エンティティやブロックの持つ値を変更できるので、条件におうじてゲームを変化させることができます。とっつきにくさはありますが、慣れればそこまで難しくはないので、ぜひ挑戦してみてください!