メインコンテンツまでスキップ

ターゲットセレクタ

Scenamatica ターゲットセレクタについて説明しています。


概要

Scenamatica ターゲットセレクタは, エンティティやプレイヤを指定するための簡単な構文の記法です。 Minecraft のターゲットセレクタ を拡張したもので, Scenamatica による独自エンジンで解釈されます。

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

Minecraft ターゲットセレクタは, コマンドの実行者が, その対象となるエンティティ・プレイヤを選択する際に, より複雑な条件を指定するために使用されます。

アットマーク(@)のあとに母集団を指定し, その後に細かな条件を 角括弧([]) で括って指定します。

例:

@e[type=minecraft:cow,distance=..10] ~ ~ ~
@a[tag=foo] Hello, world!

これが必要な理由

通常の Minecraft ターゲットセレクタを用いたエンティティの参照は, 通常 Bukkit API を用いてアクセスします。 しかし, Bukkit API は削除されたエンティティや, ワールドでロードされていないエンティティへのアクセスを提供しておらず, Scenamatica の一部のアクションやコンテキストエンティティ での使用時に不都合が生じます。

そのために, Scenamatica は独自のエンティティ参照システムを導入してこれを解決するとともに, 一部の機能を拡張することによって より柔軟なエンティティの指定を可能にしています。

基本的な構文

通常の Minecraft ターゲットセレクタと同様に, @母集団の種類[引数] で指定します。
また, @母集団の種類 および [引数] は省略可能です。

引数は キー=値 の KV 形式で指定します。 詳しくは次章:セレクタの引数を参照してください。

ヒント

各メタ文字間は任意の空白文字を含められます。 空白文字に該当する文字は, 半角スペースまたは \t (タブ文字)です。

母集団の種類

母集団には以下のいづれかを指定します。

  • @e : すべてのエンティティ
  • @a : すべてのプレイヤ
  • @p : (主役から)最も近いプレイヤ
  • @r : ランダムなプレイヤ
  • @s : アクションの主役となるプレイヤ
備考

アクションの主役では, プレイヤに関するアクションにおいては, そのプレイヤを指します。
ほかのアクションにおいても, その主役を指す場合があります。 それらにおける主役については, 各アクションのドキュメントを参照してください。

引数の構文

セレクタの引数は, [キー1=値1, キー2=値2...] の形式で指定し, それぞれを , で区切ります。
それぞれメタ文字以外の任意の文字列を指定できます。

母集団の種類を省略した場合は, [ および ] を省略できます。

重複したキーを持つ値について

同じ階層に重複したキーを持つ引数の値は, 暗黙的にそのキーのリスト値の要素として扱われます。

これにより, @e[tag=foo,tag=bar] というセレクタは, @e[tag={foo,bar}] と同じ意味になります。 これは AND 検索(すべての条件を満たすこと)として解釈されます。

文字列値

文字列は, 任意の文字の並びです。基本的には " で囲んで表現できます。
省略した場合は, メタ文字以外の任意の文字列を指定できます。 " 自体を含めたい場合は, \" とエスケープします。

あいまい文字列

あいまい検索を行うために, 対象の文字列を正規表現で指定でき, これらの文字列を「あいまい文字列」と呼びます。

正規表現で指定する場合はマップで指定し, regex というキーを指定します。

例:

[foo={regex="bar.*"}]

上記の例は, foo の値が bar で始まる文字列を指定します。

数値

数値は任意の整数, 小数, 指数で表現できます。

例:

[foo=1]
[foo=1.0]
[foo=1e3]

範囲値

あいまい検索を行うために, 対象の数値を範囲で指定できます。

範囲で指定する場合は, 最小値と最大値を .. で連結して指定します。

また 主キー_min および 主キー_max という形式でも指定できますし,
さらに 主キー={min=最小値,max=最大値} という形式も有効です。
これらも最小値および最大値どちらかの省略が可能です。

例(fooの値について):

  • [foo=最小値..] : 最小値以上の数値
  • [foo=..最大値] : 最大値以下の数値
  • [foo=最小値..最大値] : 最小値以上, 最大値以下の数値
  • [foo_min=最小値,foo_max=最大値] : 最小値以上, 最大値以下の数値
  • [foo={min=最小値,max=最大値}] : 最小値以上, 最大値以下の数値

真偽値

真偽値は, true または false で表現します。
さらに, YAML のように on または off, yes または no でも表現できます。

例:

[foo=true]
[foo=on]
[foo=yes]

[foo=false]
[foo=off]
[foo=no]

リスト

リストは, 各要素は , で区切り, 要素全体を { および } で囲んで表現します。
要素には任意の値を指定できます。

重複したキーを持つ値について

同じ階層に重複したキーを持つ引数の値は, 暗黙的にそのキーのリスト値の要素として扱われます。

これにより, @e[tag=foo,tag=bar] というセレクタは, @e[tag={foo,bar}] と同じ意味になります。 これは AND 検索(すべての条件を満たすこと)として解釈されます。

例:

[foo={bar,baz}]
[foo={1,2,3}]
[foo=1, foo=2, foo=3]

マップ

マップは, リストと同様に要素全体を { および } で囲んで表現します。 キーと値は = で区切り, 各要素は , で区切ります。
値には上記の任意の値を指定できます。

例:

[foo={bar=baz}]
[foo={1=2,3=4}]

値の否定

以下のように ! を値の先頭に付けると, その値を否定します。

[foo=!bar]
[foo=!1..5]
[foo={!bar}]

