大家好,我是星河
今天教大家计分板的命令
stats指令是是记分板中的一环,可以根据其他命令的执行结果来更新记分板目标。具体来说,就是根据其他命令方块或者在玩家本身执行命令的结果,来改变相应记分板的分数。
下面给出基本格式:
stats block <x> <y> <z> set <统计> <选择器> <目标>
stats entity <选择器2> set <统计> <选择器> <目标>
此指令主要用于将统计命令执行结果的来源(实体或者命令方块)与一个记分板“绑定”。如果命令执行的来源为方块,则用第一条block模式:如果命令执行的目标为来源,则用第二条entity模式。
x,y,z为命令统计数据的来源方块所处位置,目标为要将统计结果记录为分数的记分板名称,而<统计>有五种,必须是以下其中之一。
AffectedBlocks — 返回受命令影响的方块的数量.
AffectedEntities — 返回受命令影响的实体的数量。
AffectedItems —返回受命令影响的物品的数量。
QueryResult — 返回命令的查询结果。
SuccessCount — 返回一个命令成功执行的次数
关于五种统计的详细说明,不做过多文字讲解。
注意事项:①若命令统计数据的来源是命令方块,且命令方块中为execute指令时,由于execute指令最终执行对象仍然是实体,此时虽然此命令处在命令方块中,但是应用entity模式。
②在首次创建记分板并用stats指令与某来源“绑定”时,会出现记分板分数无变化的情况,需要手动将目标选择器在记分板上的分数设为0。
③stats entity <选择器2> set <统计> <选择器> <目标>。在这条指令中,选择器2起到类似于检测的作用,选择器二为要检测的目标,后面的选择器为记分板分数所在的实体。若选择器二为@a,选择器为@p,则对所有玩家进行相应的统计并将每个玩家的分数分别存到对应玩家的记分板上。
——————————————————————华丽丽的分割线———————————————————————
下面来看几个stats指令的简单应用举例:
一:用stats来统计人数
在一些地图中,经常能侧边栏的人数显示;例:
那么侧边是怎么做到显示剩余人数的呢,下面给出用stats指令的解决方案:
首先给所有的玩家一个药效:
/effect @a minecraft:saturation 40 0 true
此条命令放入循环命令方块执行,那么此命令给所有玩家药效,就相当于影响了所有的玩家,故选用AffectedEntities统计方式,来统计此命令影响的实体(玩家)数量,即使游戏中的人数。
创建记分板:
/scoreboard objectives add tj dummy 统计
另外为了最后的显示美观,创建显示专用记分板:
/scoreboard objectives add xs dummy 显示
召唤一个名rs的盔甲架用来存分数:
/summon Armor_Stand ~ ~ ~ {CustomName:"rs",CustomNameVisible:1b,NoGravity:0,Invisible:1}
手动将rs在tj上的分数设定0来“激活”
/scoreboard players set @e[type=armor_stand,name=rs] tj 0
将effect命令执行结果绑定到tj记分板上,且将分数存到盔甲架上:
/stats block x y z set AffectedEntities @e[type=armor_stand,name=rs] tj
x y z 为执行effect指令的命令方块坐标。
最后将盔甲架在tj记分板上的分数同步到xs记分板上,避免显示uuid影响美观
/scoreboard players operation 人数 xs = @e[type=armor_stand,name=rs] tj
在侧边栏显示xs记分板:
/scoreboard objectives setdisplay sidebar xs
这样一来,一个侧边栏显示实时人数就做好了 O(∩_∩)O
二:用stats来统计某区域内某种方块的数量
统计方块数量用处并不多,方法上这种比较简单
仍然先创建tj和xs两个记分板,见第一条举例。
既然要统计方块的数量,那么<统计>一定是选择命令影响的方块数量AffectedBlocks。在Minecraft中能够影响指定种类方块的指令非fill莫属。
首先选定要统计的区域
(为了看起来方便我用石头圈起来了)
假定我要统计钻石块的数量,接下来用fill指令把这个区域内的钻石块全部替换掉
/fill ~ ~ ~ ~10 ~6 ~10 air 0 replace diamond_block
则执行此指令之后,fill掉的钻石块数量即为此命令影响的方块数量
仍然召唤一个盔甲架用来存分数:
/summon Armor_Stand ~ ~ ~ {CustomName:"fks",CustomNameVisible:1b,NoGravity:0,Invisible:1}
手动将fks在tj上的分数设定为0来“激活”
/scoreboard players set @e[name=fks,type=armor_stand] tj 0
将fill命令执行的结果绑定到tj计分板上,并存到名为fkl的盔甲架上
/stats block x y z set AffectedBlocks @e[name=fks,type=armor_stand] tj
xyz为fill命令方块所在的坐标
将fks在tj上的分数同步到xs记分板上,循环执行
/scoreboard players operation 方块数 xs = @e[type=armor_stand,name=fks] tj
这样就大功告成了,让我们放几个钻石块试一下:
之后激活fill的命令方块
可以看到侧边栏方块数变为了5