Tag機能の使い方

コマンドでプレイヤーやMobを指定する時、例えば「name=名前」「score_スコア名=○」などの条件を決めて指定しますね。でも、いちいちMobの名前やスコア名を入力するのって面倒で、メンテナンスも大変…
そこで、1.9の便利な新機能"TAG"を使いましょう。エンティティに「タグ」を付けて分類できるんです。 タグ付きでMobを召喚したり、複数タグの判定も可能。コマンドの仕掛け作りが劇的に楽になります!

バージョン1.9の、コマンドや配布ワールド作成に関する新機能/変更点まとめ
1.9のコマンド関連まとめ
https://napoan.com/pcversion19-command-guide/

▲バージョン1.9はコマンドに関する新要素/仕様変更が盛り沢山。
スポンサーリンク
お待ち! この記事は最後の更新から1年以上経過している古い記事だ。新しいバージョンに合わせて装置を作り直してスクショを取り直して解説を書き直す面倒臭さが君には分かるかい? 分からないなら読まないほうがいいぜ。
この記事で解説しているコマンドと機能について
この記事で解説している「tag」は、バージョン1.9のSnapshot 15w32bで追加された機能です。バージョン1.9のリリースまでに仕様が変更される可能性もありますのでご注意下さい。

日本語名のMobをキルするには? スコアボードを作るのは面倒...

店員さんと名の付いた村人をキルしたい

RPG風の配布ワールドを制作中、ショップの店員さんを増やしすぎたのでキルしたいと思います。「店員さん」という名前が付いているので、「/kill @e[type=Villager,name=店員さん]なら殺せるかと思いましたが...

エンティティ名の指定に全角文字は使えない

あれ? 無効な形式と表示されてキルできませんね... どうやら、「[name=○○]」の名前セレクタに全角文字が含まれているとエラーが起きるみたいです... ではどうやって「店員さん」をキルすればいいんでしょう。


Scoreboardを使って店員さんをキルする手順

Scoreboardコマンドの使い方をマスターしているあなたなら、▲の方法を使いますよね。スコアボードを作成して、CustomNameを条件にスコアをセットして、スコアを条件にキルして... なかなか面倒くさいですね。もっと簡単にならないんでしょうか...


プレイヤー/エンティティを分類、バージョン1.9の新機能「Tag」とは?

新機能「Tag」の概要

そこで、バージョン1.9(15w32b)の新機能「Tag」が登場します。これはコマンドの仕掛け作りに大いに役立つ機能で、これまでの「name=○○」「score_○○=」などのセレクタと同じように、「"タグ"を持っているかいないか」を条件にプレイヤー/エンティティを指定/検知できるんです。ただし完全にスコアボードの代わりではなく、スコアボードと比べて様々なメリット・デメリットがあるんです。

  • 事前にスコアボードを作成したりする必要がない→いきなり好きな名前でタグを付けられる
  • 追加、削除するだけ。現在の数値など細かいことは気にしなくていい♪
  • 判定できるのは「タグを持っているか/いないか」だけ。
  • Scoreboardの「stat」のように自動で付与されたりする機能はない。
  • Scoreboardの「dummy」のように、「タグ」は数値のデータを持つことができない。
  • つまり、「○秒経ったら○○する」はスコアボードを使わないと無理

新機能「Tag」でエンティティやプレイヤーにタグを追加する方法

新機能「Tag」を使って、近くの「店員さん」に「Shop」タグを追加するコマンド
/scoreboard players tag @e[type=Villager] add Shop {CustomName:店員さん}
※「店員さん」でない村人がいる数だけエラーが表示されますが、無視して下さい。

上記コマンドで使ったのが、バージョン1.9(15w32b~)の新機能、「tag」です。

/scoreboard players tag <ターゲット> add <タグ名> (条件となるデータタグ)

というコマンドで、指定したプレイヤーやエンティティ好きな名前の「タグ」を追加できます。「条件となるデータタグ」では、summonコマンドなどで使う「CustomName」「NoAI」などのデータタグを条件にしてタグを追加できます。「データタグ(NBTタグ)」と、今回解説する「tag」は全くの別物なので注意して下さい!


タグを条件に店員さんをキル

/kill @e[tag=Shop]で、「Shop」タグを持っているエンティティをキルします。先ほどのコマンドで、「店員さん」には「Shop」タグが付いたので、ここで一気に殺せるわけです。



最初からタグを付けてMobを召喚すればとっても楽!

最初からタグ付きで召喚すれば楽です

いちいちMobにタグを追加するのは面倒なので、最初からタグを付けて召喚してみましょう。

最初から「Shop」タグが付いた「店員さん」を召喚するコマンド
/summon Villager ~ ~ ~ {Tags:["Shop"],CustomName:店員さん}

エンティティの新しいデータタグ「Tags」を使います。["タグ1","タグ2"]のように書くことで複数のタグを付けて召喚することも可能です。例えば「Shop」と「Town」ならTags:["Shop","Town"]と書くんです。


