この記事では、Minecraft Java Edition(バージョン1.21)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
こんにちは!
マインクラフターのなつめです。
この記事では、こんな疑問を解決します!
- ターゲットセレクターとはコマンドの対象を選ぶためのもの
- 全6種のターゲットセレクターを徹底解説+α
- 実は複雑な指示も行えるターゲットセレクター
コマンドを使う上で、ターゲットセレクターは避けて通れない要素です。
コマンドの対象を指示するものという、シンプルなものではあるのですが、「このターゲットセレクターはこういうものだ」という覚える作業がどうしても必要になります。
そのため、この記事ではターゲットセレクターの基本から応用となる使い方まで、具体例と共に解説しているので、ぜひ参考にしてくださいね。
それでは、さっそく見ていきましょう。
ターゲットセレクターとはコマンドの対象を選ぶためのもの
ターゲットセレクターとは、コマンドを使用する上で「コマンドの対象者」を選ぶために必要なものです。
ほとんどのコマンドがターゲットセレクターの入力を必要としており、それは「誰を対象にするのか」を指示しなけければならないからになります。
reloadコマンドやfunctionコマンド自身にはターゲットセレクターが必要ではないので、特殊な立ち位置のコマンドでは必要ないことが多いです。
次の項目で、どのようなターゲットセレクターがあるのかを見ていきましょう。
全6種のターゲットセレクターを徹底解説+α
ターゲットセレクターは全部で6種類あり、そこにプレイヤーIDを加えた7種類が扱えます。
ターゲットセレクターの入力部分にはプレイヤーIDを記述することができ、その場合はそのプレイヤーIDを持つプレイヤーだけが対象となります。
具体的には以下の通りです。
記述する文字列 | 意味 |
---|---|
@a | 全てのプレイヤー |
@e | 全てのエンティティ |
@p | コマンドの実行位置から最も近いプレイヤー1人 |
@n | コマンドの実行位置から最も近いエンティティ1体 |
@s | コマンドの実行者 |
@r | ランダムなプレイヤー1人 |
プレイヤーID | 記述したプレイヤーIDを持つプレイヤー |
まず初めに注意すべきは、プレイヤーとエンティティの違いです。
プレイヤーについて説明することはないでしょうが、エンティティについては軽く説明していきます。
エンティティとは、プレイヤーを含むブロックでないものです。
厳密な説明とは言えませんが、mobや投擲中のアイテム(トライデント、矢、雪玉など)、アーマースタンド、絵画などが当てはまります。
判別がつかないうちは、ブロックでなければエンティティだろうと思って概ね問題ありません。
詳しくはWikiを参照すると良いです!
それぞれのターゲットセレクタ―の使い方
ここからは上記で紹介したターゲットセレクタ―の使い方について見ていきます。
@aの使い方
以下のコマンドは、全てのプレイヤーにダイヤモンドを1つ付与するコマンドです。
/give @a minecraft:diamond 1
ターゲットセレクター部分に”@a”と入力するだけなので、難しいことはないですね。
@eの使い方
@aが全てのプレイヤーだけを対象にしていたのに対して、@eは全てのエンティティを対象とします。
そのため、以下のコマンドを実行することでプレイヤーのみならず友好mobや敵対mobも発光します。
/effect give @e minecraft:glowing 10 1 true
@pの使い方
@pは、コマンドの実行場所から最も近いプレイヤー1人を対象とするターゲットセレクターです。
この「コマンドの実行場所」というのは、コマンドを実行した方法によって判別方法が異なります。
実行方法 | 実行位置 |
---|---|
チャット欄に入力して実行 | 実行したプレイヤーの位置そのもの |
コマンドブロックに動力を与えて実行 | コマンドブロックの位置 |
functionコマンドで呼び出し (データパック内に格納されているものを呼びだす) | 初期スポーン地点付近 |
このように実行方法によって実行場所が統一されていないため、executeコマンドのatやpositionedなどを用いて、コマンドの実行位置の指示を行うのが一般的です。
さて、話が逸れてしまいましたが、コマンドの例としては以下の通りです。
/give @p minecraft:diamond 1
チャット欄に打ち込んで実行すれば、実行したプレイヤーにダイヤモンドが付与されます。
コマンドブロックの場合は動力が伝わったコマンドブロックに最も近いプレイヤーで、functionコマンドの場合は初期スポーン地点に最も近いプレイヤーとなります。
また、executeコマンドで実行位置を指示した場合には、実行方法に左右されません。
以下は座標XYZがすべて0の地点から最も近いプレイヤー1人にダイヤモンドを付与するコマンドとなっています。
/execute positioned 0 0 0 run give @p minecraft:diamond 1
@nの使い方
@nは@pの対象を、プレイヤーからエンティティに広げたものです。
そのため@aと@eの関係性に近いと言えます。
以下のコマンドを実行すれば、実行位置から最も近いエンティティ1体だけが発光します。
/effect give @n minecraft:glowing 10 1 true
@sの使い方
@sは「コマンドの実行者」を対象とするターゲットセレクターです。
この「コマンドの実行者」というのは、その言葉通り誰がコマンドを実行したのかを判別します。
ただし注意点として、コマンドブロックやデータパックに格納されているコマンドを呼び出す場合は、コマンドの実行者の指示が必要となります。
実行方法 | コマンドの実行者となるもの |
---|---|
チャット欄に入力して実行 | 実行したプレイヤーそのもの |
コマンドブロックに動力を与えて実行 | コマンドブロック |
functionコマンドで呼び出し | functionコマンドを実行した方法による |
tick.jsonで繰り返し呼び出し (データパック内に格納されているコマンドをリピートする方法) | データパック (Minecraftもしくはゲームそのものと言い換えてもよい) |
giveコマンドなどプレイヤーを確実に対象としたい場合には、executeコマンドでasを指示してあげる必要があります。
以下はシンプルなコマンドです。
/give @s diamond 1
executeコマンドを書き加えた場合は以下の通り。
全てのプレイヤーをコマンドの実行者に仮定しているため、実質的に@aを指示しているような状態になります。
/execute as @a run give @s diamond 1
@rの使い方
@rはランダムなプレイヤーを1人対象とするターゲットセレクターです。
そのため、鬼決めなどランダム性が必要な場面で有効なものとなっています。
/give @r minecraft:diamond 1
上記のコマンドは、ランダムなプレイヤー1人にダイヤモンドを付与するコマンドとなっています。
プレイヤーIDの使い方
プレイヤーIDを入力した場合は、そのプレイヤーIDを持つプレイヤーだけが対象となります。
遊ぶメンバーが決まっている場合や特定のプレイヤーにドッキリを仕掛けたいなどといった場面においては有効です。
以下は”A123″というプレイヤーIDを持つプレイヤーだけにダイヤモンドを付与するコマンドとなります。
/give A123 minecraft:diamond 1
実は複雑な指示も行えるターゲットセレクター
ターゲットセレクターの種類自体は上述した6種類のみですが、[](角括弧)を付け加えることでさらなる指示を行えます。
具体的には、”ABC”というタグを持っている@a(全てのプレイヤー)などといった指示をすることが可能です。
その場合はターゲットセレクター部分に以下のような記述をする必要があります。
@a[tag=ABC]
このように”tag=”といったようなものが複数存在し、それらについては表で見ていきましょう。
記述する文字列 | 意味 |
---|---|
x=,y=,z= dx=,dy=,dz= | x,y,zは座標位置の参照。 dx,dy,dzは、範囲指定する際に使用する。 |
distance= | コマンドの実行位置からの範囲を参照。 |
scores= | スコアボードの値を参照する。 |
tag= | タグの有無を参照する。 |
team= | チームの所属を参照する。 |
limit= | 対象となる数を指示する。 |
level= | レベルを参照する。 |
gamemode= | ゲームモードの参照。 |
name= | 名前の参照。 内部IDではない点に注意。 |
x_rotation= | 仰角・俯角の参照。 |
y_rotation= | 水平角の参照。 |
type= | エンティティの種類を選択。 |
nbt= | NBTデータの指示。 |
advancements= | 進捗の達成状況を参照。 |
predicate= | predicateの参照。 |
これらの使い方についても見ていきます。
数が多いので、上記の表で気になったものだけを見てもらえばOKです。
x=,y=,z=,dx=,dy=,dz=の使い方
x=,y=,z=,dx=,dy=,dz=は座標や座標範囲の指示に使えます。
以下のように指示した場合は、XYZが完全に10の場所にいることで対象となります。
(@aを指示しているため、座標の条件を満たした全てのプレイヤーが対象となる)
@a[x=10,y=10,z=10]
dx=,dy=,dz=も同時に指示した場合は、範囲指定となるため、XYZすべてにおいて10~15の間にいる全てのプレイヤーが対象となります。
@a[x=10,y=10,z=10,dx=5,dy=5,dz=5]
dx=,dy=,dz=を指示する際は、x=,y=,z=の値を参照したうえで範囲を決めます。
この時、マイナスの値を指示すれば、マイナス方向に進んだ際の範囲を検知するようになります。
要はx,y,zを起点とし、どれだけの範囲を対象とするのかをdx,dy,dzで決めるわけですね。
x=,y=,z=を指示せずdx=,dy=,dz=を指示している場合には、コマンドの実行位置を参照します。
distance=の使い方
distance=はコマンドの実行位置からの距離を判定したうえで、対象と決めます。
例えば
@a[distance=..10]
とあった場合には、コマンドの実行位置から10マス以内のプレイヤーがすべて対象となります。
ドットを2つ並べたもの(..)を指示することで範囲指定になり、先頭の値を記述しないことで「○○以内」といった指示が可能です。
末尾の値を記述せず先頭の値を記述した場合は、「○○以上」となります。
特定の範囲を指示したい場合は、以下の通りです。
@a[distance=10..50]
scores=の使い方
scores=はスコアボードの値を指示します。
そのため、プレイヤーに対してのみ有効な項目ですね。
@a[scores={XXXX=1..}]
上記のように記述した場合は、XXXXというスコアボードの値が1以上を記録しているすべてのプレイヤーが対象となります。
{}で囲む必要がありますので、忘れないようにしましょう。
tag=の使い方
tag=は指示したタグを持っているエンティティを対象とするようにします。
@a[tag=ABC]
上記はABCというタグを持っているプレイヤーを対象とする場合ですね。
また、!を頭に加えることで、指示したタグを持っていないエンティティに絞ることが可能です。
@a[tag=!ABC]
!を使用できる場面はtag=に限りませんので、様々な場面で「○○でない××」という指示を行えます。
team=の使い方
team=はその言葉の通り、所属してるチームを参照します。
そのため、teamコマンドを組み合わせることが前提です。
@a[team=DEF]
上記ならばチーム「DEF」に所属している全てのプレイヤーを対象にできます。
@p[team=DEF]
この場合は、チーム「DEF」に所属している中で最もコマンドの実行位置から近いプレイヤー1人だけが対象になるわけですね。
limit=の使い方
limit=は対象となるエンティティ(プレイヤー)の数を指定します。
@aや@eなどの全体に及ぶものの場合は、指定した値のプレイヤーだけを対象とします。
その一方で@pや@rのような、もともと1人だけを対象とするターゲットセレクターの場合には、指示した値の数まで上限を増やします。
@pの場合は、「コマンドの実行位置から近い3人を対象とする」といった具合ですね。
@p[limit=3]
@a[limit=3]
level=の使い方
level=ではレベルの値を参照して、判別します。
以下の場合は、レベル11のプレイヤーだけを対象にするわけですね。
@a[level=11]
この項目でも、scores=の時に行った範囲指定を行えますので、一定のレベルの間だけ対象にするといったことが可能となっています。
gamemode=の使い方
gamemode=ではゲームモードを参照して、対象を決めます。
つまり「アドベンチャーモードのプレイヤーだけ」や「アドベンチャーモードでないプレイヤー」といった指示が可能です。
@a[gamemode=adventure]
@a[gamemode=!adventure]
name=の使い方
name=では名前を指示します。
プレイヤーの場合はプレイヤーIDで問題ありませんが、mobなどを指示したい場合にはCustoNameを指示する必要があります。
@a[name=A123]
@e[name="ブタさん"]
x_rotation=の使い方
x=rotationを指示することで、仰角・俯角を参照できます。
要は、首の縦の傾き具合です。
特定の値だけを指示するのは検知が難しいので、範囲指定することが一般的になります。
@a[x_rotation=0..90]
y_rotation=の使い方
x_rotation=に対して、y_rotationは水平角を参照します。
つまり、東西南北などの方向を絞り込むことが可能です。
@a[y_rotation=0..90]
type=の使い方
type=はエンティティの種類を絞り込むのに使用します。
「防具立てだけ」や「プレイヤー以外」といったことが行えるので、よく使う項目ですね。
@e[type=minecraft:armor_stand]
@e[type=!minecraft:player]
nbt=の使い方
nbt=ではNBTタグを指示することで、その内容を満たしているエンティティを対象にできます。
例えば、地面に接している場合に1bとなるOnGroundを指示した場合は、以下の通りです。
@a[nbt={OnGround:1b}]
advancements=の使い方
進捗の達成状況に応じて絞り込みを行えるのが、advancements=です。
以下の指示の場合は、
@a[advancements={minecraft:story/mine_diamond=true}]
「ダイヤモンド!」の進捗を達成している全てのプレイヤーを対象とします。
今までの項目と違い、true、falseの選択を行えるのが大きな違いですね。
また、進捗の記述が難しいという場合には、advacementコマンドで候補を出現させてコピペする方法をおすすめします。
predicate=の使い方
predicate=は、データパック内にpredicateとしてjsonファイルを作成し、それを指示することで使用することが出来ます。
predicateとは簡単に言えば、様々な情報をあらかじめまとめておくためのものです。
つまり、複雑な条件を前もってpredicateでまとめておき、それをpredicate=で呼び出すイメージを抱けば問題ありません。
@e[predicate=sample:test]
predicateについてはこちら!
まとめ
というわけで、今回のまとめです。
- ターゲットセレクターはコマンドの対象を選択するのに必要。
- 全部で6種類のターゲットセレクターがあり、ターゲットセレクターを記述する部分にはプレイヤーIDを入力することも出来る。
- ただターゲットセレクターを指示するだけでなく、[]内に様々な条件を記述することが出来る。
この記事は以上になります。
2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!