MinecraftJE1.13のコマンド基礎知識(セレクタ編)

※Snapshot17w45b時の情報です。今後変更が加わる可能性もあります。また、一部誤字等誤りがある可能性もあります。ご了承ください。

どうも皆さん。本日2記事目を書いたクマです。

コマンドを使う上で必要不可欠なセレクタ。セレクタは(体感)9割のコマンドに含まれています。

そんなセレクタも、MCJE1.13で仕様変更となりました。

ここでは、1.13からのセレクタの知識について説明させていただきます。


〈セレクタの何が変わったの?〉

セレクタ自体の書き方が変わったわけではなく、1.13で変わったものは、セレクタの引数です。

一部の引数の名称が変わったり、値の設定方法が変わったり、新しい引数が追加されたり、etc… といった具合です。

この記事では、1.12.2以前と比較しつつ引数の説明をしていきたいと思います。


〈セレクタの基礎知識〉

  • セレクタとは、プレイヤー名やUUIDの代わりに、条件を満たす一体あるいはそれ以上のエンティティを指定するもの。
  • セレクタの形は、<ターゲットセレクタ>[引数]である。
  • ターゲットセレクタは@○といった形をしている。文字ごとの意味は次の通り。
    • @p:最も近くのプレイヤーを指定する。
    • @a:全てのプレイヤーを指定する。
    • @r:ランダムなプレイヤーを指定する。※プレイヤー以外が指定できなくなった模様です。@eとsort=randomを使いましょう!
    • @e:全てのエンティティを指定する。
    • @s:コマンドの実行者を指定する。
  • @pなどで最も近く(遠く)の数体を指定した場合、
    • 「数体」を決める→それらが条件を満たすか判定する ではなく、
    • 条件を満たすか判定する→条件を満たす物の中から「数体」を決める である。

〈引数の基礎知識〉

  • 引数は、「[  ]」内にそれぞれをカンマで区切って「<名称>=<値>」の形式で書く(NBTタグのように間はコロンではなくイコール)。この時「その値を満たすエンティティ」が対象になる。
  • 値の前に「!」(エクスクラメーションマーク)を付けることで「その値を満たさないエンティティ」を対象に出来る引数もある。
  • 無効な値を設定した場合、その部分がエラーになる
  • 最大値・最小値を指定出来る引数の値の指定方法は次の通り。(この記事ではこの指定方法の部分は<範囲設定:◯◯>(◯◯は数値の対応した型)のように書く。)
    • aちょうどのみを指定する場合:<引数>=a
    • a以上を指定する場合:<引数>=a..
    • b以下を指定する場合:<引数>=..b
    • a以上b以下を指定する場合:<引数>=a..b
  • 同名の引数を複数指定することも可能。
    • 例えば「type=!player,type=!villager」 であれば、プレイヤーと村人を除いたエンティティが対象になる。
    • 「type=player,type=!player」のように、相反する事象を指定した場合エラーにはならないが何も対象にならない。

〈引数リスト〉

1.12.2以前 1.13以降 ざっくりとした説明
 m  gamemode  ゲームモードを指定する。
 c  limit  対象になるエンティティの数を指定する。
 lm,l  level  経験値レベルを指定する。
 rm,r  distance  対象になるエンティティの範囲を指定する。
 rx(ry),rxm(rym)  x(y)_rotation  エンティティの向いている方向を指定する。
 x,y,z  x,y,z  エンティティの座標を指定する。
 dx,dy,dz  dx,dy,dz  座標の範囲を指定する。
 score  scores  スコアボードの値を指定する。
 type  type  エンティティの種類を指定する。
 tag  tag  エンティティのタグを指定する。
 (無し)  sort  エンティティ検索方法を指定する。
 (無し)  nbt  エンティティのNBTタグを指定する。
 (無し)  advancements  進捗を指定する。

〈引数詳細〉

・gamemode(旧:m)

gamemode=<survival | creative | adventure | spectator>

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

1.12.2以前のように、「0/1/2/3」の数値「s/c/a/sp」の略称で指定することは出来なくなりました

・limit(旧:c) ※「!」使用不可

limit=<数値(正の整数)>

対象になるエンティティの最大数を指定します。

負の数を指定するとエラーになります。1.12.2以前のように遠くから検索したいときにはsort引数(後述)を使いましょう。

・level(旧:lm,l) ※「!」使用不可

level=<範囲指定:正の整数>

対象になるエンティティの経験値レベルを指定します。

1.12.2までの「lm=a,l=b」と1.13からの「level=a..b」は同じ意味です。

・distance(旧:rm,r) ※「!」使用不可

distance=<範囲指定:正の整数・小数>

対象になるエンティティの範囲をコマンド実行点から半径で指定します。

