本帖最后由 Dahesor 于 2023-1-1 11:55 编辑

☆【命令】命令教程"真"从零开始( 廿一 )
游戏怎么能没有BOSS生命值? /bossbar


声明:
1. 本系列教程默认读者拥有关于Minecraft游戏本身的基础了解。
2. 本系列全部教程绝对适用于当前Java最新版( 1.19.3 )。 但本帖适用于1.13以来的任何版本
3. 本系列教程致力于基础原理而非使用方法,因为某些原因,这是本声明里最重要的一条。
4. 本教程 需要读者有特定的命令知识。这些这些内容在 下方表格中列出


需要前置知识:
请确保你理解下列的内容。下表的所有内容一定在本系列教程的某一帖讨论过,所以若您是从本系列第一帖起阅读至今,可以不用看。
对于跳跃式阅读的读者,还请检查一番:


<<<<<< 返回系列目录 ←←




让我们暂时跳过第19和20篇,直接来到21篇。
为什们呢?因为有5个月没写了,所以让我避重就轻一下(使眼色)
这篇之后大概先回去写19和20,大概

前言

(^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^) (^_^)

一个合格的RPG总得做一些Boss出来,而大部分Boss都有个标配的血条。一般来讲,血条显示于屏幕的正上方。
在1.13加入这个可以自定义Boss血条的命令/bossbar之前,制作者们大概也是没什么办法的。(Terra Restore不惜把凋零弄成了Boss之一,使其成为一代里唯一有血条的Boss)
不过,在现在的版本,这个叫/bossbar的命令,不仅使人们可以轻易地做出Boss生命值,更可以演变为分数条,能量条等更多神奇的玩法。

如果你有看过本教程的前18篇,那么该命令本身应该是没什么难的。不过,在讲/execute之前,/bossbar是必须先要了解的东西。像往常一样,我建议你打开游戏放在一遍,边读本文边自己试着玩玩。


1. 创建与删除

首先,是如何创建以及删除Boss栏。创建Boss栏命令格式:
  1. /bossbar add <Boss栏ID> <显示名称>
复制代码
创建新的自定义Boss栏要使用/bossbar的子命令"add"。
记分板 比较像,自定义Boss栏也可以创建无数个。所以为了区分不同的Boss栏,每一个都有自己独一无二的ID。这就是上面的<Boss栏ID>。
<Boss栏ID>是一个命名空间ID。我们在本系列之前的帖子中简单地讲过命名空间的概念,这里详细地说一说

1.1 命名空间ID

你可以把命名空间ID想象成一种,比较特殊的ID。它是由两个不同的部分组成的,有效的命名空间ID的格式为命名空间:名称,例如" custom:boss "。冒号前面的部分叫命名空间。后面的是ID。
它的重要特点之一,就是可以在很大程度上防止ID冲突。

形象地举个例子。“绅士”这个词有很多种不同的意思。在正式的用法下指的是“彬彬有礼的男性”,但在二次元语境下一般是指 “变 0 态”( 在这里查看出处 )。
那,如果我们硬要区分一下,该怎么分辨两种不同的含义呢?
只要一个写 " 正规:绅士 ",一个写 " 二次元:绅士 ",就可以区分了。
冒号前面的部分,是“命名空间”。它指明了这个ID的“分类”或是“归属”,而冒号后面的东西则是ID。

那命名空间ID是怎么防止ID冲突的呢?

比如,假设,你和你的朋友在同一张地图上工作。你们各自做了一个Boss,一个在 冰雪 场地里,一个在 火焰 场地里。BOSS没有起名字,就叫Boss。
你们想要分别给这两个Boss弄一个血条。但是,这两个Boss都叫“boss”啊,ID是不可以重复的,这两个Boss血条不能都叫“boss”。
这时只要使用命名空间,把一个ID设置成 " ice:boss ",另一个叫 " fire:boss ",这件事就解决了。

在使用本命令(和很多其他涉及命名空间ID的位置)时,<Boss栏ID>是一个命名空间ID。Minecraft规定,这些ID只能包含 小写字母 (abcdefghijklmnopqrstuvwxyz) ,数字 (0123456789) ,下划线 (_) ,连字符 (-) 和点 (.) (还有中间的冒号) 。在ID的部分(冒号后面)也可以使用斜线(/)用于划分文件路径。不过在Boss栏里我们是用不到的,所以暂且不要管斜线。

同时,命名空间,即冒号前面的部分是可以省略的。省略后将默认为 minecraft:
也就是说,以下两条命名空间ID等价:
  1. boss
  2. minecraft:boss
复制代码
如果,只是你一个人自己在做一张地图,不用考虑兼容性问题,那么省略命名空间就可以了,因为不会冲突嘛。就像是,在只存在正式语境的前提下,不用区分“绅士”的含义一样。

