マインクラフト コマンドで利用されるターゲットセレクタの説明と利用例

コマンド

ターゲットセレクターとは?

マインクラフトにおけるターゲットセレクターは、コマンド実行時に対象を選択するための仕組みです。
この機能を使用することで、特定のプレイヤーやエンティティ(モブやアイテムなど)をコマンドの対象として指定することができます。
つまり、単一のプレイヤーではなく、複数のプレイヤーやMOBに対して同時にコマンドの結果を付与できます。

JEには5つの指定方法があります。
それぞれ+対象に制約を与える引数について説明します。
(BE版では一部使用が異なります)

ターゲットセレクター説明
@p最寄りのプレイヤーを選択
@sコマンドを実行したエンティティを選択
@a全てのプレイヤーを選択
@e全てのエンティティ(モブ、アイテムなど)を選択
@rランダムなプレイヤーを選択

なおコマンド例は1.20.2で確認していたり、いなかったりです。

@p 最寄りのプレイヤーを選択

@p ターゲットセレクターは、コマンド実行地点から最も近いプレイヤーを選択します。
プレイヤー自身がコマンドを実施した場合、その地点が実行位置になるので、実施プレイヤーが選択されます。それだと意味が少ないので、コマンドブロックを実施したプレイヤーに対して付与するときに利用されるときが多いかな?

(例外として二人のプレイヤーが完全に重なっていた場合、後からログインした人に効果が適用されるというのがあります)

コマンド結果
give @p diamond 1最も近くにいるプレイヤーにダイヤモンド1つを与える
effect give @p minecraft:strength 60 1最も近くにいるプレイヤーに60秒間、強さ(Strength)のエフェクトを与える
tellraw @p "近くにいるプレイヤーへ:こんにちは!"最も近くにいるプレイヤーに「近くにいるプレイヤーへ:こんにちは!」というメッセージを送信する

@a,e 全てのプレイヤー, エンティティを選択

プレイヤーとエンティティの違い
プレイヤー(@p)とエンティティ(e)の違いは、マインクラフト内での存在するものの種類です。
(関係としてはプレイヤーが部分集合)
プレイヤーは実際にゲームをプレイしている人間を指します。
エンティティはプレイヤーを含めた、モブ、アイテム、プレイヤーすべての対象物を指します。

例としてはこんな感じ。
「全てのエンティティの中からクリーパーだけを選ぶ」といった処理はこのあと説明します。

ターゲットセレクターコマンド説明
@agive @a iron_sword 1全てのプレイヤーに鉄の剣1つを与える
@aeffect give @a minecraft:strength 30 2全てのプレイヤーに30秒間、強さ(Strength)のエフェクトをレベル2で与える
@ekill @e[type=minecraft:creeper]マップ上の全てのクリーパーを削除する
@eeffect give @e[type=minecraft:zombie] minecraft:speed 60 1マップ上の全てのゾンビに60秒間、速度(Speed)のエフェクトを与える

@r ランダムなプレイヤーを選択

@r ターゲットセレクターは、ランダムに1人のプレイヤーを選択します。
特定の操作をランダムなプレイヤーに対して行いたい際に利用されます。
配布ワールドでも作らない限りは多用はしない気がします。

コマンド説明
give @r diamond 1ランダムなプレイヤーにダイヤモンド1つを与える
effect give @r minecraft:regeneration 30 1ランダムなプレイヤーに30秒間、再生(Regeneration)のエフェクトを与える
ちなみにダイヤを与えたプレイヤーに、「おめでとう」と表示するのはバニラでは難しいみたい?functionやMOD導入が必要な気がします

@s コマンドを実行したエンティティを選択

@p[一番近いプレイヤー]と似ているようで似ていないコマンドです。
@sはコマンドを実施したエンティティなので、その実施者自身が対象になります。
プレイヤーがコマンドを実施した場合はそのプレイヤーが、コマンドブロックが実施した場合はコマンドブロックが対象となります。
(コマンドブロックがゲームモードを変えても、効果は適応されない)

@pより正確に自分に対してコマンドを付与できますが、giveコマンドなどでは対象者を省略して実施することもできるので本当に使われる機会は少ない気がします。

コマンド説明
give @s iron_axe 1コマンドを実行したエンティティに鉄の斧1つを与える
effect give @s minecraft:jump_boost 30 2コマンドを実行したエンティティに30秒間、ジャンプブーストのエフェクトをレベル2で与える

ターゲットセレクターの引数

