マインクラフト(JE)は1.13のアップデートにより、コマンドに関する仕様がたくさん変更・追加されます。
最たるものの1つが、『execute』コマンドの仕様変更ですね!
過去の面影は全くなくなり、1.12でコマンド作成していた人たちは大混乱です(僕もそのうちの1人です…)。
今回は『execute』コマンドがどのような新仕様に変更されたのか解説します。
- 1.構文の変化
- 2.サブコマンドの一覧
- 3.サブコマンドの解説
- 1.『as』-コマンドの実行者を決める
- 2.『at』-コマンドの実行場所・向き・ディメンションを決める
- 3.『block』-実行に必要なブロックを指定する(旧testforblockコマンド)
- 4.『entity』-実行に必要なエンティティを指定する(旧testforコマンド)
- 5.『score』-二つの対象のスコアを比較する
- 6.『store』-実行したコマンドの結果を代入する(旧statsコマンド)
- 6-1.『success | result』-実行結果の代入方法
- 6-2.『score』-取得した値をオブジェクトに代入
- 6-3.『block』-取得した結果をブロックのデータタグに代入
- 6-4.『entity』-取得した結果をエンティティのデータタグに代入
- 6-5.『bossbar』-取得した結果をbossbarに代入
- 7.『align』-コマンドの実行座標の小数点以下を切り捨てる
- 8.『anchored』-ローカル相対座標などで基準にする点を決める
- 9.『blocks』-指定範囲のブロックを比較して実行を判定する
- 10.『positioned』-コマンドを実行する座標を指定
- 11.『in』-コマンドを実行するディメンションを指定
- 12.『rotated』-実行者の向いている角度を指定する
- 13.『facing』-向いている対象を指定する
- 参考にしたサイト様
1.構文の変化
~1.12
/execute <エンティティ> <x> <y> <z> <コマンド>
1.13~
/execute <サブコマンド> [サブコマンド] [...] run <コマンド>
・・・と、そもそも構文自体が変更されてます。
1.13からの新しい execute コマンドは、サブコマンドを重ねて書き、最後に run で実行したいコマンドを書く、という構文になりました。
execute の新仕様は、ほぼサブコマンドによるものなので、それさえ覚えれば大丈夫です。
2.サブコマンドの一覧
かなりの数のサブコマンドがありますが、最初のうちは『as』『at』『block』『entity』『score』『store』の6つを覚えれば良いと思っています。
スポンサーリンク
3.サブコマンドの解説
では、サブコマンドの解説をします。主要なサブコマンドを優先的に解説していきますね。
1.『as』-コマンドの実行者を決める
構文:チャット欄/execute as <エンティティ> run <コマンド>
- 『as』はコマンドの実行者を指定のエンティティにします。
※実行者は変更されますが、実行座標や向き、ディメンションは変化しません!
例:チャット欄/execute as @e[type=villager] run say Hello!
- 村人が全員「Hello!」とあいさつしてくれます。うるさい
2.『at』-コマンドの実行場所・向き・ディメンションを決める
構文:チャット欄/execute at <エンティティ> run <コマンド>
- 『at』はコマンドの実行場所、向き、ディメンションを指定のエンティティに合わせます。
- 後述する、『positioned』『rotated』『in』を1つにしたサブコマンドとも言えます。大抵はこの3つよりも、『at』だけで十分です。
例:チャット欄/execute at @e[type=villager] run particle minecraft:heart ~ ~2 ~ 0.5 0.5 0.5 0 5
- 村人の全員の頭上にハートマークが現れます。うわ・・・
3.『block』-実行に必要なブロックを指定する(旧testforblockコマンド)
構文:チャット欄/execute < if | unless > block <座標> <ブロックID> run <コマンド>
- 『block』サブコマンドは、『if』か『unless』と共に使います。
- 『if block』は指定した座標のブロックが、指定したブロックIDだったらコマンドが実行されます。
- 『unless block』は指定したブロック以外だったらコマンドが実行されます。
- 過去の『testforblock』コマンドに近いサブコマンドです。
例:チャット欄/execute if block ~ ~-1 ~ minecraft:grass_block run say *くさのうえにいる*
- 実行座標の1m下のブロック(足元)が草ブロックだったら、「*くさのうえにいる*」と発言します。
- コマブロで実行する時は、『at』と合わせて使いましょう!
4.『entity』-実行に必要なエンティティを指定する(旧testforコマンド)
構文:チャット欄/execute < if | unless > entity <エンティティ> run <コマンド>
- 『entity』サブコマンドも、『if』か『unless』と共に使います。
- 『if entity』は指定したエンティティが存在したらコマンドを実行します。
- 『unless entity』は指定したエンティティが存在しない場合、コマンドを実行します。
- 過去の『testfor』コマンドに近いサブコマンドです。
例:チャット欄/execute if entity @e[type=villager,distance=..5] run say 半径5mに村人の気配がするぞ!
- 実行座標から半径5m以内に村人がいたら発言します。
- こちらもコマブロで使う際は『at』と合わせて使いましょう!
5.『score』-二つの対象のスコアを比較する
構文:チャット欄/execute < if | unless > score <対象> <オブジェクト> ( < | <= | = | >= | > ) <比較対象> <比較対象のオブジェクト> run <コマンド>
または
構文:チャット欄/execute < if | unless > score <対象> <オブジェクト> matched <数値範囲> run <コマンド>
- 『score』サブコマンドも『if』か『unless』と共に使用します。
- 『scoreboard』コマンドで作成したスコアを比較します。
- 前者は二つのエンティティのスコアの比較、後者は指定した数値範囲と一致するか確認します。
- 数値範囲の書き方は、最小値A、最大値Bとすると『A..B』のように書きます。最小値のみ、最大値のみ書いても問題ありません。
例:チャット欄/execute if score @p MP matches 20.. run say 魔法発動!
- MPは『scoreboard』コマンドで作成した、dummyのオブジェクトです。
- プレイヤーのMPの値が20以上の場合、魔法発動!と発言します。
6.『store』-実行したコマンドの結果を代入する(旧statsコマンド)
構文:チャット欄/execute store < success | result > < score | block | entity | bossbar > ... run <コマンド>
データタグの値をスコアに、スコアの値をデータタグに代入できるようになった革命的なサブコマンドです。少し難しいですが、ぜひとも覚えたい・・・!
6-1.『success | result』-実行結果の代入方法
- 『success』と『result』は実行コマンドの結果の代入方法を指定します。
- 『success』は実行コマンドの成功した回数を代入します
- 『result』は実行コマンドの結果の値を代入します。
- 過去の『stats』コマンドのSuccessCountなどに近い引数です。
6-2.『score』-取得した値をオブジェクトに代入
構文:チャット欄/execute store < success | result > score <エンティティ> <オブジェクト> run <コマンド>
- コマンドの結果を指定したエンティティのオブジェクトに代入します。
- 主に『data』コマンドと合わせて使うサブコマンドです。
例:チャット欄/execute store result score @p HP run data get entity @s Health 1
- HPは『scoreboard』コマンドで作成したdummyのオブジェクトです。
- 『data』コマンドでプレイヤーのHPを取得し、HPのスコアオブジェクトに代入するコマンドです。
6-3.『block』-取得した結果をブロックのデータタグに代入
構文:チャット欄/execute store < success | result > block <座標> <NBT> < byte | double | float | int | long | short > <倍率> run <コマンド>
- コマンドの結果を指定したブロックのデータタグに代入します。
- 主に『scoreboard』コマンドと合わせて使うコマンドです。
- <NBT>は、例えば{A:{B:[{},{},{C:1b}]}}のCを指定したい時、「A.B[2].C」と書きます。
6-4.『entity』-取得した結果をエンティティのデータタグに代入
構文:チャット欄/execute store < success | result > entity <エンティティ> <NBT> < byte | double | float | int | long |short > <倍率> run <コマンド>
- コマンドの結果を指定したエンティティのデータタグに代入します。
- 主に『scoreboard』コマンドと合わせて使うコマンドです。
- <NBT>は、例えば{A:{B:[{},{},{C:1b}]}}のCを指定したい時、「A.B[2].C」と書きます。
例:チャット欄/execute as @e[type=villager] store result entity @s Motion[1] double 1 run scoreboard players get @p motion
- プレイヤーのスコア『motion』を1にして実行すると、全村人がフワーッ!と浮き上がります。
- motionは『scoreboard』で作成したdummyのコマンドです。
- Motion[1]はY方向の移動ベクトルです。
6-5.『bossbar』-取得した結果をbossbarに代入
構文:チャット欄/execute store < success | result > bossbar <bossbarの名前> < value | max > run <コマンド>
- コマンドの結果をbossbarの値や最大値に代入します。
- 『scoreboard』『data』コマンドと併用して使うことが多いです。
- 下記リンクで『bossbar』と『data』コマンドを利用した使用例を載せています。
hollys-command-lecture.hatenablog.com
7.『align』-コマンドの実行座標の小数点以下を切り捨てる
構文:チャット欄/execute align < x | xy | xz | yz | xyz > run <コマンド>
- alignで指定した軸方向の座標の小数点以下を切り捨てます。
例:チャット欄/execute align xz run summon armor_stand ~ ~ ~
- 例えば(20.4,75.2,300.8)でこのコマンドを実行した時、X座標とZ座標の値だけ切り捨てられ、(20.0,75.2,300.0)の地点にアーマースタンドが召喚されます。
8.『anchored』-ローカル相対座標などで基準にする点を決める
構文:チャット欄/execute anchored < eyes | feet > run <コマンド>
- ローカル相対座標などで基準になる点を実行対象の目か足かを決めます。
- 特に指定しないとfeetとして実行されます
例:チャット欄/execute anchored < eyes | feet > run tp ^ ^ ^1
- eyesとfeetで挙動が違うので確かめてみてください。
9.『blocks』-指定範囲のブロックを比較して実行を判定する
構文:チャット欄/execute < if | unless > blocks <始点座標> <終点座標> <比較座標> < all | masked >
- 過去の『testforblocks』に近いサブコマンドです。
- 『if』と『unless』を使います。
- 指定した範囲のブロックが比較先の同じ範囲のブロックと等しいかを判定します。
- 『if blocks』は等しいならコマンドが実行され、『unless blocks』は等しくなかったらコマンドが実行されます。
- 『all』は空気ブロックを含めてすべてのブロックが等しいかを判定します。
- 『masked』は比較元の空気ブロックを除き、ブロックが等しいかを判定します。
- 『masked』は比較元のある座標に空気があり、比較先にはブロックがあっても、そのブロックは無視されます。
10.『positioned』-コマンドを実行する座標を指定
チャット欄:構文/execute positioned <座標> run <コマンド>
または
チャット欄:構文/execute positioned as <エンティティ> run <コマンド>
- コマンドの実行場所を指定できます。
- 『at』サブコマンドと異なるのが、座標で指定できることです。
- 後者の『positioned as』は『at』と同じ動作です。
11.『in』-コマンドを実行するディメンションを指定
構文:チャット欄/execute in < overworld | the_end | the_nether > run <コマンド>
- コマンドを実行するディメンションを指定します。
- オーバーワールド(通常世界)、ネザー、ジ・エンドの3つを指定できます。
例:チャット欄/execute in < overworld | the_end | the_nether > run tp ~ ~ ~
- 通常世界、ジ・エンド、ネザーをtpコマンドで行き来できるようなりました。
12.『rotated』-実行者の向いている角度を指定する
構文:チャット欄/execute rotated <y軸の回転> <x軸の回転> run <コマンド>
または
構文:チャット欄/execute rotated as <エンティティ> run <コマンド>
- 『rotated』で指定した角度を向いていると仮定してコマンドを実行します。
- 『rotated as』で指定したエンティティと同じ角度に向いていると仮定してコマンドを実行します。
- 『向いている』と仮定するだけであって、実際に向く方向は変わりません。
13.『facing』-向いている対象を指定する
構文:チャット欄/execute facing <座標> run <コマンド>
または
構文:チャット欄/execute facing entity <エンティティ> <eyes | feet> run <コマンド>
- コマンドの実行者が指定した座標・エンティティの方向へ向いていると仮定してコマンドを実行します。
- エンティティは目か足のほうを向いていると仮定しています。
- こちらも仮定しているだけで、実際に向いている方向は変わりません。
例:チャット欄/execute as @e[type=villager] at @s facing entity @p feet run tp ^ ^ ^0.1
- リピートコマブロで実行すると、村人たちがじわじわとプレイヤーの方へ近づいてきます。きもちわるい
- facingでプレイヤーの方を向いたことになり、ローカル座標を使って村人の目線の方向(=プレイヤーの方)へtpしていきます。
- 簡単に追跡ミサイルのようなのが作れるようになりました!スゴイ。