コマンド構文解説-ちょっと難しいけど無限の可能性!/execute-
投稿日:2021/07/17
最終更新日:2021/07/17
どうも、ユキミ大福です。
今回はMinecraft統合版のコマンドの内の1つである『 /execute 』について解説をしていきます。
ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。
今回のコマンドは?
今回ご紹介するコマンドは『 /execute (エクゼキュート)』です。このコマンドは個人的に、Minecraft統合版でのゲーム開発においては三種の神器ならぬ、三種の神コマンドだと思っています(残り2つは /scoreboard (スコアボード)と /tag (タグ) )。
このコマンドは、エンティティに特定のコマンドを実行させることができるというものです。まずは構文を見てみましょう。
/execute のコマンド構文
/execute <セレクター> <基準座標(int/floot)> <コマンド>
/execute <セレクター> <基準座標(int/floot)> detect <検知座標(int/floot)> <検知ブロックID> <検知データ値(int)> <コマンド>
- <セレクター>:必須
ターゲットセレクター。ゲーマータグを直接入力可。 - <基準座標(int/floot)>:必須
実行させるコマンドの基準座標のXYZをint型かfloot型で指定するか相対座標を入力する。相対座標を入力する場合、<セレクター>で対象としたエンティティが存在する座標からの距離を指定する。 - <検知座標(int/floot)>:detectモードの場合は必須
detectモードで検知するブロックのあるXYZ座標をint型かfloot型で指定するか相対座標を入力する。相対座標を入力する場合、<基準座標(int/floot)>で指定した座標からの距離を指定する。 - <検知ブロックID>:detectモードの場合は必須
detectモードで検知するブロックのブロックID。 - <検知データ値(int)>:detectモードの場合は必須
detectモードで検知するブロックのデータ値。データ値が特に存在しないブロックを検知する場合はこの後に0を入力する必要がある。 - <コマンド>:必須
実行させたいコマンドを入力する。構文は各コマンドの構文に従う。ただし、先頭の「/」は外さなければならない。/execute をさらに繋げることもできる。
/execute の失敗条件
- 構文が適切でない(スペルミス等)。
- detectモードでのブロックの検知に失敗している場合。
- 入力した<コマンド>が失敗・エラーとなっている場合。
- 指定した座標が読み込まれているチャンク内に存在していない。
- 指定したセレクターの条件に合う対象が存在しないか、読み込まれているチャンク内に存在していない。
/execute の成功条件
- 上記の失敗条件を満たしていない場合。
- 実行結果は実行させたコマンドのものに従う。
/execute の実行例
例1)
コマンド:/execute @p[x=-220,y=3,z=120] ~ ~ ~ give @s diamond 1
実行結果:
- /execute の実行者:チャット欄で実行したプレイヤーまたはコマンドブロック
- /give の実行者:座標( -220, 3, 120 )に1番近いプレイヤー1人
- /give の基準座標:座標( -220, 3, 120 )に1番近いプレイヤーが居る座標
- /give の対象:座標( -220, 3, 120 )に1番近いプレイヤー自身
- 実行による影響:座標( -220, 3, 120 )に1番近いプレイヤーにダイヤモンドを1つ付与する。
例2)
コマンド:/execute @p[x=-220,y=3,z=120] ~ ~ ~ give @p[c=2] diamond 1
実行結果:
- /execute の実行者:チャット欄で実行したプレイヤーまたはコマンドブロック
- /give の実行者:座標( -220, 3, 120 )に1番近いプレイヤー1人
- /give の基準座標:座標( -220, 3, 120 )に1番近いプレイヤーが居る座標
- /give の対象:座標( -220, 3, 120 )に1番近いプレイヤーと2番目に近いプレイヤー
- 実行による影響:座標( -220, 3, 120 )に1番近いプレイヤーと2番目に近いプレイヤーにダイヤモンドを1つずつ付与する。
例3)
コマンド:/execute @e[type=armor_stand,dx=-5,dy=0,dz=-5] ~ ~ ~ setblock ~ ~2 ~ gold_block 0
実行結果:
- /execute の実行者:チャット欄で実行したプレイヤーまたはコマンドブロック
- /setblock の実行者:実行座標と、そこから「X軸方向に-5・Z軸方向に-5」進んだ座標を対角とする範囲に存在する、防具立て(armor_stand)全て
- /setblock の基準座標:実行座標と、そこから「X軸方向に-5・Z軸方向に-5」進んだ座標を対角とする範囲に存在する、防具立て(armor_stand)がそれぞれ存在する座標
- 実行による影響:基準座標から「Y軸方向に2」進んだ座標に、金ブロック(gold_block 0)を設置する。
例4)
コマンド:/execute @a[scores={pNum=1..8,PSnow=1..100}] ~ ~ ~ particle minecraft:knockback_roar_particle ~ ~ ~
実行結果:
- /execute の実行者:チャット欄で実行したプレイヤーまたはコマンドブロック
- /particle の実行者:objective「pNum」が1~8かつ、objective「PSnow」が1~100となる全てのプレイヤー
- /particle の基準座標:チャット欄で実行したプレイヤーまたはコマンドブロックが存在する座標
- 実行による影響:objective「pNum」が1~8かつ、objective「PSnow」が1~100となる全てのプレイヤーから「minecraft:knockback_roar_particle」のパーティクルが出る。
例5)
コマンド:/execute PolarisA1200 ~ ~ ~ effect @p night_vision 60 0 true
実行結果:
- /execute の実行者:チャット欄で実行したプレイヤーまたはコマンドブロック
- /effect の実行者:PolarisA1200というゲーマータグのプレイヤー
- /effect の基準座標:PolarisA1200が存在する座標
- /effect の対象:PolarisA1200に1番近いプレイヤー1人
- 実行による影響:PolarisA1200に1番近いプレイヤー1人に、効果レベル1の暗視を60秒間、パーティクルを非表示にして与える。
/execute の詳細解説
/execute の概要
/execute は指定したエンティティに指定したコマンドを実行させるコマンドです。言い換えますと、指定したコマンドを指定したエンティティが実行した扱いにするコマンドです。概念や理屈の説明がやや難しいので、いくつか例を詳しく見てみましょう。
1. 実行例の例5
このパターンでは「/effect」を実行させるエンティティをゲーマータグで直接指定しています。今回は「PolarisA1200」(わたくしのサブ垢)を指定しています。
/effect 部分だけを抽出すると「/effect @p night_vision 60 0 true」となりますが、これらのコマンドをわたくし(YukimiD1999)が実行するとどうなるでしょうか?
- /effect @p night_vision 60 0 true を実行する:
わたくし(YukimiD1999)に「効果レベル0、持続時間60秒、パーティクル非表示」の暗視を付与する - /execute PolarisA1200 ~ ~ ~ effect @p night_vision 60 0 true を実行する:
わたくしのサブ垢(PolarisA1200)に「効果レベル0、持続時間60秒、パーティクル非表示」の暗視を付与する
実行結果はこんな感じになります。本来「/effect @p~」と記述して実行しているため、/effect の「@p」の対象は本来、基準座標(実行者が居る座標)から1番近い人=YukimiD1999となるはずです。
しかし、/execute で /effect を実行している方は、PolarisA1200が /effect を実行していることになっているため「/effect @p~」の「@p」の対象がPolarisA1200に変わっています。
2. 実行例の例3
このパターンでは「/setblock」を実行させるエンティティをターゲットセレクターと引数で指定しています。今回は以下の条件に合うエンティティを指定しています。
- エンティティの種類は「防具立て(armor_stand)」
- 基準座標と、そこから「X軸方向に-5・Z軸方向に-5」進んだ座標を対角とする範囲に存在するエンティティ
この条件に合うエンティティに「/setblock ~ ~2 ~ gold_block 0」を実行させています。例5とは異なり、条件に合うエンティティ全てにこのコマンドを実行させている関係上「/setblock ~ ~2 ~ gold_block 0」を実行するエンティティは、1体とは限りません。
3. 実行例の例4
このパターンでは「/particle」を実行させるエンティティをターゲットセレクターと引数で指定しています。今回は以下の条件に合うプレイヤーを指定しています。
- objective「pNum」が1~8のプレイヤー
- objective「PSnow」が1~100のプレイヤー
例3と同様に、この条件に合うプレイヤー全てに「/particle minecraft:knockback_roar_particle ~ ~ ~」を実行させています。/particle で用いる基準座標が、/execute で取得したプレイヤーの座標となっているのがポイントです。
/execute の実行結果等々
コマンドの実行結果は「コマンドの成功・失敗・エラー」のいずれかになります。
失敗した場合には「コマンドの実行に失敗した」または「セレクターに合う対象が居ない」と返って来ます。
コマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」と「コマンドが何人に対して成功したか(int)」の2点です。コマンドが成功した人数については、RSコンパレーターを用いてRS動力の形で取り出せます。
/execute の強み・使い道
ゲーム制作においては、無限に色々なことに応用できます。コマンドに必要な座標を動的に取得したり、特定のエンティティに近い人にコマンドを実行させたりできますし、/scoreboard を用いた得点計算の際にも役立ちます。本当に色々なことができます。ここでは全然書き切れない程応用例があるため、コマンド解説応用編にて色々と用いてみたいと思います。
また、単純に基準座標を変更するのにも使えます。詳しくは ↓ の記事をご覧下さい。
/execute の弱み・弱点
このコマンドを用いれば、同時に何百何千ものコマンドを処理させることも可能です。そのため、マイクラ側が処理落ちする場合も考えられます。組み合わせによっては甚大な影響を及ぼす場合もありますので「実行対象」「実行対象数」「実行コマンド内容」の3点には注意しましょう。
今回のまとめ
- 『 /execute 』は指定したエンティティに指定したコマンドを実行させるコマンド!
関連記事
- コマンド構文解説-霧を操る…?/fog-
- コマンド構文解説-エンティティにライド・オン!/ride-
- コマンド構文解説-モブがアクションを起こす!?/event, /mobevent-
- コマンド構文解説-あのモブのあのモーションを!?/playanimation-
- コマンド構文解説-何が起こるんだ!?PART1!/connect ( /wsserver ), /help ( /? ), /kick
- コマンド構文解説-何が起こるんだ!?PART2!/list, /locate, /schedule-
- コマンド構文解説-コマンドに革命を起こす…!?/function, /reload-
当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。
お気軽にコメント欄までどうぞ!
↓良ければポチッとお願いします。