【指令】我的世界原版检测上线玩家2cb

有视频看呦~


#循环,无条件,保持开启
#为[标签所记录的所有玩家]移除标签onlineplayers
#连锁,无条件,保持开启
#为[服务器在线玩家]增加标签onlineplayers
#原理:
#我们知道,命令执行至少需要一个执行体和一条执行命令。

在我们这个体系中

我们可以想到,执行体为玩家,但又不能是所有在线玩家,所以,我们需要筛选出我们想要的玩家。
那用什么筛选呢?
显然易见,标签,计分板就是不错的选择,为使command_block数量达到最少,我选择标签筛选。
那如何筛选出在线玩家呢?
我们首先移除所有玩家(*)的标签(如onlineplayers)(此前并没有设置标签)(tag * remove onlineplayers),再给在线玩家增加(如tag @a add onlineplayers)标签,这样以来,在线玩家在命令块执行后都为有标签。
那如何筛选出刚进入游戏的玩家呢?
我们又知道,命令块执行命令需要时间,这个时间叫做游戏刻,而刚上线的玩家正好有一个游戏刻的时间,命令方块没能赋予其标签,在一个游戏刻之后,则会被增加标签,根据此特性,我们可以将其划分为已在线玩家(有onlineplayers标签),没有标签的玩家视为未上线玩家和刚进入游戏(无onlineplayers标签)。
故而我们区分出了刚进入游戏玩家和已在线玩家。

执行命令:

筛选出玩家之后,我们只需要将选择器@a[tag=onlineplayers]([注]在线玩家)和@a[tag=!onlineplayers]([注]刚进入游戏玩家)。例子如下
execute @a[tag=!onlineplayers] ~~~ tellraw @a {"textraw":[{"text":"<"},{"selector":"@s"},{"text":"> §l§4水视频真快乐,233"}]}
#循环,无条件,保持开启
tag * remove onlineplayers
#连锁,无条件,保持开启
tag @a add onlineplayers
#连锁,无条件,保持开启

在此补充:*表示该选择器所追踪的所有玩家,包括下线玩家,@a只选择上线玩家

执行效果:

最后,该命令执行效果为,每一位刚进入游戏的玩家都会向聊天栏发送 水专辑真快乐,233,假设进入的玩家叫 唱、跳、rap 就会显示
<唱、跳、rap> 水专辑真快乐,233(看不见我看不见我,哈哈哈)

