Luminol icon indicating copy to clipboard operation
Luminol copied to clipboard

luminol 移除了 PlayerTeleportEvent

Open cgw2023 opened this issue 8 months ago • 17 comments

服务端版本 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

  1. 启动伺服器
  2. 使用任何插件的传送功能, 例如residence /res tp , playerwarp /pw 地点
  3. /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

cgw2023 avatar Apr 28 '25 15:04 cgw2023

复查了一遍,上游folia存在bug,luminol移除了此特性,而且此特性也与folia暂不兼容

Suisuroru avatar Apr 28 '25 16:04 Suisuroru

请检查是否为您本人配置问题,实测back可以正常返回,请检查saveOnTeleportEvent是否启用(HuskHomes插件)

Suisuroru avatar Apr 28 '25 16:04 Suisuroru

请检查是否为您本人配置问题,实测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

cgw2023 avatar Apr 28 '25 16:04 cgw2023

folia与paper的传送逻辑完全不同,这意味着对于传送,都需要单独适配paper和folia

Suisuroru avatar Apr 28 '25 16:04 Suisuroru

folia与paper的传送逻辑完全不同,这意味着对于传送,都需要单独适配paper和folia

所以照你的意思是说,huskhomes用的PlayerTeleportEvent ,只能在bukkit/paper上运行,即使luminol把PlayerTeleportEvent 加回来也无法运行?

如果是这样的话该用什么方法达到同样的效果?

cgw2023 avatar Apr 28 '25 17:04 cgw2023

我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗

cgw2023 avatar Apr 28 '25 17:04 cgw2023

我直接换了支持 Folia的另一个插件 https://github.com/WarSkyGod/TPA 结果也是一样, src/main/java/top/craft_hello/tpa/events/TPAPlayerTeleportEvent.java 还是没跑, /back 也是废的。 这是专门给folia的插件,用PlayerTeleportEvent,虽然你说folia移除了,但luminol加回来依然没法正常用,这不是很奇怪吗

我已经纠正了前面的话了,抱歉,前面重新检查了文件,luminol的另一个补丁移除了相关回传patch0024

Suisuroru avatar Apr 28 '25 17:04 Suisuroru

我直接换了支持 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的这个问题吗还是有方法绕过?

cgw2023 avatar Apr 28 '25 17:04 cgw2023

我直接换了支持 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

Suisuroru avatar Apr 28 '25 17:04 Suisuroru

然后关于PlayerTeleportEvent的一些看法,实际上个人觉得,未进行深度适配的PlayerTeleportEvent也不适合folia这种多调度器的核心使用,因为这些事件需要多次跨线程来传输这些数据,对于folia的高线程安全来说就是不太可能,其次,PlayerTeleportEvent传出后,传递参数的线程并不会等待数据回传就直接处理后面的tick,所以可能导致回传时已经被释放了Folia Issues #330,但是暂时可能没有更好的解决办法

Suisuroru avatar Apr 28 '25 17:04 Suisuroru

我直接换了支持 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应该还是有

Suisuroru avatar Apr 28 '25 17:04 Suisuroru

我直接换了支持 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现在最新版本是还存在的意思吗

cgw2023 avatar Apr 29 '25 07:04 cgw2023

取消并不是事件取消报错,而是因该事件触发的事件的取消可能引发错误

Suisuroru avatar Apr 29 '25 11:04 Suisuroru

取消并不是事件取消报错,而是因该事件触发的事件的取消可能引发错误

不好意思还是不太懂,我有以下代码在paper能运行但luminol无法运行,请问是什么原因?

 @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
    public void onPlayerTeleport(PlayerTeleportEvent event) {
        System.out.println("onPlayerTeleport detected");
}

系统没有在luminol输出句子,paper才有,我不理解为何会这样

cgw2023 avatar Apr 29 '25 14:04 cgw2023

Luminol中的PlayerTeleportEvent并不完整,有些传送事件并不会Call PlayerTeleportEvent,有可能你调用的传送并未Call PlayerTeleportEvent

Suisuroru avatar Apr 29 '25 16:04 Suisuroru

我直接换了支持 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只会让插件各种崩掉服务器

MrHua269 avatar May 01 '25 01:05 MrHua269