记分板(Scoreboard)系统是一套通过命令操纵的复杂游戏机制。主要为地图作者与服务器运营者准备,记分板可用多种形式追踪、设置并列出玩家及实体的分数。
记分项[]
原文 | 游戏内译名 | 游戏曾用译名 | 社区常见译名 |
---|---|---|---|
Objective | 记分项 | 对象、目标 | 变量 |
Criteria | 准则 | - | 判据 |
Trigger | 触发器 | - | - |
(Display) Slot | (显示)位置 | - | 显示区 |
每一个记分项(Objective)都含有名称、显示名称、准则。记分板可以跟踪实体的分数(points),范围为-2,147,483,648至2,147,483,647,且只取整数,因为这几个变量的数据类型是整型。
记分项的名称(name)在命令、目标选择器以及文件格式中使用。这一变量区分大小写并且只能为一个单词,在Java版中,允许用于名称的字符有所有的大小写字母、数字、下划线、点、减号和加号。在基岩版中,可以是任何字符。
显示名称(display name)是一串JSON文本,用于在不同场合进行显示。多个记分项可以有相同的显示名称。
记分项的准则(criterion,复数为criteria)决定了其行为,也就是要跟踪什么。下方的表格列举了所有的准则。
玩家任何记分项的分数(score)都可以通过命令进行修改,只读型除外。可以增加或减少特定的值,也可以直接设置成某一特定值。对于基于统计与成就的记分项,其数值可用命令修改,但真实的统计不会改变。记分项在统计改变后将继续更新。
分数持有者(score holder)是在记分项中有分数的玩家的名字或者实体的UUID。非玩家实体的分数只能通过命令修改,而不能通过游戏时间修改。和玩家不同,非玩家实体死亡后,其分数被删除。
命令可以通过目标选择器的scores
参数来检查任何实体的任何记分项,语法为scores={名称=最小值..最大值}
比如,在命令方块中输入/execute if entity @a[scores={deaths=1..5}]
会让比较器或条件制约的命令方块在有玩家的死亡次数在1至5之间时提供输出(假设deaths使用deathCount准则)
准则[]
Java版[]
单一准则[]
这些准则的名称由单一字母字符串组成。
准则名称 | 描述 | 能否被修改 |
---|---|---|
dummy 虚拟型 |
只能通过命令修改分数,诸如死亡等游戏行为并不能修改分数。这可以被用来模拟事件标记、状态映射和货币等。 | 是 |
trigger 触发器 |
只能通过命令修改分数,诸如死亡等游戏行为并不能修改分数。/trigger 能够用于设置/增减使用trigger作准则的记分项。如果以trigger为准则的记分项没有对玩家启用,则该玩家使用该/trigger 命令会失败。成功使用过一次/trigger 成功之后,该玩家的该命令将重新被关闭。注意/trigger 可以在不允许作弊的情况下被非管理员的普通玩家使用。这可以比较方便地通过/tellraw 界面来实现玩家输入。
|
是 |
deathCount 死亡次数 |
当玩家死亡时,分数会自动增加。 | 是 |
playerKillCount 杀死玩家总量 |
当玩家杀死其他玩家时分数会自动增加。 | 是 |
totalKillCount 杀死生物总量 |
当玩家杀死其他生物时分数会自动增加。 | 是 |
health 生命值 |
普通玩家会在0~20之间。代表玩家拥有红心数量的两倍。在玩家第一次改变血量前会显示为0。额外的血或者伤害吸收的血也会计算在血量中,也就是说当获得了属性或者修饰器,或者伤害吸收、生命提升的效果后生命值可以超过20。 | 否 |
xp 经验值 |
对应玩家拥有的经验值。 | 否 |
level 等级 |
对应玩家当前的经验等级。 | 否 |
food 饱和度 |
在0~20之间,代表玩家拥有的饱和度。在玩家第一次改变饱和度前会显示为0。 | 否 |
air 空气值 |
在0~300之间;代表潜水的玩家剩余的空气,对应玩家的空气NBT标签。 | 否 |
armor 盔甲值 |
在0~20之间;代表玩家拥有的盔甲值。在玩家第一次更换盔甲前会显示为0。 | 否 |
复合准则[]
[1]有些准则使用了统计和成就系统来组成复合准则。[2]不同于上面的简单准则,复合准则有多个部分,使用点号来分隔(.)。例如 “minecraft.killed_by:minecraft.zombie”是一种复合准则,当玩家被僵尸杀死的时候才会增加。[3]
除此之外,还有以下复合准则:
准则基础名称 | 描述 | 次级准则数 | ||
---|---|---|---|---|
teamkill. |
次级准则是队伍的颜色。玩家杀死特定颜色的队伍成员时增加。 这些准则符合以下完整格式:
|
16 | ||
killedByTeam. | 次级准则包括队伍的颜色。玩家被特定颜色队伍的成员杀死时增加。
这些准则符合以下完整格式:
|
16 | ||
minecraft.custom | 次级准则包括多个目标。这些准则符合以下完整格式:minecraft.custom:<objective> ,其中<objective> 是列表中的一个目标。 |
|||
minecraft.picked_up | 次级准则包括所有物品的所有命名空间ID,其中冒号替换为点号。玩家捡起掉落的物品时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.dropped | 次级准则包括所有物品的所有命名空间ID,其中冒号替换为点号。玩家丢弃指定的物品时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.used | 次级准则包括所有物品的所有命名空间ID,其中冒号替换为点号。玩家使用指定的物品时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.broken | 次级准则包括所有物品的所有命名空间ID,其中冒号替换为点号。玩家破坏(break)指定的物品时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.crafted | 次级准则包括所有物品的所有命名空间ID,其中冒号替换为点号。玩家合成指定的物品时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.mined | 次级准则包括所有方块的所有命名空间ID,其中冒号替换为点号。玩家挖掘(mine)指定的方块时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.killed | 次级准则包括所有实体的所有命名空间ID,其中冒号替换为点号。玩家杀死指定的实体时分数增加。
这些准则符合以下完整格式: |
|||
minecraft.killed_by | 次级准则包括所有实体的所有命名空间ID,其中冒号替换为点号。玩家被指定的实体杀死时分数增加。
这些准则符合以下完整格式: |
基于复合准则的所有分数都可以通过命令修改。
基岩版[]
目前只支持dummy
准则,因此分数仅能由命令修改。
显示位置[]
通过/scoreboard objectives setdisplay
命令(参见记分项命令),玩家具体记分项中的分数能在游戏中以某些“形式”显示出来。
每个“显示位置(Display Slot)”可以依次显示一个记分项,并且多个显示位置可以被用于相同或不同的记分项。
显示位置 | 描述 |
---|---|
list 列表 |
在玩家列表中以黄色文字在玩家名称后显示分数信息(默认为Tab键),并不会显示记分项名称。 在暂停页面的玩家列表显示分数信息。 |
sidebar 侧边栏 |
在屏幕的右侧显示。在列表的最上方显示记分项的显示名称(display name),并显示玩家的高分榜。值得注意的是,即使玩家离线,如果在该记分项下存在一定分数也会在“侧边栏”中进行显示,并且没有痕迹的玩家也不会被显示。除此之外,以#开头的伪造的玩家名称在任何情况下都不会在侧边栏可见。 |
sidebar.team.<color> 侧边栏.队伍.<颜色> |
有16个的具体队伍的侧边栏显示形式。它们和标准的侧边栏同样操作,但只有指定颜色的队伍中的玩家可以看见(例如"sidebar.team.green"绿色队伍中的玩家可以看见)。有效的颜色是:"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", 和 "white"。 |
below_name belowname 名称下方 |
在玩家的名称牌之下,在他们的头之上,于记分项的显示名称(display name)后面显示分数。在10个方块以外、玩家潜行时隐藏。这一显示位置在单人游戏中不可见。 |
命令列表[]
记分项命令[]
命令 | 描述 | 结果 |
---|---|---|
scoreboard objectives list | 列出所有存在的记分项、显示名称与准则。 | 在Java版中,总是成功。在基岩版中,如果没有记分项则失败。 |
scoreboard objectives add <记分项> <准则> [<显示名称>] scoreboard objectives add <记分项:字符串> dummy [显示名称:字符串] |
创建一个具有给定的名称、准则、可选的显示名称的记分项。<记分项> 必须是小于16个字符的纯文本;在基岩版中,还可以被引号包围。<准则> 必须是有效的准则类型。<显示名称> 必须是原始JSON文本,如果未指定,默认为<objective> ;在基岩版中,它还可以是非数字的纯文本。所有的参数均区分大小写。在基岩版中,dummy是当前唯一支持的额准则。参考上面的段落以参考这些参数的更多信息 |
如果<记分项> 已存在则失败。
|
scoreboard objectives remove <记分项> scoreboard objectives remove <记分项:字符串> |
删除记分板系统中该记分项的所有有关内容。记分项、玩家分数的数据都会被删除,且如果记分项在显示位置上,该显示位置将会被清空。 | 如果<记分项> 不存在则失败。
|
scoreboard objectives setdisplay <位置> [<记分项>] scoreboard objectives setdisplay <list|sidebar> [记分项:字符串] [ascending|descending] scoreboard objectives setdisplay belowname [记分项:字符串] |
在指定位置显示指定记分项的分数信息。合法的位置已在显示位置里列出并描述。在基岩版中,如果位置是list 或sidebar ,则还有可选的参数ascending|descending 来指定排序顺序。注意记分项参数是可选的,如果不提供,则该显示位置会被清空(回到其默认状态)。 |
如果指定了<记分项> 但它存在则失败。注意清空位置也算成功。
|
scoreboard objectives modify <记分项> displayname <名称> | 更改显示未知中记分板的显示名称。 | 被指定的记分项必须存在。名称必须是JSON文本组件。 |
scoreboard objectives modify <记分项> rendertype (hearts|integer) | 在列表将记分项<记分项>的数值以爱心(hearts)或数字(integer)显示。 | 被指定的记分项必须存在。 |
玩家命令[]
命令 | 描述 | 成功条件 |
---|---|---|
scoreboard players list [目标] | 显示所有被记分板系统追踪的实体。可选的实体名称参数项可用以显示指定实体的所有分数,且往目标填写*(星号)会显示所有正被记分板跟踪的实体。 | 如果需要指定,填写的目标必须记有分数。如果不填写目标,至少需要有一个实体正被记分板系统追踪。 |
scoreboard players get <目标> <记分项> |
显示该实体在记分项上的分数。 | 目标只能是一个实体,至少需要有一个实体正被记分板系统追踪。 |
scoreboard players set <目标> <记分项> <分数> | 设置实体目标在记分项记分项上的分数为分数,并在已有分数存在时覆盖之。*可以用于目标项以代表所有正在被记分板追踪的实体。 | 填写的记分项必须存在且不是只读型,分数必须介于-2147483648到 2147483647之间,两个数字包括在内。需要注意目标项的实体或玩家不一定要在线甚至是存在。 |
scoreboard players add <目标> <记分项> <数量> | 往实体目标在记分项记分项上的分数增加数量分。如果没有分数则当作0分修改。*可用以代表所有正在被记分板追踪的实体。 | 记分项必须存在且不能为只读型,数量必须在1到2147483647之间,两个数字包括在内。需要注意目标项的实体或玩家不一定要在线甚至是存在。 |
scoreboard players remove <目标> <记分项> <数量> | 从实体目标在记分项记分项上的分数扣除数量分。如果没有分数则当作0分修改。*可用以代表所有正在被记分板追踪的实体。 | |
scoreboard players random <目标> <记分项> <最小值> <最大值> |
把实体目标在记分项上的分数设为一个从最小值到最大值的随机数,包含最大最小值。 | <记分项>和<目标>必须存在, <最小值> 必须小于<最大值>,且<最小值> 和<最大值>都必须在-2147483648到2147483647之间(包含) |
scoreboard players reset <目标> [记分项] | 清空实体目标的一项或所有分数。如果指定了记分项记分项,只清空对应记分项的分数;否则删除实体所有记分项上的分数。需要注意这不仅仅是设分数为0:实体将会整个从记分板上被移除(或从给定的记分项)。*可用以代表所有正在被记分板追踪的实体。 | 总会成功,即便实体在该记分项中并没有分数。 |
scoreboard players test <目标> <记分项> <最小值> <最大值> |
检测记分项是否在最小值和最大值范围内(若不填,默认最大值为整型数最大值2147483647)。最小值和最大值可替换为星号(*),以表示整型数范围内的任何值(-2147483648 ~ 2147483647)。 | 在 <目标>的 <记分项>上的分数在<最小值> 和 [<最大值>]之间时成功. |
scoreboard players enable <目标> <触发器> |
使实体目标可以对指定触发型记分项触发器使用命令/trigger 。在此操作完成前,实体目标对记分项使用/trigger 时将会失败。一旦实体对记分项使用了/trigger ,记分项将再次变得不可操作,需要再次使用此命令。*可用以代表所有正在被记分板追踪的实体。 |
填写的触发器必须是一个准则类型为trigger的记分项。 |
scoreboard players operation <目标> <目标记分项> <操作> <选择器> <记分项> | 使用选择器在记分项记分项上的分数作为输入,进行运算操作后把结果作为记分项实体目标在目标记分项上的分数。
运算操作<操作> 可以是:
除><外,记分项的分数会保持不变。"*"可代替目标和选择器中的一个用以代表所有正在被记分板追踪的实体。 |
填写的记分项与目标记分项 必须存在,目标记分项必须支持修改,且所有被使用的记分项/选择器必须在对应记分项上有分数并且运算操作只有在记分项和选择器都存在时才会成功。需要注意目标实体不一定要存在。 若<操作>为"/=",<记分项>的分数值不能为0。 |
NBT格式[]
记分板数据存储在地图文件夹里“data”文件夹下的scoreboard.dat文件中,存储形式为GZip的NBT格式。
- 根标签。
- data:记分板数据。
- DisplaySlots:显示特定记分项的显示位置设置。如果一个位置上没有需要显示的记分项,则对应位置的标签不存在。
- slot_0:"list"位置显示的记分项的内部名称。
- slot_1:"sidebar"位置显示的记分项的内部名称。
- slot_2:"belowName"位置显示的记分项的内部名称。
- slot_3:"sidebar.team.black"位置显示的记分项的内部名称。
- slot_4:"sidebar.team.dark_blue"位置显示的记分项的内部名称。
- slot_5:"sidebar.team.dark_green"位置显示的记分项的内部名称。
- slot_6:"sidebar.team.dark_aqua"位置显示的记分项的内部名称。
- slot_7:"sidebar.team.dark_red"位置显示的记分项的内部名称。
- slot_8:"sidebar.team.dark_purple"位置显示的记分项的内部名称。
- slot_9:"sidebar.team.gold"位置显示的记分项的内部名称。
- slot_10:"sidebar.team.gray"位置显示的记分项的内部名称。
- slot_11:"sidebar.team.dark_gray"位置显示的记分项的内部名称。
- slot_12:"sidebar.team.blue"位置显示的记分项的内部名称。
- slot_13:"sidebar.team.green"位置显示的记分项的内部名称。
- slot_14:"sidebar.team.aqua"位置显示的记分项的内部名称。
- slot_15:"sidebar.team.red"位置显示的记分项的内部名称。
- slot_16:"sidebar.team.light_purple"位置显示的记分项的内部名称。
- slot_17:"sidebar.team.yellow"位置显示的记分项的内部名称。
- slot_18:"sidebar.team.white"位置显示的记分项的内部名称。
- Objectives:目前所有记分项的列表。
- :一个记分项。
- CriteriaName:该记分项的准则。
- DisplayName:记分项的显示名称,是一个JSON文本。如果在创建记分项时没有定义,则会为
{"text":"记分板内部名称"}
。 - Name:记分项的内部名称。
- RenderType:数据储存的类型。可以为
integer
(整型)和hearts
(心)。默认为integer
。
- :一个记分项。
- PlayerScores:在记分板系统中玩家和对应分数的列表。
- :拥有分数的玩家及记分项。
- Locked:代表记分项是否处于锁定状态。只有记分项准则为"trigger"(触发器)时有实际用途:在玩家使用
/trigger
对记分项操作前此值必须为false。 - Name:记分项中拥有此分数的玩家名称。
- Objective:玩家分数所在记分项的内部名称。
- Score:此记分项中玩家的分数。
- Locked:代表记分项是否处于锁定状态。只有记分项准则为"trigger"(触发器)时有实际用途:在玩家使用
- :拥有分数的玩家及记分项。
- Teams:所有队伍的列表。
- :一个队伍。
- AllowFriendlyFire:表示队伍内的玩家是否可以攻击同一个队伍的玩家。
- CollisionRule:队伍内的玩家互相碰撞的规则。可以为
always
(总是进行碰撞)、never
(不进行碰撞)、pushOtherTeams
(可以与其他队伍碰撞)和pushOwnTeam
(只与本队成员碰撞)。 - DeathMessageVisibility:队伍内玩家死亡信息的可见性。可以为
always
(总能看到)、never
(不能看到)、hideForOtherTeams
(对其他队伍隐藏)和hideForOwnTeam
(对自身队伍隐藏)。 - DisplayName:队伍的显示名称,是一个JSON文本。如果在创建队伍时没有涉及,则使用下文中的名称标签。
- MemberNamePrefix:加在队员的名称前的前缀,是一个JSON文本。
- MemberNameSuffix:加在队员的名称后的后缀,是一个JSON文本。
- Name:队伍的内部名称。
- NameTagVisibility:队伍内玩家名称标签的可见性。可以为
always
(总能看到)、never
(不能看到)、hideForOtherTeams
(对其他队伍隐藏)和hideForOwnTeam
(对自身队伍隐藏)。 - Players:队伍中玩家名字的列表。
- :队伍中玩家的名字。
- SeeFriendlyInvisibles:表示队伍内的玩家是否可以看到同一队伍的隐身的玩家。
- TeamColor:队伍颜色的文本名(black、dark_blue,等等)。未设置颜色时不存在。
- :一个队伍。
- DisplaySlots:显示特定记分项的显示位置设置。如果一个位置上没有需要显示的记分项,则对应位置的标签不存在。
- DataVersion:数据版本。
- data:记分板数据。
历史[]
Java版 | |||||
---|---|---|---|---|---|
1.5 | 13w04a | 加入了记分板。 | |||
13w05a | 加入了队伍相关功能。 | ||||
1.7.2 | 13w36a | 加入了统计相关记分项准则。 | |||
1.8 | 14w02a | 除了玩家外的实体也能加入队伍并拥有记分项分数了。 | |||
14w06a | 加入了trigger 队伍击杀相关记分项准则。
| ||||
加入了/scoreboard players enable 命令。 | |||||
"*" 可以用作玩家名称参数代表所有正被记分板追踪的玩家了。 | |||||
为/scoreboard players reset 命令加入了objective 参数。 | |||||
统计记分项准则使用ID名而不使用ID了。 | |||||
加入了achievement.overpowered 记分项准则。 | |||||
14w07a | 加入了/scoreboard players operation 与scoreboard players test 命令。
| ||||
以"#"开头的虚拟玩家的分数不再显示于侧边栏。 | |||||
加入了指定队伍的侧边栏显示位置。 | |||||
加入了nametagVisibility 队伍选项。 | |||||
14w10a | 加入了deathMessageVisibility 队伍选项。
| ||||
为/scoreboard players set 、/scoreboard players add 和/scoreboard players remove 命令加入了dataTag 参数。 | |||||
加入了stat.crouchOneCm 、stat.sprintOneCm 和stat.timeSinceDeath 记分项准则。 | |||||
14w25a | 为/scoreboard players operation 命令加入了= 、< 和> 。 | ||||
14w29a | 玩家/实体在侧边栏名字的第二顺序依照字母表储存。 | ||||
14w30a | 加入了stat.talkedToVillager 和stat.tradedWithVillager 记分项准则。 | ||||
? | 为/scoreboard players operation 加入了>< 。 | ||||
1.8.2 | 加入了cauldronFilled 、stat.cauldronUsed 、stat.armorCleaned 、stat.bannerCleaned 、stat.brewingstandInteraction 、stat.beaconInteraction 、stat.dropperInspected 、stat.hopperInspected 、stat.dispenserInspected 、stat.noteblockPlayed 、stat.noteblockTuned 、stat.flowerPotted 、stat.trappedChestTriggered 、stat.enderchestOpened 、stat.itemEnchanted 、stat.recordPlayed 、stat.furnaceInteraction 、stat.craftingTableInteraction 和stat.chestOpened 记分项准则。 | ||||
1.9 | 15w32a | 加入了stat.sneakTime 记分项准则。 | |||
15w32b | 加入了/scoreboard players tag 命令。
| ||||
加入了xp 、food 和air 记分项类型。 | |||||
15w33a | 加入了stat.pickup 和stat.drop 记分项准则。
| ||||
加入了armor 和level 记分项类型。 | |||||
15w36a | 加入了collisionRule 。 | ||||
1.13 | ? | 记分板名称不能再包含: 等字符。 | |||
17w45a | 移除了/scoreboard players tag 和/scoreboard teams ,分别被/tag 和/team 替代。 | ||||
pre7 | 加入了/scoreboard objectives modify 。 | ||||
1.13.1 | 18w31a | 记分板的计算符号%= 从% 被更改为Math.floorMod 。 | |||
1.18 | 21w37a | 取消了记分板名称与分数持有者的16个字符的长度限制。 | |||
1.20.2 | 23w31a | 将显示位置belowName 重命名为below_name 。 | |||
基岩版 | |||||
1.7.0 | 1.7.0.2 | 加入了记分板部分功能。 | |||
加入了dummy 准则。 | |||||
1.19.80 | 1.19.80.20 | 取消了记分项的16个字符的长度限制。 |
参考[]
语言