几天来,我一直在尝试如何检测处于离线模式的玩家的帐户是否已通过 Mojang 身份验证。我为什么要这样做?目前,我有一个基本的管理系统,包括检查 mojang 数据库中是否存在玩家的昵称,如果 setOnlineMode 设置为 true,否则设置为 false。系统允许显示玩家的皮肤和他的 UUID 但问题是如果考虑离线的玩家使用相同的假名购买高级帐户,他没有他的皮肤或他的真实 UUID,因为 setOnlineMode 设置为 false防止其进度丢失。我的目标是制作一个系统来检测离线用户刚刚使用经过身份验证的 minecraft 帐户登录,以便服务器可以为他提供将进度自动转移到新的真实 UUID 的系统。我做了一些研究,例如在这里尝试,我删除了在线模式条件以允许检查播放器是否已通过身份验证,然后在这里我删除了如果播放器无效的断开连接。这给了我一个美妙的错误。13:13:31 [GRAVE] [Arbi13_] -> UpstreamBridge - 遇到异常 io.netty.handler.codec.EncoderException:java.lang.IllegalArgumentException:无法获取数据包类 net.md_5.bungee.protocol.packet.SetCompression 的 ID在与方向 TO_CLIENT 的阶段 GAME 在 io.netty.handler.codec.MessageToByteEncoder.write(MessageToByteEncoder.java:125) 在 io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:738) 在 io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:801) 在 io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:814) 在 io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:794) 在 io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:1066) 在 io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:305) 在 net.md_5.bungee.netty.ChannelWrapper.write(ChannelWrapper.java:60) 在 net.md_5.bungee.UserConnection$1.sendPacket(UserConnection.java:148) 在 net.md_5.bungee.UserConnection.setCompressionThreshold(UserConnection.java:697) 在 net.md_5.bungee.connection.InitialHandler$6$1.run(InitialHandler.java:523)
2 回答

慕田峪9158850
TA贡献1794条经验 获得超8个赞
您可能正在寻找这个:https : //www.spigotmc.org/resources/fastlogin.14153/
我还没有使用它,但根据评论,它仍然可以在最新版本中使用。
此外,它是开源的,您可以查看代码并了解它是如何完成的。

长风秋雁
TA贡献1757条经验 获得超7个赞
我认为这是不可能的,因为 Minecraft 没有交换会话细节。我知道运行第二个代理的服务器为高级用户启用了在线模式,以处理导致“后面”相同 bukkit 服务器的会话详细信息。
添加回答
举报
0/150
提交
取消