-
Notifications
You must be signed in to change notification settings - Fork 13
Closed
Labels
Description
Describe the bug
在 LSE 引擎 v0.9.0 及以上版本中,在 onJoin 事件中直接调用 pl.setAbility(10, true/false) 会导致特定问题,例如:
1、玩家进入服务器后无法破坏方块。
2、某些能力(如飞行和血量扣除)未正确应用。
在旧版本(如 v0.8.20 或更早版本)中,同样的代码不会产生这些问题。
To Reproduce
1、使用以下代码片段创建一个最小化复现插件代码片段:
mc.listen("onJoin", (pl) => {
pl.setAbility(10, true)
});
2、玩家进入服务器。
3、玩家尝试在生存模式下破坏方块,或者尝试被攻击。
Expected behavior
实际行为
玩家进入服务器后处于飞行模式,但无法破坏方块。
期望行为
玩家能够正常飞行,同时在生存模式下可以破坏方块。
Screenshots
No response
Platform
Windows10 服务器版本
BDS Version
1.21.51
LeviLamina Version
v1.0.0-rc.3
LegacyScriptEngine Version
v0.9.0-rc.5
Additional context
可能原因
推测服务器在 onJoin 时玩家状态尚未完全初始化,而 pl.setAbility 的调用需要玩家状态已完全加载。
附加信息:
1、在 LSE v0.8.20 及以下版本中相同代码不会引发问题。
2、社区已有大量插件依赖于 onJoin 中的直接调用逻辑,这一改动可能导致部分插件无法兼容新版本。
3、根据官方文档 (https://legacy-script-engine.levimc.org/zh/apis/EventAPI/PlayerEvents/) 的描述,“onJoin”是在玩家完成世界加载后触发的。然而,在LSE v0.9.0+中,某些玩家状态(例如游戏模式、能力)此时可能确实尚未完全初始化。
TongziJun