ターゲットセレクタ
ターゲットセレクタとは使用するコマンドを目的の対象に絞り込むための方法です。
変数(へんすう)
@s | self | コマンド実行者自身 |
---|---|---|
@p | player | 最も近いプレイヤー1人 |
@r | random | ランダムに選ばれたプレイヤー1人 |
@a | all players | すべてのプレイヤー |
@e | entities | すべてのエンティティ |
@s: コマンドを使った人
コマンドを実行したエンティティ自身を対象にします。
# 自分にダイヤモンドを渡す
/give @s diamond
# 自分を10ブロック上に移動させる
/tp @s ~ ~10 ~
/execute
を用いればプレイヤー以外のエンティティでも@s
を使うことができます。
@p: 最も近いプレイヤー
コマンド実行者から最も近いプレイヤーが対象です。
主にコマンドブロックや/execute
と合わせて使用します。
プレイヤー自身が使用した場合は自分自身になり@s
と同じになります。
これは自分に最も近いプレイヤーは自分であると判断されるためです。
# コマンドブロックから使うと、そのコマンドブロックから最も近いプレイヤー
/give @p diamond
# 最も近いクリーパーのところへ、そのクリーパーから最も近いプレイヤーを移動させる
/execute @e[type=creepr, c=1] ~ ~ ~ tp @p @s
@p
= @a[c=1]
= @e[type=player, c=1]
@a: すべてのプレイヤー
すべてのプレイヤーを対象にします。
# すべてのプレイヤーにダイヤモンドを与える
/give @a diamond
# すべてのプレイヤーのゲームモードをサバイバルに変更する
/gamemode @a s
@a
= @e[type=player]
@r: ランダムに選ばれたエンティティ
そのまま使うとランダムに選ばれたプレイヤー1人を対象にします。 次で説明する引数を使うことでプレイヤー以外を対象にし、複数選ぶこともできます。
# ランダムに選らばれたプレイヤー1人にダイヤモンドを与える
/give @r diamond
# ランダムに選んだゾンビ2体を自分のところに呼び寄せる
/tp @r[type=zombie, c=2] @s
@e: すべてのエンティティ
読み込み範囲内のすべてのエンティティを対象にします。 対象となるエンティティがとても多くなるので、通常は引数を加え絞り込んで使用します。 遠く離れすぎたモブは対象に入りません。
# すべてのエンティティを自分のところに呼び寄せる
/tp @e @s
# 落ちているアイテムを消す
/kill @e[type=item]
引数(ひきすう)
変数に加えることで対象をさらに細かく絞り込むことができます。
name | 名前 | |
---|---|---|
type | タイプ(エンティティの識別名) | |
family | ファミリー(エンティティの分類) | |
tag |
| |
scores |
| |
| level | レベル(経験値で上昇する) |
c | count | 上限数。近い順から。マイナスで遠い順から。 |
m | mode | ゲームモード |
| range | 中心からの距離での範囲 |
| dimension | 座標で指定する立方体の範囲 |
| roration x | エンティティの顔の向いている方向。 南を正面と考えた時の顔の上下の向き(x軸回転)。 |
| roration y | エンティティの体の向いている方向(y軸回転) |
name: 名前
名前を元にエンティティを絞り込みます。
@e[name=Steve]
: Steveという名前を持っている。@e[name=!Steve]
: Steveという名前を持っていない。
プレイヤー以外のエンティティは、名札で名前をつけることができます。(エンダードラゴンなど例外あり)
コマンドでは/summon
で呼び出す際に名前をつけることができます。
type: 種類名
エンティティの種類で絞り込みます。
指定する名前は/summon
で使うエンティティ名と同じです。
ビヘイビアーパックのidentifier
で定義されている値なので、自分のアドオンで追加したエンティティも指定できます。
@e[type=player]
: プレイヤーだけ。@a
と同じ。@e[type=!player]
: プレイヤー以外。
同じゾンビ族でもそれぞれで種類が違うのですべて別物として扱われます。 特に通常ゾンビと村人ゾンビが異なることに注意してください。
@e[type=zombie]
: ゾンビのみ。@e[type=husk]
: ハスク(砂漠ゾンビ)のみ。@e[type=drowned]
: ドラウンド(溺死ゾンビ)のみ。@e[type=zombie_villager_v2]
: 村人ゾンビのみ。
落ちているアイテムといった特殊なエンティティも選ぶことができます。
@e[type=item]
: 落ちているアイテム@e[type=armor_stand]
: 防具立て
family: 分類名
分類名で絞り込みます。
@e[family=zombie]
: ゾンビ族で絞り込む。
family
ではtype
で別扱いになるゾンビ・ハスク・ドラウンドなどを一緒に扱うことができます。
ほとんどのエンティティは複数の属性を持っています。
例えばゾンビの場合はzombie, undead, monster, mob
と4つ持っています。
undead
にするとスケルトンなども含めることができます。
monster
は敵対モブ全体です。
mob
は友好的な動物までを含みます。
各エンティティがどのようなfamily属性を持っているかは、エンティティ一覧を参考にしてください。
tag: タグ
/tag
で付けらた情報を元にエンティティを絞り込みます。
@e[tag=tagName]
: "tagName"タグを持っている@e[tag=!tagName]
: "tagName"タグを持っていない
何も指定しないと特殊な操作になります。
@e[tag=]
: タグを一切持っていない@e[tag=!]
: 少なくとも1つ以上のタグを持っている
タグの絞り込みは複数設定できます。
@e[tag=a, tag=b]
: タグ"a"と"b"を両方(すべて)持っている。(aかつb)@e[tag=a, tag=!c]
: タグ"a"を持っていて、"c"を持っていない。
scores: スコアボードの値
/scoreboard
で付けられた値を元にエンティティを絞り込みます。
これだけ範囲の記法がJava版と同じです。
@e[scores={myscore=10}]
: "myscore"の値が10。@e[scores={myscore=10..12}]
: "myscore"の値が10以上、12以下。@e[scores={myscore=5..}]
: "myscore"の値が5以上@e[scores={myscore=..15}]
: "mysocre"の値が15以下@e[scores={foo=10,bar=1..5}]
: "foo"が10で"bar"が1以上5以下。
l, lm: レベル
プレイヤーのレベルの状態で絞り込みます。
@e[l=3]
: レベル3以下。@e[lm=3]
: レベル3以上。@e[lm=3, l=3]
: レベル3のみ。
使用例: レベルを使ってアイテム交換
# コマンドブロックから実行した場合
# 最も近いプレイヤーを交換対象として、レベルが3以上ならアイテムを与える
/give @p[lm=3] diamond
# レベルが3以上なら3レベル減らす(代金の支払い)
/xp -3L @p[lm=3]
c: 上限数
選択する数を指定します。
普通に(正の数 で)使うと近い方から選ぶ。
@e[c=3]
: 近い方からエンティティ3体。@a[c=1]
: 最も近いプレイヤー。@p
と同じ。
負の数 で指定すると遠い方から選ぶ。
@a[c=-1]
: 最も遠いプレイヤーを1人。@e[c=-2, type=zombie]
ゾンビを遠い方から2体。
@r
で使用すると距離に関係なく人数分選ぶ。
@r[c=2]
: 無作為(ランダム)にプレイヤーを2人選ぶ。
使用例: 3番目に近いプレイヤーだけを選ぶ
# 近い方から3人選び対象タグをつける
/tag @a[c=3] add target
# 近い方から2人選び対象タグを取り除く
/tag @a[c=2] remove target
# 対象タグを持っている人(3人目)だけを選んでコマンドを実行する
/give @a[tag=target] diamond
# 対象タグを消す
/tag @a remove target
m: ゲームモード
プレイヤーのゲームモードで絞り込みます。
@a[m=survival]
: サバイバルモードのプレイヤー@a[m=!adventure]
: アドベンチャーモードではないプレイヤー
/gamemode
と同じように@a[m=s]
や@a[m=0]
としても表記できます。
x, y, z, dx, dy, dz: 座標
基準となる座標からの範囲で絞り込む。
x
,dx
: x軸の座標範囲y
,dy
: y軸の座標範囲z
,dz
: z軸の座標範囲
少なくともどれか1組の設定が必要。
@e[x=0, dx=4]
実行者を基準にして(~0, ~0)からx軸方向に4ブロックが範囲。 高さは実行者と同じ1ブロック。
@e[x=-2, y=0, z=-2, dx=1, dy=255, dz=1]
実行者から(~-2, ~-2)の1ブロックが範囲。高さは0~255すべて。
@e[x=-2, z=-2, dx=4, dz=6]
(~-2, ~-2)からx軸に+4ブロック、z軸に+6ブロック分が範囲。 yを省略しているので、高さは実行者と同じ1ブロック分。
@e[x=-3, z=-3, dx=6, dz=1]
@e[x=-3, z=2, dx=6, dz=1]
@e[x=-3, z=-2, dx=1, dz=4]
@e[x=2, z=-2, dx=1, dz=4]
内側を含めたくない場合は、分けて実行する。
使用例: 範囲外のプレイヤーにウィザー状態にする
「範囲内」のエンティティにタグを付け、そのタグを持っていないことを条件とすることで、「範囲外」のエンティティを対象にできます。
# isInArea(範囲内にいる)タグを初期化する(*1)
/tag @a remove isInArea
# 範囲内のプレイヤーにisInAreaタグを与える
/tag @a[x=-10, y=0, z=-10, dx=20, dy=255, dz=20] add isInArea
# isInAreaタグを持っていないプレイヤーにウィザーをかける
/effect @a[tag=!isInArea] wither 999 0 true
r, rm: 距離
実行者からの距離 で絞り込む。
r
: 半径の内側rm
: 半径の外側
下のグラフは2次元平面ですが、実際には3次元空間なので、円形ではなく球形になります。(円柱ではない)
@e[r=4]
半径4ブロックより内側。
@e[rm=2]
半径2ブロックより外側。
@e[rm=2, m=4]
「半径2ブロックより外側」かつ 「半径4ブロックより内側」。 つまり色が重なっている場所だけが対象。
@e[rm=2, m=4]
最終的にこの範囲だけが対象になる。
@e[r=2]
@e[rm=4]
「半径2ブロックより内側」または 「半径4ブロックより外側」。2回に分けて実行する。
@e[r=2, rm=4]
の場合は、どこも重ならないので誰も対象になりません。
ry, rym: 体の向き
対象エンティティがどの方向を向いているかで絞り込みます。 y軸を基準にした回転。
ry
: 最大値rym
: 最小値
z方向(南)を0とした時計回りの角度で指定します。 東方向はマイナスの角度で指定するので、北を-180として時計回りで再び北に戻る180までが範囲です。 ~-181,180~は範囲外としてエラーになります。0~360では指定できません。
@e[rym=0, ry=45]
真南から時計回りに45度まで。
@e[rym=-45, ry=0]
真南から反時計回りに45度まで。東側の指定にはマイナスを使う。
@e[rym=-45, ry=45]
南を向いているエンティティ。
@e[rym=90, ry=180]
@e[rym=-180, ry=-90]
少しでも北を向いているエンティティ。 180度をまたぐ場合は2回に分けて実行する。
@e[rym=0, ry=0]
真南を向いているエンティティのみ。
@e[rym=-180, ry=-180]
真北は-180で指定する。180では動かない。
rx, rxm: 顔の向き
対象エンティティの顔がどの角度を向いているかで絞り込みます。 x軸(上下)を基準にした回転(rotation)。
rx
: 最大値rxm
: 最小値
水平線を0とした角度となり、真上が-90度、真下が+90度です。 後ろはありません。
@e[rx=0]
水平線から上を向いてるエンティティ。
@e[rxm=-30, rx=60]
正面から少し下までを向いているエンティティ。
@e[rxm=30]
下を向いているエンティティ。
@e[rxm=0, rx=0]
完全に水平線を向いているエンティティ。