记分板变量(objective)
记分板变量简介
对象
注: 这里的对象不是objective, 而是被objective记录分数的玩家名/实体
因为这名字比较贴近真实情况, 易于理解
对象包括玩家的名字(这个玩家可以不存在)和实体(一切非方块和有坐标的东西,比如玩家、怪物和掉落状态的沙子),对象可以加入队伍,或是拥有分数(分数是储存在变量里的)
玩家死亡/离开游戏时储存在变量那里的分数不会消失, 然而实体消失时则会清除分数。
注意: 大部分命令也可以使用*代表所有拥有分数的对象。
变量(objective)
变量(objective, 官方译名为目标, 然而这和含义不符而且和别的字有冲突, 因此我们不使用)是记分板的重要组成部分,用于储存分数
每个地图可以有多个变量,每个变量可以追踪多个对象,而每个对象可以同时被多个变量追踪(有多个分数)
变量储存玩家分数(包括不存在的玩家)时会储存其名字, 而变量储存玩家以外的实体时会储存其uuid。
进阶
scoreboard.dat
- data
- PlayerScore
- entry(一个计分板储存单元,每个单元储存一个 "变量-对象-分数值" 关系)
- Locked(仅和trigger判据有关)
- Name(对象, 玩家名/实体UUID)
- Objective(变量名称)
- Score(分数)
对象与变量的关系
变量1 | 变量2 | 变量3 | 如此类推 | |
---|---|---|---|---|
对象1 | 分数(比如1) | 分数(比如2) | 分数(比如没有追踪) | ... |
对象2 | 分数(比如-1) | 分数(比如0) | 分数(比如120) | ... |
对象3 | 分数(比如-50) | 分数(比如0) | 分数(比如10000) | ... |
... | ... | ... | ... | ... |
例子里,对象1同时被变量1和2追踪,而变量3追踪了2个对象
变量组成部分
组成部分 | 用途 | 格式/限制 |
---|---|---|
变量名称 | 记分板命令、/trigger命令、选择器中的分数参数 | 1个字,中间不能有空格,区分大小写 建议使用英文、数字和 _ (下划线),否则可能报错/不能辨别(目标选择器) 不能长于16个字符(每个英文字母/下划线都是1个字符) |
判据 | 决定变量中不同对象分数的依据 | 见判据 |
显示名称 | 用较长的句子描述记分板的功能 由于不会使用在选择器中,所以可以用中文 |
显示名称最多能有32个字符(每个空格/符号/英文字母当一个字符) 所有minecraft能显示的字符都能使用 |
分数 | 以对象为单位储存,能够使用选择器/命令探测 | 每个对象的分数范围是-2,147,483,648 至 2,147,483,647,不支援小数 |
创建、删除、列出记分板变量
建立变量
命令格式
/scoreboard objectives add <变量名称> <判据> [显示名称]
显示名称可以不写。如果没有设定显示名称,它会自动用变量名称作显示名称
判据请参考下方的判据表。
例子
/scoreboard objectives add first_obj dummy 第一个记分板变量
就会建立一个叫first_obj的变量,显示名称是“第一个记分板变量”
Stats
成功: 记分板里没有同名变量
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 1
- QueryResult: 0
失败: 记分板里有同名变量
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 0
- QueryResult: 0
删除变量
命令格式
/scoreboard objectives remove <变量名称>
例子
/scoreboard objectives remove first_obj
就会删除名为“first_obj”的变量
如果出错,可能是因为你那个变量名称写错了
很有可能是大小写的问题
Stats
成功: 记分板里有指定变量
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 1
- QueryResult: 0
失败: 记分板里没有指定变量
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 0
- QueryResult: 0
列出所有变量
命令
/scoreboard objectives list
Stats
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 1
- QueryResult: 记分板中变量数
显示区(display slot)
透过显示区(display slot),变量能够透过不同的方式显示出来,这些方式包括
显示区 | 用途 |
---|---|
list | 在玩家列表(显示在线玩家的地方)显示分数 如果list里有变量,那么就算是在单人模式,这个玩家列表也能显示 |
sidebar | 侧边栏,在画面的右侧显示,上方为该变量的显示名称 对象的名称以两种方式显示,如果是玩家的名称,就直接显示;否则,就显示uuid 如果玩家名以#符号开头(比如#fake_player),这个玩家名的分数不会显示在侧边栏 只能显示15个对象 以分数大小排列,分数越大,排名越前 如果该变量还没有追踪任何的对象,那么侧边栏将会不可见 |
sidebar.team.<颜色> | 颜色有16种,在队伍部分会详细介绍 类似sidebar,但是,只有该颜色的队伍才能看见 |
belowName | 在玩家头下显示分数(只有在多人才可以看见,而且只有玩家才会显示) 当玩家在10格以外或在潜行(按shift),这个分数会不可见 显示方式: <分数> <显示名称> |
设定显示区
命令
/scoreboard objectives setdisplay <显示区> [变量名称]
如果不填写,则会清空该显示区(不显示任何变量的分数)
例子
/scoreboard objectives setdisplay sidebar first_obj
在侧边栏显示first_obj的分数
/scoreboard objectives setdisplay sidebar
清空侧边栏(不显示侧边栏)
Stats
成功: 记分板里有指定变量(如果有指定变量)及有指定显示区
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 1
- QueryResult: 0
失败: 记分板里没有指定变量/错误显示区名称
- AffectedBlocks: 0
- AffectedEntities: 1
- AffectedItems: 0
- SuccessCount: 0
- QueryResult: 0
判据(criteria)
判据(Criteria)就是确定变量中不同对象分数的依据,分为两类:一般判据和复合判据
一般判据通常比较短,比如dummy 就是其中一个判据。
复合判据就是后面有可以选择的参数, 如实体类型、方块类型、物品类型等等,用作储存相关统计数据。
由于判据是直接根据游戏统计判断, 因此只对玩家有效。
一般判据
判据 | 特点/用途 |
---|---|
dummy | 只有命令可以影响这个数值 |
trigger | 只有命令可以影响这个数值,但是,非管理员的玩家可以用/trigger命令来更改自己的这个数值 (当那个玩家的trigger变量被激活) 当这个数值被更改后,那个玩家的trigger变量会被关闭(如果要使用,需要重新激活) 详见“触发器” |
deathCount | 死亡次数,当玩家死后,他的分数自动加1 |
playerKillCount | 杀玩家次数,当他成功杀了玩家时,他这个分数会加1 |
totalKillCount | 杀敌次数,当玩家成功杀死任何东西时,这个分数会加1 |
health | 玩家的血量,每个心为2点。这个分数只能读取,不能改变 |
xp | 玩家的经验值。这个分数只能读取,不能改变 |
level | 玩家的经验等级。这个分数只能读取,不能改变 |
food | 0-20。代表玩家的饥饿度。可能在玩家饥饿度第一次发生改变前为0。这个分数只能读取,不能改变 |
air | 0-300。代表玩家在水底时的空气量。和air nbt相符。这个分数只能读取,不能改变 |
armor | 0-20。代表玩家的防护点数。可能在玩家防护点数第一次发生改变前为0。这个分数只能读取,不能改变 |
复合判据
复合判据都有多个参数(这些参数通常都是实体名称、方块/物品名称、统计项目、队伍颜色、成就等等)
复合判据的用法:判据 + '.' + 参数(比如stat.entityKilledBy.Zombie)
判据 | 特点/用途 | 参数种类 |
---|---|---|
achievement | 当玩家做了能够得到某个成就(参数)的动作时,这个分数就会加1 | 所有成就种类 比如acquireIron, bakeCake, blazeRod, bookcase, breedCow等等,参见附录 |
stat | 当玩家某个统计数值(参数)增加时,这个数值会相应的增加 | 所有统计,参见附录 |
stat.craftItem | 当玩家成功合成某个物品(参数)时,这个数值会增加1 | 所有物品的名字(要有“minecraft.”,和/give指令用的一样),参见附录 |
stat.useItem | 当玩家使用了某个物品(参数)时,这个数值会增加1 使用的定义: 当一个方块被放下 当工具所做的动作能消耗耐久度 用物品生成一个实体(飞溅药水、矿车等等) 物品被使用之后消失/变成另一个物品 唱片被放进唱片盒 注意,当物品用于对实体重新命名/驯服/喂饲/繁殖(对成年的生物使用生怪蛋也不算)/裝以馬鞍/縶上绳子/剪羊毛/榨奶/装蘑菇汤,就算途中那个物品消失了/消耗耐久度,那个分数也不会增加 |
所有物品的名字(要有“minecraft.”,和/give指令用的一样),参见附录 |
stat.breakItem | 当玩家手上的物品(参数)因耐久度消耗完毕而被破坏时,这个分数会加1 | 所有物品的名字,参见附录 |
stat.mineBlock | 当玩家成功挖掉某种方块(参数)时,这个分数会加1 挖掉的定义: 以能够掉落物品的方法破坏(适当的工具),除非这个方块在不使用附魔的情况下不会掉落 这个方块在被破坏时,会产生另一个方块(比如冰块) 注意 当玩家是在创造模式时,这个数值不会增加 当游戏规则“doTileDrops”被设定为否(方块被破坏时不会掉落物品)时,这个分数还是会工作 |
所有方块的名字(要有“minecraft.”,和/give指令用的一样,参见附录 |
stat.killEntity | 当玩家成功杀死某种生物(参数)时,这个分数会加1 | 所有实体的名字,参见附录 |
stat.entityKilledBy | 当玩家被某种生物(参数)杀死时,这个分数会加1 | 所有实体的名字,参见附录 |
teamkill | 当玩家杀死了某个颜色的队伍(参数)的玩家时,这个分数会加1 | 所有队伍的颜色,详见队伍设定中的颜色部分 |
killedByTeam | 当玩家被某个颜色的队伍(参数)的玩家杀死时,这个分数会加1 | 所有队伍的颜色,详见队伍设定中的颜色部分 |
stat.pickup | 当玩家捡起指定物品时会增加 | 所有物品的名字(要有“minecraft.”,和/give指令用的一样),参见附录 |
stat.drop | 当被玩家扔出指定物品(默认Q键)时会增加 | 所有物品的名字(要有“minecraft.”,和/give指令用的一样),参见附录 |