第六十一章 /stats与指令的输出结果
如果我们想要仅凭指令就弄出起床战争,别的先不说,单是检测玩家人数是否达标就有点难搞。
我们在第三十六章知道了一条检测实体的指令——/testfor,也知道了/testfor在命令方块执行成功后输出的红石信号强度等于探测到的实体数量。但是,如果仅仅靠输出的红石信号做判断,最大也就只能准确判断0~14个,大于14的数量就无法判断了。这时候我们该怎么办呢?
想一想,能否直接把/testfor输出的信息同步到记分板上呢?
答案是肯定的。Mojang给了我们一条指令用于解决这个问题:stats
/stats(仅存在于Java版1.13更新前,该指令已于Java1.13更新中移除)
作用:通过指令执行的结果来更改记分板上的分数
需要权限等级:Java-2
需要作弊:是
格式:
/stats block <坐标> set <需要追踪的结果类型><被记分板追踪的目标:目标选择器><计分项>——跟踪并获取某个方块运行指令的指定类型的结果,根据结果修改记分板上的分数
/stats block <坐标> clear <需要取消追踪的结果类型>——取消跟踪某个方块运行指令的指定类型结果
/stats entity <实体:目标选择器> set <需要追踪的结果类型><被记分板追踪的目标:目标选择器><计分项>——跟踪并获取指定实体运行指令的指定结果,根据结果修改记分板上的分数
/stats entity <实体:目标选择器> clear <需要取消追踪的结果类型>——取消跟踪指定实体运行指令的指定结果
那么/stats指令到底该如何使用呢?
指令的输出结果有五种类型:
①指令执行成功的次数(SuccessCount)
②指令的查询结果(QueryResult)
③受到该指令影响的物品数量(AffectedItems)
④受到该指令影响的实体数量(AffectedEntities)
⑤受到该指令影响的方块数量(AffectedBlocks)
我们使用/stats指令时,必须要指定我们到底想要让/stats指令获取什么类型的执行结果,因为每一种执行结果的值都可能不一样。
比如使用clear指令检测玩家背包内有多少个指定物品时,如果我们获取的是SuccessCount结果类型,那么只会是1或0;而如果我们获取的是AffectedItems,获取到的就是物品的数量。
使用/stats时,不仅要指定需要获取什么,还要指定两个重要的东西:
①从哪儿获取?
②输出到哪儿?
/stats指令可以跟踪指定的方块和实体来获取执行在它们身上的指令的结果。看到“跟踪”两字没有?没错,/stats指令并不是立马就获取到执行指令的结果,而是先跟踪指定的目标,比如一个命令方块,只要这个命令方块执行了指令,它就会将指令的结果输出到指定的计分项当中。
/stats指令会将得到的值输出到指定的计分项并修改该计分项中指定目标的分数。比如/stats获取到的结果是13,它就会修改分数到13(除非指定的计分项是只读计分项)。
这就是/stats的使用方法,看起来还是蛮简单的。现在就让我们实践一下,熟悉一下具体的操作流程。
假设这是一个命令方块,它位于坐标12,24,81处——>▦
我们要获取整个服务器现在一共有多少名玩家,首先就需要准备一个计分项以及一个正在被该计分项追踪的目标。请注意,必须是在该计分项上有分数的目标,否则/stats会无法修改分数(因为/stats指令只能修改分数而不能添加追踪目标)!
假设你已经准备好一个叫做information的计分项和一个正在被该计分项追踪的虚假玩家br /layers。现在,运行下面的指令:
/stats block 12 24 81 set SuccessCount br /layers information
此时游戏会返回信息:将SuccessCount项统计信息储存在了br /layers的information上。这样子写可能会误导一些玩家,实际上这时候才开始追踪,并没有开始获取结果并修改记分板上的分数。
为了方便观察,你可以把information计分项显示在侧边栏或其他地方,然后在▦命令方块处输入:
testfor @a
最后拉下拉杆。假设此时在线玩家为3,你就会发现br /layers的分数变成3了!
如果你拉下拉杆后服务器又进入一名玩家,此时你再次运行命令方块,你就会发现br /layers的分数又变为4了!
使用起来是不是很简单?别看用的时候很简单,清理的时候可别搞错了。
使用/stats指令追踪一个方块或实体,如果我们没有及时停止追踪,游戏就会一直追踪下去!因此,请你最好在指令执行完成后再加一句:
/stats block 12 24 81 clear SuccessCount
这句指令的意思是:停止追踪▦命令方块的SuccessCount类结果信息
清除时请注意一点,结果类型一定要一样!因为每一个追踪项都是精细到结果类型的,结果类型填错了就变成清理其他追踪项,这点一定要注意!如果你忘记了结果类型,只能把五个类型全部清一遍(Mojang没有提供查询追踪项的方式)。
这就是/stats指令的用法。使用/stats指令,你可以跟踪获取到方块执行指令的结果、玩家执行指令的结果和作用在跟踪目标上的/execute子命令运行的结果,并根据这些结果修改记分板上的分数。
对了,使用/stats时请注意一点,跟踪的目标有没有被其他正处于循环当中的execute指令影响到,如果有的话,获取到的结果就会被污染!!!
现在你会用/stats了吗?我们下一章见。
stats历史
Java
1.8——加入了/stats指令
1.13——移除了/stats指令,改用更先进的/execute存储子命令。关于/execute在Java1.13更新后的使用方式,我们下一卷会讲到。