玩家进入退出检测 - 我的世界OCO指令系列
最近在搞一些我的世界指令。
其中有这么一个指令,就是玩家进入退出的检测。
本指令不需要引用任何模块。
意义
玩家进入退出的检测是一个老生常谈的问题了。然而现在流传的大多数对应指令有很多缺陷,于是我研究出了一套功能较为全面,避免大多数缺陷的检测系统。
本检测系统有如下好处
- 指令编写工程化,可读性高
- 可以获得一段时间内退出或者进入的具体人数,避免了可能的误差,且检测间隔可调整。
- 可以通过标签获取到新进入的玩家。
- 作为附加功能,可以获得当前在线人数。
- 不包含红石。
有如下坏处:
- 出于指令的即时性考虑,只能作为框架在原命令方块组中间追加命令,而不能作为一个模块异步调用。
- 相对于其他的指令实现可能看起来比较复杂。
指令
由于我没有完整的构思就写了这个指令,所以不贴原理了。
scoreboard players operation TE-numLast TE = TE-num TE
scoreboard players set TE-num TE 0
execute @e ~~~ scoreboard players add TE-num TE 1
scoreboard players operation TE-diff TE = TE-num TE
scoreboard players operation TE-diff TE -= TE-numLast TE
execute @e ~~~ scoreboard players operation @s TE-tick -= TE-tick TE
tag @e add TE-new
tag @e[scores={TE-tick=0}] remove TE-new
scoreboard players add TE-tick TE 1
scoreboard players operation @e TE-tick = TE-tick TE
// 这里是指令插入点
tag @e[tag=TE-new] remove TE-new
除了第一个命令是循环之外,其余命令均为连锁命令方块,无延迟无条件。
用法
看指令也能看出来,这个实际上不是玩家的进入和退出的检测,而是实体的增加和减少的检测。这是因为可以通过修改在指令插入点内的指令的选择器来进行筛选。
在指令插入点内,可以通过 TE-new
标签获取新增的实体,通过 TE-num
的 TE
计分板获取当前实体数量,通过 TE-diff
的 TE
计分板获取相较于上次检查变化的数量。
博客园原文链接:https://www.cnblogs.com/QiFande/p/-/oco-test-enter,转载请注明。
如果你对本篇文章感兴趣,不如来看看肉丁土豆表的其他文章,说不定也有你喜欢的。