Minecraft 1.12.2 Forge模组中Session方法返回异常值问题
问题:Minecraft 1.12.2 Forge模组中Session方法返回占位符字符串的原因
我正在开发一款Minecraft 1.12.2 Forge模组,预期功能是将会话数据打印至日志,但运行后得到如下输出:
[12:22:30] [Client thread/INFO] [getsessionid]: getSessionID(): token:<ACCESS TOKEN>:<PROFILE ID> [12:22:30] [Client thread/INFO] [getsessionid]: getPlayerID(): <PROFILE ID> [12:22:30] [Client thread/INFO] [getsessionid]: getUsername(): _Blay_ [12:22:30] [Client thread/INFO] [getsessionid]: getToken(): <ACCESS TOKEN>
需说明的是,上述输出并非手动审查后的内容,而是方法直接返回的字面结果。请问为何net.minecraft.util.Session.getToken()始终返回<ACCESS TOKEN>字符串,net.minecraft.util.Session.getPlayerID()始终返回<PROFILE ID>字符串?
附实现源码:
Minecraft minecraft = Minecraft.getMinecraft(); logger.info("getSessionID(): {}", minecraft.getSession().getSessionID()); logger.info("getPlayerID(): {}", minecraft.getSession().getPlayerID()); logger.info("getUsername(): {}", minecraft.getSession().getUsername()); logger.info("getToken(): {}", minecraft.getSession().getToken());
解答
这是因为你在离线模式下运行游戏,或是使用了未经过正版验证的启动器。
在Minecraft 1.12.2的Session类逻辑中,当游戏处于离线状态时,会生成一个占位符Session对象:
getToken()和getPlayerID()返回的<ACCESS TOKEN>、<PROFILE ID>是硬编码的占位符字符串- 只有
getUsername()会使用你设置的离线用户名
如果要获取真实的会话数据,必须在正版验证模式下启动游戏:
- 使用官方启动器或支持正版登录的第三方启动器登录你的Minecraft账号
- 确保游戏启动时通过了Mojang的身份验证,此时Session对象才会被填充真实的令牌和用户ID
另外需要注意:即使在正版模式下,出于安全考量,Minecraft也会限制对真实令牌的直接访问,部分场景下真实令牌不会通过这些方法直接返回,而是仅用于内部验证流程。
内容的提问来源于stack exchange,提问作者Tea Master
相关产品推荐
相关产品推荐