メタ文字の一覧

メタ文字は, セレクタの構文を構成する文字です。以下の文字はメタ文字として予約されているため使用できません。
使用する必要がある場合は文字列全体を " で囲うか, " についてはさらに \ でエスケープしてください。

有効な引数の一覧

advancements

  • 特別:この引数は, 母集団にプレイヤを指定した場合のみ有効です。
キー説明
advancementsMap<String, Boolean | Map<String, Boolean>>エンティティの進捗です。

進捗は次の2つの形式で指定できます。

  • advancements={<名前空間付きキー>=<進捗達成の真偽値>}
    プレイヤが指定した進捗を達成しているかどうかを指定します。
  • advancements={<名前空間付きキー>={<達成条件>=<真偽値>}} プレイヤが, 指定した進捗の, 指定した達成条件を満たしているかどうかを指定します。

distance(r)

エンティティとの距離を指定します。

  • 特別:この引数は, distancer の両方で指定できます。
  • 特別:この引数の子は, マップに囲まれている必要はありません。
    例として, @e[distance={dx=0,y=10,z=0}]@e[dx=0,dy=0,dz=10] は同じ意味になります。
  • 特別:この引数は, 範囲値 を直接指定できます。
    例として, @e[distance=..10]@e[distance={max=10}] は同じ意味になります。
キー説明
distance倍精度浮動小数点数エンティティとの距離です。
dx倍精度浮動小数点数X 軸方向の距離です。
dy倍精度浮動小数点数Y 軸方向の距離です。
dz倍精度浮動小数点数Z 軸方向の距離です。

gamemode (m)

プレイヤのゲームモードを指定します。

  • 特別:この引数は, gamemodem の両方で指定できます。
  • 特別:この引数は, 母集団にプレイヤを指定した場合のみ有効です。
キー説明
gamemodeGameMode |[object Object]プレイヤのゲームモードです。

level(l)

エンティティのレベルを指定します。

  • 特別:この引数は, levell の両方で指定できます。
  • 特別:この引数は, 母集団にプレイヤを指定した場合のみ有効です。
キー説明
level整数値 (32bit)エンティティのレベルです。

location(loc)

エンティティの位置を指定します。

  • 特別:この引数は, locationloc の両方で指定できます。
  • 特別:この引数の子は, マップに囲まれている必要はありません。
    例として, @e[loc={x=0,y=0,z=0}]@e[x=0,y=0,z=0] は同じ意味になります。
キー説明
x倍精度浮動小数点数X 座標です。
y倍精度浮動小数点数Y 座標です。
z倍精度浮動小数点数Z 座標です。
yaw | y_rotation | ry単精度浮動小数点数Y 軸回転です。
pitch | x_rotation | rx単精度浮動小数点数X 軸回転です。
worldNamespacedKeyワールドです。

指定例

[location={x=0,y=0,z=0,yaw=0,pitch=0,world=minecraft:overworld}]
[loc={x=0,y=0,z=0,yaw=0,pitch=0,world=minecraft:overworld}]

[x=1..5,y=1..5,z=1..5,yaw=0..,pitch=..0,world=minecraft:overworld]

[x={min=1,max=5},y={min=1,max=5},z={min=1,max=5},yaw={min=0},pitch={max=0},world=minecraft:overworld]

name

エンティティの名前を指定します。

キー説明
name文字列エンティティの名前です。

指定例

[name=foo]
[name={name=foo}]
[name={regex="foo.*"}]

scores

エンティティのスコアを指定します。

キー説明
scoresMap<String, RangedNumber>エンティティのスコアです。

tag(tags)

エンティティのタグを指定します。

  • 特別:この引数は, tagtags の両方で指定できます。
キー説明
tag[object Object] | [object Object][]エンティティのタグです。

team

エンティティのチームを指定します。

キー説明
team文字列エンティティのチームです。
ヒント

空文字列を指定すると, チームに所属していないエンティティのみを選択します。
これも反転して使用できます。

例:

[team=]
[team=!]

type

エンティティの種類を指定します。

キー説明
typeEntityTypeエンティティの種類です。

セレクタのバッカス・ナウア記法

この構文をより機械的に理解するために, 拡張バッカス・ナウア記法で示します。

<selector> ::= <selector-type> | <selector-type> "[" <selector-arguments> "]"
| <selector-arguments> | "[" <selector-arguments> "]"
<selector-type> ::='@e' | '@a' | '@p' | '@r' | '@s'

<selector-arguments> ::= [<selector-argument> ("," <selector-argument>)*]
<selector-argument> ::= <argument-key> "=" "!"? <argument-value>

<argument-key> ::= <string>
<argument-value> ::= <string> | <number> | <ranged-number> | <boolean> | <list> | <map> | <null>

<ranged-number> ::= <number> | <number> ".." | <number> ".." <number> | ".." <number>
<boolean> ::= "true" | "false" | "on" | "off" | "yes" | "no"
<list> ::= "{" [<argument-value> ("," <argument-value>)*] "}"
<map> ::= "[" [<selector-argument> ("," <selector-argument>)*] "]"
<char> ::= any non metacharacter | "\" metacharacter
<string> ::= '"' <char>* '"' | <char>+
<number> ::= ('+' | '-')? ((<any-digit>)+ | (<any-digit>)+ '.' (<any-digit>)+)
<null> ::= null

<meta-char> ::= '"' | "[" | "]" | "=" | "!" | "," | "{" | "}"