以上就是<BOSS栏ID>,而后面的<显示名称>就很好理解了。ID是用来区分不同的Boss条的,而<显示名称>是玩家看到的名字,是可以重复的。
显示名称应该是一串JSON文本,Minecraft用来显示文本的格式,可以设置样式颜色等。JSON文本在本系列教程第17详细探讨了。
如果你没有看过第17篇也没关系,只要把你想要的名称用双引号(")括起来就好了,比如如果你要<显示名称>为 超级大魔王 ,那就写 "超级大魔王"

1.2 创建Bossbar

把上面的内容组合起来:格式:
  1. /bossbar add <Boss栏ID> <显示名称>
复制代码

一个合法的例子就是:
  1. /bossbar add ice_demon "寒冰恶魔"
复制代码
命令1:添加一个Boss栏,ID为"minecraft:ice_demon",显示名称为寒冰恶魔。

注意上面我们省略了命名空间(冒号前面的部分),所以命名空间默认为minecraft:
换句话说下面的命令和上面的等价:
  1. /bossbar add minecraft:ice_demon "寒冰恶魔"
复制代码
命令2

不过,下面的命令就不一样了:
  1. /bossbar add ice:ice_demon "寒冰恶魔"
复制代码
命令3: 添加一个Boss栏,ID为"ice:ice_demon",显示名称为寒冰恶魔。

这次我们添加的Boss栏ID是 ice:ice_demon ,规定了命名空间为ice。

  • ice:ice_demon minecraft:ice_demon 不是同一个ID
  • 这意味着两者是可以共存的。
  • 然而, minecraft:ice_demon ice_demon 等价
  • 所以如果已经输入了命令1再执行命令2会给你报错“该Boss栏ID已经存在”之类的。

就这样,你可以创建无数个Boss栏了。


1.3 删除与查询

想要删除一个特定的Boss栏时,使用如下格式:
  1. /bossbar remove <Boss栏ID>
复制代码
使用/bossbar的子命令remove,再指定要移除的Boss栏的命名空间ID,就可以删除它了:如:
  1. /bossbar remove ice_demon
复制代码

删除Boss栏minecraft:ice_demon
或者:
  1. /bossbar remove ice:ice_demon
复制代码
删除Boss栏ice:ice_demon

最后,如果你忘记了都有哪些Boss血条了,可以使用这条命令:
  1. /bossbar list
复制代码
这会列出所有存在的boss栏


2. 控制


当然,只是创建一个Boss血条是不够的。本节会告诉你如何控制Boss血条的数值,颜色,可见玩家等属性。
比如,我们先创建一个Boss栏:
  1. /bossbar add example "测试"
复制代码
添加ID为minecraft:example的Boss血条,显示为 测试

但是,这个Boss血条在哪里呢?
自定义Boss栏是个蛮智能的东西。除了基本的,显示的生命值以外,每个Boss栏还可以设置不同的属性,包括 颜色,外观,当前是否可见,以及可以看到它的玩家。
实际上,在Boss条创建时,它默认是没有玩家可以见到。我们得用命令控制,让自己可以看得见它:
  1. /bossbar set <Boss栏ID> players [<可见玩家>]
复制代码
格式:设置可见玩家
/bossbar的子命令"set"可以控制一个Boss栏的属性。"<Boss栏ID>"用来指明,命令是要对哪个Boss血条下手。"players"指明了要控制的属性是“可见玩家”,因此想要谁可以看到该Boss栏,把"[<可见玩家>]"替换为该玩家即可。
如:
  1. /bossbar set example players @a
复制代码
使所有的玩家都能看到Boss栏"minecraft:example"
运行这条命令你就会发现,一个白色的条条出现在了屏幕最上方:



使用选择器,你可以随意地控制能看到本Boss栏的玩家。
[<可见玩家>]是一个可选项。当省略时,会使其还原为默认项,也就是没有玩家看得见:
  1. /bossbar set example players
复制代码
谁也看不见该Boss栏

不过现在你可能注意到了,这上面的Boss栏使空的。
该怎么让它显示指定的生命值呢?比如,怎么显示“满血”或者是“半血”?

实际上,在这方面,每个Boss栏都有两条属性:当前值,和最大值。
比如,你设置最大值为100,当前值为50,那么看起来就是半血的模样。如果把当前值再调成75,那么就是四分之三血了。这时再把最大值调低到75,那么看起来就是满血了。

格式:

  1. /bossbar set <Boss栏ID> value <值>
复制代码
设置当前值

  1. /bossbar set <Boss栏ID> max <值>
复制代码
设置最大值

"value"是英文“数值”的意思,"max"则是“最大的意思”。填入<Boss栏ID>和想要的<值>,就可以控制了
默认情况下(创建Boss栏后还没修改时),Boss栏的当前值是0,最大值则是100.
所以:
  1. /bossbar set example value 50
复制代码
将Boss栏"minecraft:example"的当前值设置为50
本命令执行后,你可以看到上面的Boss栏变成了“半血”状态:



接下来再调成100:
  1. /bossbar set example value 100
复制代码
将Boss栏"minecraft:example"的当前值设置为100
这回当前值和最大值是相等的,所以说是“满血”状态:



接下来调整Boss栏的最大值,把它调高到150:
  1. /bossbar set example max 150
复制代码
将Boss栏"minecraft:example"的最大值设置为100

现在当前值是100,最大值是150,所以就会变成三分之二血状态:



就是这样,你应该玩明白了。值得一提的是当前值必须大于0,最大值必须大于1。


2.1 显示与隐藏

Boss栏还可以设置“显示”和“隐藏”。
当Boss栏隐藏的时候即使是可见玩家也看不见它(哪有最终Boss血条打游戏一开始就出现的)。

格式:
  1. /bossbar set <Boss栏ID> visible (true|false)
复制代码
"visible"是英文"可见"的意思,true和false就是“真或假”,也就是布尔值。系列教程前面讲过多次。因此:
  1. /bossbar set example visible false
复制代码
使Boss栏"minecraft:example"不可见
这条命令执行后你就会发现Boss栏消失了
再反过来:
  1. /bossbar set example visible true
复制代码
使Boss栏"minecraft:example"可见
这条命令执行后你就会发现Boss栏又出现了


2.2 好看点吧

除了以上的“功能性控制”,我们也可以控制Boss栏的外观。外观包括两部分, 颜色 样式

颜色:
  1. /bossbar set <Boss栏ID> color <颜色>
复制代码
color是颜色的意思。Boss栏支持7种不同的颜色:
蓝色 blue,绿色 green,粉色 pink,紫色 purple,红色 red,白色 white,和黄色 yellow。
如:
  1. /bossbar set example color blue
复制代码
把Boss栏"minecraft:example"变成蓝色的
长这样:



你也可以自己尝试其他的颜色,不过这里是所有颜色的样子:



接下来是样式。样式就是,你可以把这个Boss血条,在视觉上分成一节一节的。默认是不分节,但是你可以调成其他的样式。比如6节的:


或者20节的:


格式:
  1. /bossbar set <Boss栏ID> style <样式>
复制代码


"style"是样式的意思。支持的样式有 连续的(默认),6节 "notched_6",10节 "notched_10",12节 "notched_12",和20节 "notched_20"。

例:
  1. /bossbar set example style notched_12
复制代码

把Boss栏"minecraft:example"变成12截的:




注意这只是样式。分成多少截只有外观的变化。

最后,Boss栏的显示名称是在创建时就指定的。然而,创建之后你也可以更改它:
  1. /bossbar set <Boss栏ID> name <显示名称>
复制代码
把< 显示名称 >替换为一个有效的JSON文本即可。(当然,不知道JSON文本是什么的,照样可以简单地用双引号包围)。


3. 查询

接下来,是一条用来查询指定Boss栏当前状态的命令。现阶段,实际上,你用不太到。
get子命令可以查询指定Boss栏的指定状态:
  1. /bossbar get <Boss栏ID> (max|players|value|visible)
复制代码

填入max可以获取该Boss栏的最大值:
  1. /bossbar get example max
复制代码
获取"minecraft:example"的 最大值

填入value可以获取该Boss栏的当前值:
  1. /bossbar get example value
复制代码
获取"minecraft:example"的 当前值

填入players可以获取该Boss栏的可见玩家:
  1. /bossbar get example players
复制代码
获取"minecraft:example"的 可见玩家

填入visible可以得知该Boss栏是否可见:
  1. /bossbar get example max
复制代码
查询"minecraft:example" 是否可见



4. 使用提示

以上就是/bossbar的所有语法了。然而,我还要给你一些使用提示:

首先是关于可见玩家方面的。
当你输入 /bossbar set example players @a 时,你是将选择器@a所能找到的玩家纳入了“可见玩家”的范围。这包括你自己,然而这不包括以后来游玩你的地图的玩家。
比如,我的ID是Dahesor。在我执行 /bossbar set example players @a 后,游戏就会记录,啊,Dahesor可以看到这个Boss栏。注意@a选择器只选择在线玩家。
现在我把这张地图送给Pink_Dove,让Ta进去看看。但是注意只有ID为Dahesor的玩家才能看到Boss栏。Pink_Dove的ID是Pink_Dove,所以Ta是看不到这个Boss栏的。
所以说, /bossbar set example players @a 不能只执行一次就完了。
你得保证,在新玩家需要看到Boss栏时Ta们也能看到。这条命令应该在需要的时候执行多次才行。

还有,Boss栏有时有一些奇怪的特性,尤其是在数据包中使用时。那么不会出错的方法是每次更新Boss栏的数值时都刷新一下,让它隐藏再回复可见。

另外,Boss栏可以存在很多个,也可以同时显示很多个。但是游戏有同时显示上限。根据设置中的“界面尺寸”选项,一般是6~8个之类的。
但不建议同时显示超过2或3个Boss栏,很挡视线,让玩家的观感变差。

最后,Boss栏的纹理会根据显示的顺序微微变化。比如如果同时显示两个颜色样式都相同的Boss栏,第二个也会长得不一样。这点就去自己玩玩吧

后记

我们还有一个问题。
上面的内容只告诉了你,如何把Boss栏更新为一个特定的数值。但是,该如何让它实时显示一个生物的血量呢?
这就是下一篇的内容了,/execute。




所以在咕咕咕了半年后我又回来了。
这篇写完后大概会把19和20补上?

如果发现错误,有建议或补充,请务必提出,感谢。


下一篇:还没写呢