luminol 移除了 PlayerTeleportEvent
服务端版本 LuminolMC Version
1.21.4-DEV-dev/1.21.4-hardfork@c4d910f
预期的行为 Expected behavior
huskhomes 插件的onPlayerTeleport (BukkitEventListener.java) 中需要调用PlayerTeleportEvent检测玩家是否有进行传送,正常情况,当玩家使用非huskhomes的传送功能续发了onPlayerTeleport ,huskhomes会记录并且储存传送前的座标,并且让 /back 指令能够返回上一点
观测到的实际行为 Observed/Actual behavior
发现luminol移除了PlayerTeleportEvent,这导致这个插件这个功能无法使用
复现步骤 Steps/models to reproduce
- 启动伺服器
- 使用任何插件的传送功能, 例如residence /res tp , playerwarp /pw 地点
- /back 没有反应,因为luminol系统没有PlayerTeleportEvent,所以记录不了任何先前的传送位置
插件与数据包列表。 Plugin and Datapack List.
Paper Plugins (1): [23:24:59 INFO]: - HuskHomes [23:24:59 INFO]: Bukkit Plugins (4): [23:24:59 INFO]: - CMILib, PlayerWarps, Residence, Vault
更多详细信息。 The more information.
No response
复查了一遍,上游folia存在bug,luminol移除了此特性,而且此特性也与folia暂不兼容
请检查是否为您本人配置问题,实测back可以正常返回,请检查saveOnTeleportEvent是否启用(HuskHomes插件)
请检查是否为您本人配置问题,实测back可以正常返回,请检查saveOnTeleportEvent是否启用(HuskHomes插件)
我这里视频显示是没有办法,huskhome的部分最新版本saveOnTeleportEvent有bug无法使用,我刚刚PR了他们才修正 https://github.com/WiIIiam278/HuskHomes/pull/817
我使用的版本就是在purpur
能够正常back的,但c4d910f luminol没法
c4d910f ❎ https://github.com/user-attachments/assets/b3f598e4-0523-403a-a56d-6a6fb1e79c6c
purpur-1.21.4-2408 ✅ https://github.com/user-attachments/assets/453edb64-c4d7-418a-b30b-2e1ea8767ebf
folia与paper的传送逻辑完全不同,这意味着对于传送,都需要单独适配paper和folia
folia与paper的传送逻辑完全不同,这意味着对于传送,都需要单独适配paper和folia
所以照你的意思是说,huskhomes用的PlayerTeleportEvent ,只能在bukkit/paper上运行,即使luminol把PlayerTeleportEvent 加回来也无法运行?
如果是这样的话该用什么方法达到同样的效果?
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
folia存在bug明白了,我是看 https://github.com/LuminolMC/Luminol/blob/60a82d9766c1088b121f0ee68526a11e2c592a0c/luminol-server/minecraft-patches/removed/0024-Fully-removed-player-teleport-event-and-entity-telep.patch 所以以为luminol移除的。
所以现在的情况请问luminol这边能修复folia的这个问题吗还是有方法绕过?
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
folia存在bug明白了,我是看 https://github.com/LuminolMC/Luminol/blob/60a82d9766c1088b121f0ee68526a11e2c592a0c/luminol-server/minecraft-patches/removed/0024-Fully-removed-player-teleport-event-and-entity-telep.patch 所以以为luminol移除的。
所以现在的情况请问luminol这边能修复folia的这个问题吗还是有方法绕过?
等看看 @MrHua269 什么意见吧,这个毕竟是他写的,有可能是与其他补丁冲突移除的,但这个事件确实有bug
然后关于PlayerTeleportEvent的一些看法,实际上个人觉得,未进行深度适配的PlayerTeleportEvent也不适合folia这种多调度器的核心使用,因为这些事件需要多次跨线程来传输这些数据,对于folia的高线程安全来说就是不太可能,其次,PlayerTeleportEvent传出后,传递参数的线程并不会等待数据回传就直接处理后面的tick,所以可能导致回传时已经被释放了Folia Issues #330,但是暂时可能没有更好的解决办法
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
folia存在bug明白了,我是看 https://github.com/LuminolMC/Luminol/blob/60a82d9766c1088b121f0ee68526a11e2c592a0c/luminol-server/minecraft-patches/removed/0024-Fully-removed-player-teleport-event-and-entity-telep.patch 所以以为luminol移除的。
所以现在的情况请问luminol这边能修复folia的这个问题吗还是有方法绕过?
不对啊,这个0024是在removed里面的,并没有使用啊,这个事件应该是好的啊,但取消事件的bug应该还是有
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
folia存在bug明白了,我是看 https://github.com/LuminolMC/Luminol/blob/60a82d9766c1088b121f0ee68526a11e2c592a0c/luminol-server/minecraft-patches/removed/0024-Fully-removed-player-teleport-event-and-entity-telep.patch 所以以为luminol移除的。 所以现在的情况请问luminol这边能修复folia的这个问题吗还是有方法绕过?
不对啊,这个0024是在removed里面的,并没有使用啊,这个事件应该是好的啊,但取消事件的bug应该还是有
现阶段是只能等folia那边调查并修正这部分吗?
我不太了解为什么PlayerTeleportEvent会被取消以及是怎样观察到被取消了,所以请问PlayerTeleportEvent 在folia/luminol现在最新版本是还存在的意思吗
取消并不是事件取消报错,而是因该事件触发的事件的取消可能引发错误
取消并不是事件取消报错,而是因该事件触发的事件的取消可能引发错误
不好意思还是不太懂,我有以下代码在paper能运行但luminol无法运行,请问是什么原因?
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onPlayerTeleport(PlayerTeleportEvent event) {
System.out.println("onPlayerTeleport detected");
}
系统没有在luminol输出句子,paper才有,我不理解为何会这样
Luminol中的PlayerTeleportEvent并不完整,有些传送事件并不会Call PlayerTeleportEvent,有可能你调用的传送并未Call PlayerTeleportEvent
我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗
我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024
folia存在bug明白了,我是看 https://github.com/LuminolMC/Luminol/blob/60a82d9766c1088b121f0ee68526a11e2c592a0c/luminol-server/minecraft-patches/removed/0024-Fully-removed-player-teleport-event-and-entity-telep.patch 所以以为luminol移除的。
所以现在的情况请问luminol这边能修复folia的这个问题吗还是有方法绕过?
这个没法修复,folia的异步传送在很多情况下还有其他职责(比如同时切换到对面tickregion的上下文),如果贸然加回这种API只会让插件各种崩掉服务器