标签(Tag)
增加、移除、列出Tag、Tags NBT
增加tag
命令
/scoreboard players tag <实体> add <标签名字> [数据标签]
- 实体: 该实体必须存在。需要加上tag的实体。可以是选择器。也能使用'*'代表所有有分数、存在的对象实体。
- 标签名字: 加上的标签名字。
- 数据标签: 实体必须符合该数据标签才会加上tag。不填写则不检查数据标签。
例子
/scoreboard players tag @a add player
为所有玩家加上player tag。
Stats
- AffectedBlocks: 0
- AffectedEntities: 符合要求的实体数
- AffectedItems: 0
- SuccessCount: 符合要求的实体数
- QueryResult: 0
移除tag
命令
/scoreboard players tag <实体> remove <标签名字> [数据标签]
- 实体: 该实体必须存在。需要移除tag的实体。可以是选择器。也能使用'*'代表所有有分数、存在的对象实体。
- 标签名字: 移除的标签名字。如果指定实体没有该标签则会失败
- 数据标签: 实体必须符合该数据标签才会移除tag。不填写则不检查数据标签。
例子
/scoreboard players tag @a remove player
为所有玩家移除player tag。
Stats
当指定实体有该标签
- AffectedBlocks: 0
- AffectedEntities: 符合要求的实体数(可以没有该tag)
- AffectedItems: 0
- SuccessCount: 符合要求的实体数(而且有该tag)
- QueryResult: 0
列出tag
命令
/scoreboard players tag <实体> list
实体: 该实体必须存在。需要列出tag的实体。可以是选择器。也能使用'*'代表所有有分数、存在的对象实体。
例子
/scoreboard players tag @a list
列出所有玩家的tag
Stats
- AffectedBlocks: 0
- AffectedEntities: 实体数
- AffectedItems: 0
- SuccessCount: 实体数
- QueryResult: (最后的实体的)标签数。
Tags NBT
Tag是储存在实体的Tags(list)nbt里的, 而不是scoreboard.dat。
通过修改Tags NBT, 我们可以在实体生成时直接赋予其tag, 或者是一次过覆盖、删除掉所有的tag等。
- (实体根标签)
- Tags
- 一个tag
- Tags
举个例子, 生成一个有a、b两个tag的僵尸
~~pcb
/summon zombie ~ ~ ~ {Tags:["a","b"]}
//或者是
/summon zombie ~ ~ ~ {Tags:[a,b]}
检测Tag
选择器参数单个检测
透过参数tag, 我们可以检测有tag/没有tag/有指定tag/没有指定tag的实体
tag=
: 选择有tag的实体tag=!
: 选择没有tag的实体tag=<tag>
: 选择有标签的实体 tag=!<tag>
: 选择没有标签的实体
注意, 一个选择器只能检查一个tag, 如果需要检查多个tag, 请使用以下方法
execute多个检测
方法非常简单, 就是利用@e[r=0,c=1]一般情况下会选择自己的特性, 来以execute嵌套选择。
例子
/execute @e[r=0,c=1,tag=a] ~ ~ ~ execute @e[r=0,c=1,tag=b] ~ ~ ~ execute @e[r=0,c=1,tag=c] ~ ~ ~ say hi
这样子, 有a、b、c tag的实体就会say hi。
注意: 这个方法在实体重叠的时候可能会出现bug。
不过在1.9开始, 选择器的距离检测非常准确, 该bug需要两个实体在完全一样的坐标才会出现, 一般情况下不会出现。
然而如果系统曾把需要检测的实体tp到别的实体的坐标, 或是把别的实体tp到需要检测的实体的位置, 则需要小心。
nbt多个检测
能够以分数/别的tag来标记拥有指定tags的实体。
方法为检测其Tags NBT
例子
/scoreboard players set @e scb 1 {Tags:["a","b","c"]}