第四十一章 objectives——管理一个计分项
如何创建并管理一个计分项呢?这就需要使用/scoreboard。
/scoreboard
作用:控制计分板
需要权限等级:Java-2,基岩-1
需要作弊:是
格式(本章所涉及):
/scoreboard objectives ...
Java版
... add <计分项名称><准则>[<显示名称:JSON>]——添加计分项(注:JE1.13以下版本“显示名称”参数的值类型为字符串)
... list ——列出当前所有计分项
... modify <计分项名称>...——对指定计分项进行一些更改操作[1.13更新]
...... disbr /layname <显示名称:JSON>——更改指定计分项的显示名称[1.13更新]
...... rendertybr /e <hearts|integer>——指定显示该计分项数值时是采用爱心(hearts)还是数值(integer)显示[1.13更新]
... remove <计分项名称>——删除计分项
... setdisbr /lay <显示位置>[计分项名称]——指定特定的位置显示指定的计分项或取消显示计分项。
基岩版
... add <计分项名称:字符串><准则>[<显示名称:字符串>]——添加计分项
... list ——列出当前所有计分项
... remove <计分项名称:字符串>——删除计分项
... setdisbr /lay <显示位置>[计分项名称:字符串][排序方法:ascending|descending]——指定特定的位置显示指定的计分项或取消显示计分项。
现在让我们来试一试。首先来尝试添加一个最基本的计分项:
/scoreboard objectives add coin dummy 金钱——仅Java1.13以下和基岩版
/scoreboard objectives add coin dummy “金钱“——仅Java1.12.2以上
上面的指令将会添加一个准则为dummy,显示名称为“金钱”,叫做“coin”的计分项。
添加计分项时我们需要特别注意准则的选择。正如上一章所说的“准则决定了记分项具体要跟踪的信息”,一个计分项的作用,很大程度上是由准则决定的。
准则在基岩版只有dummy(虚拟型),在Java版有两大类:单一准则和复合准则。
单一准则不可自定义,是Mojang已经给你预设好的准则,目前有如下几种:
dummy:虚拟型,最基础的准则,仅可通过/scoreboard br /layers指令修改。
trigger:触发器,类似于dummy,但所有玩家均可修改自己的trigger型计分项。具体内容会在第九十八章讲到。
deathCount:玩家死亡次数,当玩家死亡时游戏会自动增加他的分数,可以通过指令修改。(Java版的死亡榜就是这么搞的)
br /layerKillCount:玩家击杀(玩家)数,当玩家击杀其他玩家时游戏会自动增加他的分数,可以通过指令修改。
totalKillCount:玩家击杀(生物)数,当玩家击杀其他任意生物时游戏会自动增加他的分数,可以通过指令修改。
health:玩家生命值,伤害吸收和生命提升的血也会计算在其中。当玩家第一次刷新生命值之前该玩家的分数会为0。不可通过指令修改。
xbr /:玩家经验值,不可通过指令修改。
level:玩家经验等级(注意和xbr /准则区分),不可通过指令修改。
food:玩家饱和度,和health准则一样,在玩家第一次刷新饱和度之前该玩家的分数会为0,不可通过指令修改。
air:玩家空气值(就是潜水时显示的那个),不可通过指令修改。
armor:玩家盔甲值,和health准则一样,在玩家第一次刷新盔甲值之前该玩家的分数会为0,不可通过指令修改。
复合准则可以自定义,其格式如下:
<基础准则ID:命名空间>:<次级准则>(1.12更新后)
复合准则实际上就是Mojang将你菜单界面中的“统计数据”和计分板绑定在一起而已。基础准则具体有:
teamkill.<队伍颜色>——玩家杀死指定颜色的队伍成员便会增加分数
killedByTeam.<队伍颜色>——玩家被指定颜色的队伍成员杀死便会增加分数
minecraft.custom:<Emmm....不知道怎么描述>——对应的是统计信息菜单中的“通用”一栏信息。比如准则minecraft.custom:minecraft.leave_game就是跟踪每一名玩家统计菜单中的“游戏退出次数”。具体的每项统计信息所对应的命名空间ID就太多了,需要的可以自行到Minecraft Wiki查看(指明路线:统计信息→命名空间ID→统计信息列表)。
minecraft.br /icked_ubr /:<物品ID>——玩家捡起指定物品时便会增加分数(对应统计菜单“物品”一栏的“拾起个数”)
minecraft.drobr /br /ed:<物品ID>——玩家丢弃指定物品时便会增加分数(对应统计菜单“物品”一栏的“丢弃个数”)
minecraft.used:<物品ID>——玩家使用指定物品时便会增加分数(对应统计菜单“物品”一栏的“使用次数”)
minecraft.broken:<物品ID>——玩家消耗指定物品时便会增加分数(对应统计菜单“物品”一栏的“工具消耗数”)
minecraft.crafted:<物品ID>——玩家合成指定物品时便会增加分数(对应统计菜单“物品”一栏的“合成次数”)
minecraft.mined:<方块ID>——玩家挖掘指定方块时便会增加分数(对应统计菜单“方块”一栏的“开采次数”)
minecraft.killed:<实体ID>——玩家击杀指定实体时便会增加分数(对应统计菜单“生物”一栏的“你杀死了n只xxx”中的n)
minecraft.killed_by:<实体ID>——玩家被指定实体击杀时便会增加分数(对应统计菜单“生物”一栏的“xxx杀死了你n次”中的n)
注意:Java1.13更新中将统计信息中的“方块”并到“物品”一栏。
现在,我们有了一个计分项。但如果你想要修改显示名称该怎么办?
在基岩版和Java1.13以下版本中,你只能删了重新搞。这时候你就需要使用remove:
/scoreboard objectives remove coin
这样子就可以删掉叫做coin的计分项。
但如果你忘记了计分项的名称该怎么办?使用list列出所有计分项以查看:
/scoreboard objectives list
(注意,在Java1.12.2以上版本中,如果你的计分项设置了显示名称,那么list只会列出该计分项的显示名称,要查看具体的名称需要将鼠标移到列出的计分项显示名称的上方)
在Java1.12.2以上版本中,有一种便捷的方法可以不删除计分项就可以更改显示名称:modify。
举个例子:假设你想要修改我们刚才创建的coin计分项的名称为“软妹币”,你就需要执行:
/scoreboard objectives modify coin disbr /layname “软妹币“
modify不只是可以修改名称,它还可以修改计分项中玩家分数的值的显示方式。
当然在研究这个值显示方式之前,我们得了解一下setdisbr /lay的作用。
上面列格式时就已经提到过setdisbr /lay的作用了:显示计分项于某个位置。
具体的这个位置有哪些呢?
list——Java版中是在Tab玩家列表中显示每名玩家的分数(不显示具体是哪个计分项),基岩版中是在暂停界面显示。
sidebar——在屏幕的右侧显示列表,并在列表的最上方显示该计分项的显示名称
sidebar.team.<队伍颜色>——和sidebar作用相同,只是只会给指定颜色的队伍查看[仅Java版]
belowName——在玩家的头上面显示该玩家的分数
举个例子:
/scoreboard objectives setdisbr /lay sidebar coin
执行指令,就可以将我们刚才创建的coin计分项以列表的形式显示在右侧。需要注意,如果已经有其他计分项显示在该位置,执行该条指令后将会覆盖显示为coin计分项。
在基岩版,使用list和sidebar位置时还可以指定列表排序方式:ascending(从小到大)和descending(从大到小[默认])。比如:
/scoreboard objectives setdisbr /lay sidebar coin ascending
就可以将最穷的玩家显示在列表最上方的位置。
如果你仔细看了setdisbr /lay的格式,你会发现“计分项名称”这个参数是选填的。那如果不填会发生什么?
重置该位置,也就是取消显示计分项在该位置。比如:
/scoreboard objectives setdisbr /lay sidebar
就可以让右侧一栏重回清净。
通过modify的rendertybr /e我们还可以修改指定计分项的分数显示时的样子。Mojang给了我们两个选择:hearts(生命值)和integer(数值)。
比如:
/scoreboard objectives modify coin rendertybr /e hearts
就会将coin计分项中每名玩家的分数以生命值的形式显示出来。
需要注意的是,生命值形式仅支持Tab玩家列表。
.......
.......
.......
在Java1.13更新前,计分项的复合准则并不是这样,而是:
<一级准则>.<二级准则>.[次一级准则].[次二级准则](1.13更新前)
复合准则也并不是完全和统计菜单的数据绑定。在1.13更新前,复合准则具体有如下内容:
achievement.<成就ID>——(1.12版本中被移除)以一个玩家达成指定成就数量作为值。比如achievement.diamonds就是“钻石”成就的达成次数。这个成就的达成次数是什么意思呢?举个例子,你获得到1块钻石,就达成了“钻石”成就1次。如果你再次获得一块钻石,虽然游戏不会告诉你你又一次达成了“钻石”成就,但是你实打实地达成了这个成就两次。由于Minecraft Wiki会慢慢舍弃旧游戏内容,我就把成就ID全放这了,具体指的是什么成就自己扔进生草机里翻译:“acquireIron“、“bakeCake“、“blazeRod“、“bookcase“、“breedCow“、“buildBetterPickaxe“、“buildFurnace“、“buildHoe“、“buildPickaxe“、“buildSword“、“buildWorkBench“、“cookFish“、“diamonds“、“diamondsToYou“、“enchantments“、“exbr /loreAllBiomes“、“flyPig“、“fullBeacon“、“ghast“、“killCow“、“killEnemy“、“killWither“、“makeBread“、“mineWood“、“onARail“、“obr /enInventory“、“overkill“、“overbr /owered“、“br /ortal“、“br /otion“、“snibr /eSkeleton“、“sbr /awnWither“、“theEnd“、“theEnd2“。
stat.<内容>——对应1.13更新后的“minecraft.custom:<emmm....不知道怎么描述>”。比如stat.sneakTime准则就是玩家的潜行时间。“内容”可以填“animalsBred“、“armorCleaned“、“bannerCleaned“、“beaconInteraction“、“boatOneCm“、“brewingstandInteraction“、“cakeSlicesEaten“、“cauldronFilled“、“cauldronUsed“、“chestObr /ened“、“climbOneCm“、“craftingTableInteraction“、“crouchOneCm“、“damageDealt“、“damageTaken“、“deaths“、“disbr /enserInsbr /ected“、“diveOneCm“、“drobr /“、“drobr /br /erInsbr /ected“、“enderchestObr /ened“、“fallOneCm“、“fishCaught“、“flowerPotted“、“flyOneCm“、“furnaceInteraction“、“hobr /br /erInsbr /ected“、“horseOneCm“、“itemEnchanted“、“jumbr /“、“junkFished“、“leaveGame“、“minecartOneCm“、“mobKills“、“noteblockPlayed“、“noteblockTuned“、“br /igOneCm“、“br /layerKills“、“br /layOneMinute“、“recordPlayed“、“sneakTime“、“sbr /rintOneCm“、“swimOneCm“、“talkedToVillager“、“timeSinceDeath“、“tradedWithVillager“、“trabr /br /edChestTriggered“、“treasureFished“和“walkOneCm“。
stat.craftItem.<物品数字ID或英文ID>——对应1.13更新后的minecraft.crafted:<物品ID>。如stat.craftItem.261准则就是玩家合成弓的次数,stat.craftItem.minecraft.bow也是玩家合成弓的次数。注意,使用英文ID,命名空间就需要作为次1级准则,物品ID就要放到次2级准则中。
stat.useItem.<物品数字ID或英文ID>——对应1.13更新后的minecraft.used:<物品ID>,用法和stat.craftItem.<物品数字ID或英文ID>一样。
stat.breakItem.<物品数字ID或英文ID>——对应1.13更新后的minecraft.broken:<物品ID>,用法也一样。
stat.mineBlock.<方块数字ID或英文ID>——对应1.13更新后的minecraft.mined:<方块ID>,用法仍然一样。
stat.killEntity.<实体ID>——对应1.13更新后的minecraft.killed:<实体ID>。只不过支持的实体ID相比于1.13更新后的版本要少许多,并且不支持mod实体,因为没有命名空间。如stat.killEntity.Villager就是杀死村民的次数。
stat.entityKilledBy.<实体ID>——对应1.13更新后的minecraft.killed_by:<实体ID>,用法和stat.killEntity.<实体ID>一样。
需要注意,在Java1.8版本之前,stat.craftItem等准则是不支持物品和方块的ID名(英文ID)的。
本章到此结束。