コマンドを実行する対象、ターゲットセレクター(java1.20.1)
コマンドでよく見かける@sや@eなど。「何を表しているかわからない」「違いがわからない」と困ったことはありませんか?
これらはコマンドを実行する対象を表しています。普通にプレイヤーIDを書くよりもこれらを使ったほうが楽なときがあります。
そこで、今回はターゲットセレクターについて紹介します。違いを知っておくと便利なのでしっかりと理解して使い分けれるようになりましょう!
対象者の表し方は6種類
対象者の表し方は以下の6種類です。
- プレイヤーID
- @s
- @p
- @a
- @e
- @r
プレイヤーID
対象者が自分以外の特定の1人だった場合はそのプレイヤーのIDをそのまま書くのがいいでしょう。
@s
@sは自分自身、実行者1人という意味です。主にチャットでコマンドを打つ場合に使います。そのチャットコマンドを打っている自分に向けてコマンドが実行されます。
注意が必要なのがコマンドブロックに書くときは不向きだということです。コマンドブロックでの実行者はコマンドブロック自身になってしまいます。だから、下の画像のようにリンゴを与えるコマンドを書いて実行しても「プレイヤーが見つかりませんでした」といわれ、誰にもリンゴが与えらず終了します。
ただし、下の画像の@sは例外でコマンドブロックに打ち込んで実行すると、しっかりリンゴをもらえます。
この場合、「execute」で実行者を先に宣言しているのでその実行者自身という意味になり、@sに省略できたということです。
@p
@pは最も近いプレイヤー1人という意味です。コマンドブロックに打てばそのコマンドブロックに一番近い場所にいるプレイヤー1人が対象になります。チャットに打てばチャットコマンドの実行者に近い人、実行者に一番近いのは実行者自身なのでチャットの場合、@sと同じく自分自身が対象となります。
@a
@aは全てのプレイヤーという意味です。ワールド内の全員がどこにいても対象なので関係ないプレイヤーまで巻き込まないようにしましょう。プレイヤーが1人でも問題なく実行されます。
@e
@eは全てのエンティティという意味です。エンティティというのはプレイヤー、モブ、落ちているアイテム、ボートや防具立てなどのブロック以外のことを指す言葉です。@aよりも対象とする範囲が広いので気をつけて使いましょう。
@r
@rはランダムなプレイヤー1人という意味です。あくまでもプレイヤーの中から選ばれるのでモブなどがいくらいても関係ありません。プレイヤーが1人の場合はその人が対象になります。
対象を細かく指定するには?
プレイヤーIDを除く5種類にはそのすぐあとに大きいかっこ[ ]をつけてその中にセレクター引数を書くことで細かく対象を指定することができます。セレクター引数にはたくさんの種類があります。それは別のところで紹介します。