BungeeCord - 在离线模式下检测到经过身份验证的玩家

几天来,我一直在尝试如何检测处于离线模式的玩家的帐户是否已通过 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)



江户川乱折腾
浏览 392回答 2
2回答

慕田峪9158850

您可能正在寻找这个:https : //www.spigotmc.org/resources/fastlogin.14153/我还没有使用它,但根据评论,它仍然可以在最新版本中使用。此外,它是开源的,您可以查看代码并了解它是如何完成的。

长风秋雁

我认为这是不可能的,因为 Minecraft 没有交换会话细节。我知道运行第二个代理的服务器为高级用户启用了在线模式,以处理导致“后面”相同 bukkit 服务器的会话详细信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java