【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析

您所在的位置:网站首页 该账号被禁用 【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析

【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析

#【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析| 来源: 网络整理| 查看: 265

首先剧透一下,这个Bug的本质是,游戏不小心把离线用户当作了正版用户……

似乎从6月8日开始,许多离线模式玩家在游玩1.16.5时都遇到了图上这一Bug,无法进入多人游戏。也有很多人提出了解决办法,比如打开游戏时先断网,或者加装绕过限制的Mod。这里咱在深入分析问题原因确认这是一个Bug后,向大家提供一个从根源上解决这一Bug的方法。

那就是买个正版!

开个玩笑,我相信大家都是愿意支持正版的,只是暂时没有条件所以才玩的离线模式,那么废话不多说,开始介绍修复Bug的方法吧。

为什么上一张图是PCL这里却变成了HMCL?

首先,打开.minecraft/versions/你的游戏版本/目录下的json文件,有些人可能玩的是整合包所以目录名并不是1.16.5,总之进去用你喜欢的文本编辑器打开那个json文件就行了。

打开文件后,搜索authlib,删除大括号里的size和sha1两行

选中的两行都要删掉

注意,如果删完这两行后大括号内最后一个字符是逗号,那么也要把那个逗号删除,否则启动器会无法识别。

这个逗号一定要删掉

继续搜索,如果还有别的authlib包含了size和sha1,也要删掉,不然无法生效。(我这边PCL的只有一个需要删,而HMCL有两个)

然后,将所有的2.1.28替换为2.3.31

全部替换即可

保存文件,重新打开启动器,开始游戏,即可发现已经可以正常进入多人游戏了。

所以为什么上面用PCL下面用HMCL???

这一方法应该对任何启动器都有效,无需断网,适配原版和任何Mod端,虽然改东西不太方便吧……适合喜欢折腾的人。

下面是关于这一Bug的分析。

在1.16.5版本所使用的认证组件Authlib 2.1.28中,认证是使用网页接口返回的error字段来判断是否认证失败,并且会无视网页接口的HTTP 401状态码

使用error字段判断是否认证失败即使服务器返回HTTP 401,依然正常读取json并返回正常情况,离线模式会因为认证失败而获取一个离线专用配置,并不会屏蔽多人游戏

但是,现在的Mojang认证接口就算认证失败也不会设置error字段,只会返回HTTP 401

这就导致认证组件因为没有发现错误,所以将离线玩家也视为正版用户,正常返回了解析出的社交配置;又因为接口实际上并没有返回相关配置,所以多人游戏、realms、联机交流功能的启用权限全被Gson解析成false了。

正版用户应该获取到这样的配置信息,但离线没有,所以直接设为了false

在1.17版所使用的认证组件Authlib 2.3.31中,认证组件会在获取到HTTP 401状态码后直接抛出异常,游戏返回离线配置,所以不会有这个问题。

无论如何都会抛出异常,所以不会出现这一bug

1.16.5和1.17的Authlib 2.+使用的是同样的认证接口,只是部分代码逻辑不同,可以直接通用,1.18之后版本使用的是Authlib 3.+,接口和代码都有很大改动,所以不能在1.16.5上使用。

所以这就只是一个因为官方后台更新导致的Bug而已,别再说什么官方要封离线啦!

我的方法原理上很简单,让启动器加载1.17使用的authlib 2.3.31来代替1.16.5的有bug的authlib 2.1.28,这个方法在代码层面完全可行,并且我自己成功很多次了。我不知道为什么会有人用我的方法失败,我只能建议你们找别的办法,B站上至少能找到三个解决方法的,用不着在我这里死磕。

如果想质疑我的方法的可行度的话,你们需要证明你们的游戏确实是在离线模式下加载了SHA1为bbd00ca33b052f73a6312254780fc580d2da3535的authlib-2.3.31.jar,并且依然会有文中提到的多人模式禁用问题,否则,请从自己身上找原因。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3