第八十四章 bossbar-自定义BOSS栏 下
(此章节已于2022年7月22日重写)
在上一个章节,我们创建了一个ID为minecraft:server_owner,叫做『腐竹』的BOSS栏。这个BOSS栏是粉色的,分成20段,最大值为20。虽然看起来很厉害,但有一个问题——这个BOSS栏没有实际用处。
所以在这一个章节,我们要让这个BOSS栏发挥出实际的用处,使得服主的血量能够实时反映到这个BOSS栏上。
既然要能够实时反映,我们就要解决两个问题:
①如何实时获取到服主的血量
②如何将服主的血量存储到BOSS栏的值中
首先来看第一个问题,这个问题其实很好解决,我们有两种简单的办法:①使用NBT标签,直接获取②创建一个health准则的计分项,然后获取服主在这个计分项上的值
第一个方法我们暂且没有学过,但第二个你总该会吧?让我们来试一试:
/scoreboard objectives add health health
这将会创建一个health准则的叫做health的计分项,然后你就不用管了,游戏会自动把每个玩家的血量存储到这个计分项上。让我们来看一看游戏弄得如何:
/scoreboard objectives setdisbr /lay sidebar health
这将会在右侧边栏显示出health计分项,然后你会发现——怎么空空如也?
其实游戏仅仅会在玩家血量变化的时候记录血量的值到计分板上,由于此时计分项才刚创建,还没有任何一名玩家的血量发生变化,计分项自然就空空如也。你可以尝试摔一次跤,正常情况下右边就会正确显示出你的血量。
计分项弄好后,我们就可以通过以下指令获取到服主的血量:
/scoreboard br /layers get Fuzhu health
(其中,Fuzhu代表服主的游戏名称)
第一个问题就这样解决了,但还有第二个问题:如何将服主的血量存储到BOSS栏的值中
在这边,我们就得使用execute存储子命令的bossbar子命令,其格式如下:
... store <返回类型> bossbar <ID>(value|max)...
ID参数,也就是要存储到的BOSS栏的ID;『(value|max)』参数,也就让你选择要将返回的结果存储到该BOSS栏的值还是最大值中。在这边我们当然是要存储到值(value)中,也就是使用如下指令:
/execute store result bossbar minecraft:server_owner value run scoreboard br /layers get Fuzhu health
上面的指令将会把『scoreboard br /layers get Fuzhu health』返回的结果,也就是服主的血量,存储到ID为『minecraft:server_owner』的BOSS栏的值中,这样子BOSS栏就可以显示出服主当前的血量了!
我们只需要将这条指令放入一个一直重复执行的命令方块中,就可以实现『服主的血量实时反映到这个BOSS栏』这样的效果。
最后我留个作业,你感兴趣的话可以尝试实现实现。
作业内容:在本章内容的基础上,利用所学知识,实现下面描述的效果
①如果服主不在线,隐藏BOSS栏,在线的情况下再显示出来。
②服主周围一定范围内的玩家会看到『腐竹BOSS栏』,超出这个范围的玩家则无法看到
③在服主自己的血量上限提升的情况下(比如有伤害吸收或生命提升的药水效果),也要相应提升BOSS栏的最大值
其中,第三点要完美实现的话需要一定的NBT知识,如果你并不不了解,也可以用计分板做一个勉勉强强的效果出来。
这就是本章的全部内容。