玩家离开时触发
简介
本系统会在玩家离开世界时执行您指定的命令。
注意: 您无法使用目标选择器对离开的玩家执行命令。但您可以使用玩家加入时触发系统在他们重新加入时执行命令。
设置
在聊天栏输入以下指令:
/scoreboard objectives add wiki:player_count dummy
如果您使用函数并希望在世界初始化时自动添加该记分项,请按照首次世界加载时触发中描述的流程操作。
系统实现
BP/functions/wiki/event/players/on_leave.mcfunction
yaml
## 获取当前游戏刻玩家数量
### 重置分数
scoreboard players reset .CurrentTick wiki:player_count
### 统计玩家数
execute as @a run scoreboard players add .CurrentTick wiki:player_count 1
## 计算差值(当前 - 先前)
scoreboard players operation .CurrentTick wiki:player_count -= .PreviousTick wiki:player_count
## 在此处添加您的命令(示例)
### 当差值为-1或更小时发送消息
execute if score .CurrentTick wiki:player_count matches ..-1 run say 一名或多名玩家已离开世界
## 保存当前玩家数以供下一游戏刻比较
### 重置分数
scoreboard players reset .PreviousTick wiki:player_count
### 统计玩家数
execute as @a run scoreboard players add .PreviousTick wiki:player_count 1
这里我们以/say命令为例,但您可以使用任何需要的命令,数量不限。
只需确保遵循给定顺序,并正确应用/execute if score条件来执行您的目标命令。
原理说明
由于.PreviousTick分数会在命令循环结束时更新,因此可以在下一游戏刻开始时与.CurrentTick分数进行比较。
玩家数量统计采用了实体计数器系统,建议阅读该页面以更好地理解本系统。
通过从.CurrentTick分数中减去.PreviousTick分数,我们可以判断玩家数量是否:
- 减少(
..-1) - 增加(
1..) - 保持不变(
0)
若结果为负值,则表明有玩家离开游戏。 例如:
当10名玩家中有1人离开时:
.CurrentTick - .PreviousTick = 9 - 10 = -1- 我们通过
..-1条件检测到这一变化
系统工作流程:
- 首先获取
.CurrentTick值 - 接着进行减法运算
- 根据结果执行相应命令
- 最后更新
.PreviousTick值供下一游戏刻使用
- 首先获取
TIP
重要提示: 所有命令方块链或函数中的指令都会在同一游戏刻内顺序执行。本系统之所以有效,是因为命令执行发生在游戏刻结束时,此时所有事件(如玩家加入、离开、死亡等)都已处理完毕。

tick.json配置
若使用函数而非命令方块,必须将on_leave函数添加至tick.json以确保持续执行。多个文件可通过在每行字符串后添加逗号来引入。详见函数文档。
BP/functions/tick.json
json
{
"values": [
"wiki/event/players/on_leave"
]
}使用函数时,资源包文件夹结构应如下所示:
- 📝on_leave.mcfunction
- 📝tick.json
- 🖼️pack_icon.png
- 📝manifest.json

