记分板标签

标签(tag),本质上就是NBT 字串的List。
每个实体(不是对象,假名无法拥有tag)可以有一组标签,而那些标签不需要事先定义(这是和变量最大的分别之一)。

每个实体都有两种状态:有某个标签和没有某个标签。
标签一般是当做布尔值使用,也就是有没有做过一件事情/符合某个要求。
比如是否已经被系统处理过,或者某个NBT标签符合条件,等等。

变量 能够储存分数,也就是说我们能用分数当作状态。
如我要记录一名玩家出发的状态,我们可以以0代表还没出发,1代表在a段路上,2代表在b段路上,如此类推直到最后一个数值代表完成路程。

但是标签,就无法方便地做到这项功能,因为只能判断在与不在。然而,如果要判断一些能够同时存在的东西并且只有两种可能(是与不是)的时候,则可以使用标签。比如说判断玩家在沙漠,和判断玩家在沙漠神殿,两者可能同时出现(沙漠神殿自然在沙漠)并且只有两种可能(在那地方和不在那地方),那么我们就可以使用tag了。

此外,标签也能在实体生成时加上,十分方便。NBT为: Tags:["标签1"...]。例子:

summon armor_stand ~ ~ ~ {Tags:[tag1]}

如果要检查多个标签的话,我们需要execute。如我们要检查有tag1、tag2、tag3的实体,让它们say hi

execute @e[tag=tag1] ~ ~ ~ execute @s[tag=tag2] ~ ~ ~ execute @s[tag=tag3] ~ ~ ~ say hi

标签有一点比变量好的地方:不用初始化。对象没有分数是没法检测的,而没有标签直接tag=!标签就能检测,省却了初始化的步骤(对象需要+0分来初始化分数)

注意: 很重要的一点是,玩家死了之后标签还是不会改变的,就像分数一样

然而有时候我们会选择使用记分板,就是当玩家可能下线并且我们要对该玩家的状态进行操作时。本教程最后的例子中的皇冠系统就有这情况了。

使用tag的例子可以参见 下雨检测。里面展示了怎么以tag标记有特定NBT的实体。

results matching ""

    No results matching ""