Luohuayu / CatServer

高性能和高兼容性的1.12.2/1.16.5/1.18.2版本Forge+Bukkit+Spigot服务端 (A high performance and high compatibility 1.12.2/1.16.5/1.18.2 version Forge+Bukkit+Spigot server)
https://catmc.org
GNU Lesser General Public License v3.0
1.95k stars 204 forks source link

[1.18.2] Can't retrieve player session from offline player #811

Closed i493052739 closed 10 months ago

i493052739 commented 11 months ago

运行环境

Minecraft版本(1.12.2/1.16.5/1.18.2): 1.18.2 构建版本(从/version指令获取): 6c3f596 相关模组/插件: LoginSecurity

描述这个BUG

PlayerQuitEvent 在传给 LoginSecurity 时,玩家实例已经成为了 OfflinePlayer 修复思路:在 PlayerQuitEvent 在传给各个插件之后,再将玩家实例改为 OfflinePlayer (?)

正常玩家退出的日志(用spigot核心测试)

[12:27:30] [Server thread/INFO]: Bear[/127.0.0.1:50278] logged in with entity id 154 at ([world]-12.5, 67.0, -48.5)
[12:27:36] [Server thread/INFO]: Bear lost connection: Disconnected
[12:27:36] [Server thread/INFO]: Bear left the game

异常的退出的日志(用cat核心测试)

Caused by: java.lang.IllegalStateException: Can't retrieve player session from offline player!
    at com.lenis0012.bukkit.loginsecurity.session.SessionManager.getPlayerSession(SessionManager.java:40) ~[?:?]
    at com.lenis0012.bukkit.loginsecurity.modules.threading.ThreadingModule.onPlayerQuit(ThreadingModule.java:66) ~[?:?]
    at jdk.internal.reflect.GeneratedMethodAccessor703.invoke(Unknown Source) ~[?:?]
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
    at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:315) ~[forge-1.18.2-40.2.4-universal.jar%23118!/:?]
    ... 13 more
[15:31:32] [Server thread/ERROR] [Minecraft]: Could not pass event PlayerQuitEvent to LoginSecurity v3.1.1
org.bukkit.event.EventException: null
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:319) ~[forge-1.18.2-40.2.4-universal.jar%23118!/:?]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[forge-1.18.2-40.2.4-universal.jar%23118!/:?]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:594) ~[forge-1.18.2-40.2.4-universal.jar%23118!/:?]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:578) ~[forge-1.18.2-40.2.4-universal.jar%23118!/:?]
    at net.minecraft.server.players.PlayerList.m_11286_(PlayerList.java:390) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.m_7026_(ServerGamePacketListenerImpl.java:1422) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.network.Connection.m_129541_(Connection.java:406) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.network.ServerConnectionListener.m_9721_(ServerConnectionListener.java:175) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.MinecraftServer.m_5703_(MinecraftServer.java:1206) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.dedicated.DedicatedServer.m_5703_(DedicatedServer.java:397) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:1112) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:952) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:312) ~[server-1.18.2-20220404.173914-srg.jar%23113!/:?]
    at java.lang.Thread.run(Thread.java:833) [?:?]

导致的问题

LoginSecurity 插件在 cat 端无法正确处理 player session 集合

复现方法

Kotori0629 commented 11 months ago

@Luohuayu

Kotori0629 commented 10 months ago

https://github.com/lenis0012/LoginSecurity/commit/ce8572bf64fcb1c9261381a766c7dbe25dbe5f48

或许你该试试最新版本?