複数のタグを持っているプレイヤー/エンティティを指定する方法

複数のタグを持つエンティティを指定するには

Mobやプレイヤーにタグを何個も付けて、例えば「タグAとタグBをどちらも持っていると何か起きる」みたいな仕掛けを作る時はどうすればいいのでしょうか。答えは簡単。以下のように指定するんです。

「Zako」と「Dekabana」タグをどちらも持っている魔女を奈落へ落とすコマンド
/execute @e[type=Witch,tag=Zako] ~ ~ ~ /tp @e[c=1,tag=Dekabana] ~ ~-300 ~

executeコマンドを使って重ねて書けば、「これらを全て持っている」ことが条件になります。実は、四角カッコの中には1つしかタグを指定できません! こんな風に各executeコマンドのターゲットに、1つずつバラバラにtag名を書かないといけないので注意して下さい。「c=1」とはそのエンティティ/プレイヤー自身のことです。


「タグ1/タグ2/タグ3」を全て持つエンティティやプレイヤーにダイヤを与えるコマンド
/execute @e[tag=タグ1] ~ ~ ~ /execute @e[c=1,tag=タグ2] ~ ~ ~ /give @e[c=1,tag=タグ3] diamond

3つ以上のタグを条件にする場合は、▲のようにexecuteにさらにexecuteを重ねます。「@e」ですがプレイヤーも対象になるのでご注意下さい。「[type=!Player]」と書けばプレイヤー以外が対象になります。


プレイヤー/エンティティに付いているタグを確認/削除するコマンド

エンティティの持っているタグを確認するには

プレイヤー/エンティティの持っているタグは、そのままでは見ることができませんが、コマンドを使えば対象のプレイヤー/エンティティのtag一覧をチャットログに表示させることができます。以下の構文でコマンドを実行しましょう。

プレイヤー/エンティティの持っているタグを確認するコマンド
/scoreboard players tag <ターゲット(@eなど)> list

また、タグは削除することもできます。

プレイヤー/エンティティの持っているタグを削除するコマンド
/scoreboard players tag <ターゲット> remove タグ名 (データタグ)

この時、データタグを条件に削除できるので、例えば「着地したら削除」なら最後に「{OnGround:1b}」と付けます。コマンドの仕掛けに上手に組み込んで、より高度な仕掛けを作ってみましょう!


最後までお読みいただきありがとうございました

いかがでしたか。「tag」機能を使った楽しい仕掛けが生まれるのを楽しみにしています。
「これはどうするの?」などコメント待ってます。


最近書いたコマンド解説記事


スポンサーリンク

毎度毎度ツイート、コメント等ありがとうございます。Twitterではブログの更新状況など色々呟いてます。気軽にフォロー下さい。

スポンサーリンク

コメント

お待ち! この記事は最後の更新から1年以上経過している古い記事だ。新しいバージョンに合わせて装置を作り直してスクショを取り直して解説を書き直す面倒臭さが君には分かるかい?
  • SCPを再現しようと頑張ってる人

    タグをつけたプレイヤーがハートが1になった時にキルしたいのですがどのようにすればいいのでしょうか

    • まずはHPをカウントするためのスコアボードを作成します。
      /scoreboard objectives add HP health
      これでプレイヤーのHPが「HP」というスコアボードに自動で代入されるようになりました。
      次に以下のコマンドを常時実行します。
      /kill @a[tag=タグ名,score_HP=2]
      ▲♥1つはHP"2″なので、スコア「HP」が2以下でさらにタグを持っている人をキルします。

  • 小方こはく

    指定したCustomName以外のエンティティをターゲットにすることはできるのでしょうか。
    具体的には、{CustomName:p1}を付けた(p1のところはそれぞれp1〜p9)合計9体のアーマースタンドがあってp1にpAというタグを付け、p1以外のアーマースタンドからpAをremoveしたいのです。
    そこでpAをremoveする対象を@e[name=!p1]としているのですがCustomNameで付けた名前は引数nameに引っかかるのでしょうか。

    • はい、!を付ければ否定の指定が可能です。
      {CustomName:"test"}ってエンティティがいたとして、
      /kill @e[name=!test]
      とすればtest以外のエンティティをキルできます。

      • SHIKURORO

        ご回答ありがとうございました。

  • hiro

    アイテムにもTAGはつけられるのですか?(エンダーパールにつけたい

    • 残念ながら、アイテムとして手に持った状態ではタグは付けられません。落ちているアイテムはエンティティなので付けられますが、拾うと消えます…
      落ちているエンダーパールにタグを付ける場合は
      /scoreboard players tag @e[type=Item] add tagName {Item:{id:"minecraft:ender_pearl"}}
      で付けられます。

  • kaikai

    自分にはTAGを付けられますか?

    • 疲れたでんでん

      /scoreboard players tag @p add {}