You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:40:33