1.12.2までの「rm=a,r=b」と1.13からの「distance=a..b」は同じ意味です。

・x(y)_rotation(旧:rx(ry),rxm(rym)) ※「!」使用不可

x(y)_rotation=<範囲指定:整数・小数>

対象になるエンティティの向いている方向を指定します。

1.12.2までの「rxm=a,rx=b」と1.13からの「x_rotation=a..b」、

1.12.2までの「rym=a,ry=b」と1.13からの「y_rotation=a..b」は同じ意味です。

※注意※

17w45bにて、x(y)_rotationをチャット欄で入力時、一瞬でも無効な値を指定した場合クラッシュするバグがあります。

コピペで入力したり、値を先に指定してからx(y)_rotationを打ち込む、などの対策で回避することができます。

・x,y,z,dx,dy,dz ※「!」使用不可

<x | y | z | dx | dy | dz>=<整数・小数>

x,y,zで座標、dx,dy,dzでx,y,zの座標からの範囲を指定します。

1.12.2までとは異なり、整数だけでなく小数も指定できるようになりました。

これに伴い、1.12.2ではx,zに「x(z)=0」と書くと「x(z)=0.5」の動作をしていましたが、1.13からはyと同様に「x(z)=0.0」と同じ動作をするようになりました。

・scores(旧score) ※「!」使用不可

scores={<オブジェクト名>=<範囲指定:整数>[,<オブジェクト名>=<範囲指定:整数>][...]}

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

1.12.2まではオブジェクト名毎、最大値最小値毎に一つの引数でしたが、全て一つの引数になりました。

例えば1.12.2での「score_A_min=a,score_B_min=b,score_B=b,score_C_min=c,score_C=d」は、1.13だと「scores={A=a..,B=b,C=c..d}」となります。

・type

type=<エンティティID>

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

1.12.2までと同じ仕様です。存在しないエンティティIDを指定するとエラーになります。

・tag

tag=<タグ名>

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

1.12.2までと同じ仕様です。複数指定出来るため、例えばタグ A,B を持っていてタグ C を持っていないエンティティを指定する場合には、「tag=A,tag=B,tag=!C」のようになります。

・sort ※「!」使用不可

sort=<nearest | furthest | random | arbitrary>

他の引数とは少し異なり、エンティティの検索方法を指定します。

  • nearest:近くのエンティティから検索していく。@p,@a,@eはデフォルトでこれ。
  • furthest:遠くのエンティティから検索していく。1.12.2までで引数cに負数を指定した際の動作と同じ。
  • random:ランダムな順番で検索していく。@rをエンティティに使いたい時にはこれを使おう。
  • arbitrary:検索方法を指定しない。セレクタ実行時に検索順を決めないため、他3つに比べて負荷が少ないらしい。

・nbt

nbt=<NBTタグ(NBTTagCompound)>

NBTタグをNBTTagConpound形式で指定します。

1.12.2までは複数コマンドが必要でしたが、1.13から1コマンドでできるようになりました。

・advancements ※「!」使用不可

advancements={[<進捗名>=<true | false> または <進捗名>={条件=<true | false>[...]}]}

特定の進捗を達成しているかどうか指定します。

  • <進捗名>=<true | false>
    • 特定の進捗が達成されているか指定します。
      trueなら達成されている、falseなら達成されていない、になります。
  • <進捗名>={条件=<true | false>[…]}
    • 特定の進捗の達成条件が達成されているか指定します。
      同じように、trueなら達成されている、falseなら達成されていない、になります。

進捗名の指定は/advancementコマンド等と同じ、<名前空間>:<パス>です。

例えば「advancements={minecraft:story/root=true,minecraft:story/mine_stone=false}」であれば、バニラの進捗 Minecraft の親である Minecraft を達成していて、その子の 石器時代 を達成していないプレイヤーが対象になります。


如何でしたか?本日2記事目ということもあり、もしかすると疲れで誤字や誤り等あるかもしれませんが、見つけたら教えて頂けると幸いです。

個人的には、MinecraftJE1.13のコマンドは、

  • セレクタと引数
  • ブロックの指定方法
  • /executeコマンド

を理解すれば、1.12.2以前と同じ、もしくはそれ以上の物を作れると思います。つまり、1.13は「可能性が広がるアップデート」なのではないかと感じます。

また、これまで複数コマンド必要だったものが1コマンドでできるようになったり、セレクタが短くなったり、といった「プレイヤーが楽になるアップデート」でもないでしょうか。

どうか、1.13でのコマンドの仕様変更をとせず味方にして、今まで以上のものを作り上げてみませんか?

それではこの辺でお別れです。最後まで読んで頂きありがとうございました。

(2017/11/12 再投稿)

コメントを残す

*
*

%d人のブロガーが「いいね」をつけました。