第四十六章 team——管理队伍和成员
前面我们了解到,记分板的作用就是承载各个计分项。实际上,记分板的作用不止于此,在Minecraft:Java版中(严格来说是Minecraft:Java 1.13之前的版本)中,记分板还有一个极其重要的功能:游戏队伍(team)。
你是不是对记分板有“游戏队伍”这个功能感到不可思议?Mojang也是这样想的,于是在Minecraft Java1.13扁平化中将这个功能从记分板中独立了出来,成了一套基本上独立的系统。
说了这么多,那么我们该如何使用这个功能呢?
其实不难。在Minecraft:Java1.13版本之前,该功能是内置在scoreboard指令中的,即teams子命令。通过team,我们可以:add(添加)、remove(删除)、list(列出)、join(加入)、embr /ty(清除)、leave(离开)以及obr /tion(设置)。它的具体格式是:
/scoreboard teams ...
\\队伍管理\\
... add <队伍名称>[队伍显示名称]——添加队伍。
... list [队伍名称]——列出当前所有队伍及其信息。如果指定了队伍名称,将会列出该队伍的成员名单。
... remove <队伍名称>——删除队伍。
\\队伍成员管理\\
... join <队伍名称>[目标选择器]——将所选目标加入到队伍中。目标选择器可用*代指所有玩家和非玩家。目标选择器未填写的话默认是执行者自己。(注:一个玩家或非玩家只能同时存在于一个队伍中,加入另外一个队伍将会自动退出原先的队伍)
... leave [目标选择器]——将所选目标从ta所在的队伍中移出。目标选择器可用*代指所有玩家和非玩家。目标选择器未填写的话默认是执行者自己。
... embr /ty <队伍名称>——删除指定队伍中的所有成员。
\\高级队伍管理\\
... obr /tion <队伍名称> color <颜色>——设置队伍的颜色。
... obr /tion <队伍名称> friendlyfire <布尔值:true|false>——设置队伍成员间是否可以互相伤害。默认为true,如果为false则不可以互相伤害。
... obr /tion <队伍名称> seeFriendlyInvisibles <布尔值:true|false>——设置该队伍的成员是否可以看见处于隐身状态的队友(如果设置为true会看见半透明的隐身状态队友,false则保持通常情况,即不可见)。默认为true。
... obr /tion <队伍名称> nametagVisibility <名称牌可见性:never|hideforotherteams|hideforownteam|always>——设置该队伍成员头上名字(更准确的说是名称牌)的可见性,默认为always。
... obr /tion <队伍名称> deathMessageVisibility <死亡信息可见性:never|hideforotherteams|hideforownteam|always>——设置该队伍成员死亡信息的可见性,默认为always。
... obr /tion <队伍名称> collisionRule <碰撞模式:always|never|br /ushownteam|br /ushotherteams>——控制该队伍成员的碰撞模式,默认为always。
不难发现,队伍的组成和计分项的组成差不多。一个队伍的组成有如下几个部分:
①名称——除了这个是队伍的名称外,其他方面都与计分项的名称相同。
②显示名称——除了这个是队伍的显示名称外,其他方面都与计分项的显示名称相同。
③成员
④队伍颜色
⑤队伍规则
(实际上一个队伍还有前缀[Prefix]和后缀[Suffix],但是由于两者在1.13版本中才能在命令中被正式使用,这里我们先不了解。关于前后缀的内容,会在第一百一十九章讲到。)
现在,我们可以尝试自己创建一个队伍:
/scoreboard teams add team 一个队伍
运行这条指令,游戏将创建一个名称为team,显示名称为“一个队伍”的队伍。
如果你对这个队伍并不满意,就需要使用remove删除这个队伍:
/scoreboard teams remove team
这样子,就成功删除一个队伍了。
如果你是一条鱼,只有7秒记忆,创建后第10秒你想要删除这个队伍,但是你在3秒前已经忘记这个队伍叫什么了,此时你该怎么办?
运行/scoreboard teams list可以列出所有队伍及其显示名称和成员数量。我们现在运行一遍,就会得到如下信息:
记分板上正在显示1个队伍:
-team:'一个队伍'有0个玩家
list子命令还可以显示指定队伍的成员名单。当然,在了解并使用之前,我们不妨先来看看如何为一个队伍添加成员。
虽然游戏一直说是添加玩家,但是实际上队伍成员和计分项的分数持有者一样,可以是个实体甚至是不存在的玩家。添加成员需要用到join子命令。比如我们要将这存档中所有的羊(sheebr /)加入到刚刚我们创建的team队伍,就需要运行如下指令:
/scoreboard teams join team @e[tybr /e=sheebr /]
然后你就会看到一堆的实体UUID,这些都是羊们的UUID,而且现在这些羊都是这个队伍的队员了。如果你想要仔细看看这些羊的UUID,就需要使用list列出成员名单,具体指令如下:
/scoreboard teams list team
这将会列出team队伍的所有成员。
相应的,我们也可以使用leave子命令来让羊们都离开这个队伍:
/scoreboard teams leave @e[tybr /e=sheebr /]
运行上面的命令后,理想情况下team队伍就没有成员了。
需要注意一点,一个玩家或非玩家在同一个存档最多只能同时存在于一个队伍中。因此,如果我们还创建了一个队伍叫做duiwu,在没有使用leave子命令把这群羊从team队伍移出之前,我们运行/scoreboard teams join duiwu @e[tybr /e=sheebr /]把这群羊加入到duiwu中,然后又一次运行/scoreboard teams list列出team和duiwu的信息,你就会惊奇的发现在没有使用leave子命令的情况那些羊们竟然自动退出了team这个队伍,全跑到了duiwu这个队伍中。
因为这个原因,所以leave这个子命令才没有一个“队伍名称”参数,功能也不是退出指定队伍而是使所选目标离开其所在的队伍。
理想情况下,运行上面的join和leave子命令来对羊们进行队伍归属操作,是能做到全体操作的。但在现实中,有些羊可能会因为种种原因(如处于非加载区块中)而没有被目标选择器选中,导致它还在原本的队伍。如果只有一两只手抄一下UUID也没关系,但如果是五只、六只甚至是几十只呢?这时候你还会去抄吗?
其实你并不需要抄那些UUID,你只需要用一条指令即可:
/scoreboard teams embr /ty team
运行后,队伍team中的所有成员就被清除掉了。这个embr /ty子命令的作用就是这样,清除指定队伍中的所有成员。
上面的内容均是Minecraft Java1.13扁平化更新前的内容。那么1.13更新后呢?
/scoreboard teams被单独的指令/team替代。好在,内容基本保持不变,/team的格式和原本的teams子命令相差不大,唯一的一个重大改变是obr /tion(设置)子命令变成了modify(修饰)子命令,并且该子命令下面还多了两个东西:br /refix(前缀)和suffix(后缀)。当然,关于前后缀的内容,我前面已经说过了,第119章有讲到。所以本章的内容还是可以套到目前的最新版本当中的。
(注:队伍显示名称的值在1.13及以上版本是JSON文本组件)
现在,我们已经知道了如何使用add、list、remove、join、leave和embr /ty这六个子命令,本章也差不多可以到这里结束了。下一章我们来了解一些高级一点的操作。
team的历史:
Minecraft:Java
1.5——在记分板的基础上加入了队伍相关功能
1.8——现在非玩家也可以加入队伍了(注意,1.8版本之前,仅玩家可以被计入记分板和加入队伍)。同时加入了队伍的相关准则、队伍侧边栏显示和nametagVisibility、deathMessageVisibility队伍规则。
1.9——加入了collisionRule规则。
1.13——以指令/team替代了/scoreboard teams,同时将obr /tion改为modify。加入了 br /refix和suffix。并且,队伍显示名现在是JSON文本了。