【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析|天天聚看点
首先剧透一下,这个Bug的本质是,游戏不小心把离线用户当作了正版用户……
似乎从6月8日开始,许多离线模式玩家在游玩1.16.5时都遇到了图上这一Bug,无法进入多人游戏。也有很多人提出了解决办法,比如打开游戏时先断网,或者加装绕过限制的Mod。这里咱在深入分析问题原因确认这是一个Bug后,向大家提供一个从根源上解决这一Bug的方法。
(资料图片)
那就是买个正版!
开个玩笑,我相信大家都是愿意支持正版的,只是暂时没有条件所以才玩的离线模式,那么废话不多说,开始介绍修复Bug的方法吧。
首先,打开.minecraft/versions/你的游戏版本/目录下的json文件,有些人可能玩的是整合包所以目录名并不是1.16.5,总之进去用你喜欢的文本编辑器打开那个json文件就行了。
打开文件后,搜索authlib,删除大括号里的size和sha1两行
注意,如果删完这两行后大括号内最后一个字符是逗号,那么也要把那个逗号删除,否则启动器会无法识别。
继续搜索,如果还有别的authlib包含了size和sha1,也要删掉,不然无法生效。(我这边PCL的只有一个需要删,而HMCL有两个)
然后,将所有的2.1.28替换为2.3.31
保存文件,重新打开启动器,开始游戏,即可发现已经可以正常进入多人游戏了。
这一方法应该对任何启动器都有效,无需断网,适配原版和任何Mod端,虽然改东西不太方便吧……适合喜欢折腾的人。
下面是关于这一Bug的分析。
在1.16.5版本所使用的认证组件Authlib 2.1.28中,认证是使用网页接口返回的error字段来判断是否认证失败,并且会无视网页接口的HTTP 401状态码
但是,现在的Mojang认证接口就算认证失败也不会设置error字段,只会返回HTTP 401
这就导致认证组件因为没有发现错误,所以将离线玩家也视为正版用户,正常返回了解析出的社交配置;又因为接口实际上并没有返回相关配置,所以多人游戏、realms、联机交流功能的启用权限全被Gson解析成false了。
在1.17版所使用的认证组件Authlib 2.3.31中,认证组件会在获取到HTTP 401状态码后直接抛出异常,游戏返回离线配置,所以不会有这个问题。
1.16.5和1.17的Authlib 2.+使用的是同样的认证接口,只是部分代码逻辑不同,可以直接通用,1.18之后版本使用的是Authlib 3.+,接口和代码都有很大改动,所以不能在1.16.5上使用。
所以这就只是一个因为官方后台更新导致的Bug而已,别再说什么官方要封离线啦!