※本サイトはPRリンクを含みます

【マイクラ統合版】コマンドの条件分岐を作る方法

コマンドの条件分岐 コマンドの使い方

コマンド実行時に「〇〇だったら□□する。」「△△じゃなかったら✕✕する。」といった条件分岐を作る方法を何点か解説します。

ターゲットセレクターを使用した条件分岐

最も簡単でよく使うのがターゲットセレクターに条件を指定する方法です。

例えばコマンドの実行対象を

@a[scores={level=1..8}]

とすることによって『levelスコアが1〜8のプレイヤー』を指定することが出来ます。また条件を満たさない場合は対象としない(コマンドが実行されない)という条件分岐になります。

例)/tp @a[scores={level=1..8}] 0 64 0
・・・levelスコア1〜8のプレイヤーを座標(0,64,0)にテレポートする。

同様に、実行対象を

@s[hasitem={item=emerald}]

とすることによって『自分がエメラルドを持っていたら』という条件でコマンドを実行することが出来ます。

ターゲットセレクターで指定できる項目は座標や種別、タグやゲームモードなど様々です。

executeコマンドを使用した条件分岐

executeコマンドの構文の中から

if 〜 (もしも〜だったら)
unless 〜 (もしも〜じゃなかったら)

を使用することで条件分岐を作ることが出来ます。

/execute if blocks (x座標) (y座標) (z座標) (block種別) run 〜
/execute unless blocks (x座標) (y座標) (z座標) (block種別) run 〜

上記はifとunlessだけを入れ替えた例です。
ifの場合は「座標の位置が〇〇ブロックだったら〜を実行する」。
unlessの場合は「座標の位置が〇〇ブロックじゃなかったら〜を実行する」。
となります。

if(unless)で条件に設定できる項目は以下。
entity (指定するエンティティの有無)
block (指定座標のブロックの有無)
blocks (指定座標のブロック群の一致)
score (指定するスコアの一致、もしくは比較)

その他executeコマンドの使い方は以下の関連記事を参考にしてみてください。

コマンドブロックの条件付きチェーンを使用した条件分岐

チェーンで接続したコマンドブロックを『条件付き』に設定することで「手前のコマンドブロックが実行された場合にのみ実行する」という条件分岐になります。

なお注意点として、条件付きチェーンのコマブロが実行されなかった場合もチェーン動作は次のコマブロへ続きます。

条件付きチェーンの注意点
条件付きチェーンが実行されなくても次のチェーンは動作する

図は例として
A…信号を受けてコマンドを実行する
B…Aからのチェーン動力を受けるが実行要件を満たせずに不実行だったとする
  (仮に「セレクターに合う対象がありません」などの理由で)
C…Bが不実行だったため実行されない
D…Cの結果に関わらずチェーン動力で実行される

ひとつの分岐となるコマブロから複数のコマブロを追従させたい場合はすべてを条件付きに設定してください。

応用:複数の分岐を組みわせる

条件となるコマブロを複数連ねることで、より詳細に実行条件を絞り込むことが出来ます。

また反する条件を設定することで分岐数を増やすことも出来ます。

画像の例では

A…信号を受けてコマンドを実行する
B…Aからのチェーンで実行する
C/D/E…Bが実行されたら実行する
F…Aからのチェーンで実行する
G/H/I…Fが実行されたら実行する

というチェーン動作になるため、BとFに相反する条件のコマンドを設定すれば
・Aが実行されたとき、Bを満たす場合はCDEを実行。
・Aが実行されたとき、Fを満たす場合はGHIを実行。

という条件分岐を作ることが出来ます。

コマンドブロックから信号を取り出して行う条件分岐

コマブロの条件付きチェーンでは拾えない条件を設定したい場合、コマブロから信号を取り出してレッドストーン回路で条件分岐を作ることも可能です。

testforの例

例えばtestforコマンドは指定したエンティティの数を数えることが出来るコマンドです。

が、コマブロで実行した場合に条件付きチェーンで拾える信号は「0」=false、「0ではない(数は不明)」=trueという形になってしまいます。

この場合、testforのコマブロからコンパレーターで信号を取り出すことで、testforコマンドの結果の値を信号強度に変換して条件分岐に使用することが可能です。

この方法を使えば『対象が○○人以上いる場合に実行する』という条件分岐を作ることが可能です。

なお、コンパ―レーターで取り出す信号はコマブロの”前回の実行結果”を参照しています。そのため一度実行した結果はコマブロの動力が切れても保持され、コンパ―レーターで取り出す信号も出力され続けます。

必要に応じて出力先の信号を単発のパルス信号にするなど、用途に応じて回路はカスタムして使用してみてください。