【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析 |
您所在的位置:网站首页 › 该账号被禁用 › 【技术向】Minecraft1.16.5离线 多人游戏已禁用Bug 修复与分析 |
首先剧透一下,这个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状态码后直接抛出异常,游戏返回离线配置,所以不会有这个问题。 无论如何都会抛出异常,所以不会出现这一bug1.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 |