お待たせしました。
面倒なターゲットセレクターの引数についてです。
ターゲットセレクターでは後ろに詳細な条件を記載することができます。
(正確には条件というよりかはプログラミングのオプション引数が一番近い気がしますが置いておきます)

つまり@eでエンティティ全体を指定したのち、
引数でより詳しく条件でフィルターをかけることができるのです。

2つ以上の引数を1つのターゲットセレクターで指定することも可能です。
@e[type=minecraft:skeleton,distance=..10]
では、距離10ブロック以内のスケルトンを対象にできます。

利用できる引数にはこんなものがあります。
これらは一例で、全ての把握はWikiをお勧めします。

引数説明
x, y, z特定の座標にいるエンティティを選択x=100, y=64, z=200
dx, dy, dz特定の範囲内にあるエンティティを選択(相対的な範囲指定)dx=5, dy=3, dz=5
distance特定の範囲内にあるエンティティを選択distance=..10
level特定のレベルのエンティティを選択level=5..10
x_rotation, y_rotation特定の向きのエンティティを選択x_rotation=0..45, y_rotation=90
name特定の名前を持つエンティティを選択name="Steve"

良く使う引数の紹介

distance 特定の距離内を対象にする

distance 引数は、特定の位置から指定した範囲内にあるエンティティを選択するために使用されます。
特定の位置はコマンドの実施地点(プレイヤーやコマンドブロック)が基準です。

distance=数字で単一の距離を指定します。
distance=距離1..距離2で距離1以上、距離2以内のエンティティを対象にできます。

また,dxやdyは詳しく説明しませんが、実行者からの差分位置にあるエンティティ等を対象にできるので、distanceに近いコマンドと言えます。

コマンド説明
execute as @a[distance=..10] run say Hi!10ブロック以内のプレイヤーに「Hi!」とメッセージを送信する
tp @e[type=minecraft:zombie,distance=10..20] ~ ~10 ~10ブロック以上、20ブロック以内のゾンビをY軸上で10ブロック上にテレポートする
effect give @p[distance=..5] minecraft:strength 30 25ブロック以内のプレイヤーに30秒間、強さ(Strength)のエフェクトをレベル2で与える

type 特定の種類を対象にする

type 引数は、特定の種類のエンティティを選択するために使用します。
指定の方法は識別子と呼べれる特殊なものを利用します。
MOB ID まで列挙するのは面倒なので別サイト様にお任せしちゃいます。

【マイクラ】全mobのID一覧とコマンドによる出現の補足
https://hikicomoron.net/minecraft_mob_id

利用例はこんな感じ。
distanceやlimitを併用することで幅が広がります。

コマンド説明
kill @e[type=minecraft:zombie]ゾンビ(minecraft:zombie)を全て削除するコマンド
effect give @e[type=minecraft:skeleton] minecraft:haste infiniteスケルトン(minecraft:skeleton)全てに採掘速度上昇を与える
(まあ上げても意味はないが)
tp @e[type=minecraft:cow,distance=..10] ~ ~10 ~10ブロック以内にいるウシ(minecraft:cow)をY軸上で10ブロック上にテレポートするコマンド
say @e[type=minecraft:creeper,limit=3]クリーパー(minecraft:creeper)を最大3体までチャットで表示するコマンド
(「クリーパー」って3回表示されるだけ)
summon minecraft:spider ~ ~ ~ {NoAI:1b}別にtype引数じゃないけど…
クモ(minecraft:spider)をNoAI(動かない)の状態で自分の位置に召喚するコマンド
最後の例であるクモの召喚では、さらに別オプションである{NoAI:1b}をいれて攻撃や移動をしないクモを召喚しています

limit 対象数を制限する

これまでは対象を絞るものでしたが、limitは対象数そのものを制限します。
@eなどで全体を選択後、数を減らすときなどに便利です。

コマンド説明
kill @e[type=minecraft:sheep,limit=2]羊(minecraft:sheep)を最大2匹までキルするコマンド
effect give @e[type=minecraft:player,limit=1] minecraft:strength 30 2プレイヤー(minecraft:player)に最大1人まで30秒間、強さ(Strength)のエフェクトをレベル2で与えるコマンド
tp @e[type=minecraft:chicken,limit=3,distance=..20] ~ ~10 ~20ブロック以内にいる鶏(minecraft:chicken)を最大3羽までY軸上で10ブロック上にテレポートするコマンド

コメント

タイトルとURLをコピーしました