Hex-Dragon / PCL2

Plain Craft Launcher(我的世界启动器 PCL)的源代码,为支持社区研究而公开。
https://afdian.com/a/LTCat
Other
2.56k stars 185 forks source link

用户名为zmwdz出现游戏启动失败 #4013

Closed skilahello closed 4 months ago

skilahello commented 4 months ago

检查项

描述

UUID报错IllegalArgumentException

PCL 错误报告、日志与附件

游戏崩溃前的输出.txt PCL 启动器日志.txt

HMCL 启动脚本

No response

skilahello commented 4 months ago

JDK--21--22出现问题

skilahello commented 4 months ago

处理UUID字符串0000000000003005998F50309B45FD5时出错

skilahello commented 4 months ago

问题出现在 fromStringLenient 方法中

Silverteal commented 4 months ago

或许可以尝试构建 PCL-Community/PCL2-Uuid-Fix 并启动,看看是否存在相同问题? PCL的UUID格式一直比较怪,离线和正版登录的UUID大小写似乎不统一(具体地,目前版本中,正版UUID和服务器返回结果一致,为无符号小写,离线是大写。) 问题与这无关,详见#issuecomment-2162382215

skilahello commented 4 months ago

使用zmwdz这个用户名发现了这个问题--测试其他的没有问题复现---可能还有其他用户名有这个问题

Silverteal commented 4 months ago

根据日志,PCL生成的启动UUID字符串是0000000000003005998F50309B45FD5,不难发现它只有31位,而UUID一定是32位的。 这应该就是原因。不过以防万一,如果反馈者有空,可以尝试用上面提到的UUID修复版本复现问题

skilahello commented 4 months ago

是的--正式版中--使用其他用户名没有发现问题----只有zmwdz发现这个问题

skilahello commented 4 months ago

好的我试一下

skilahello commented 4 months ago

构建 PCL-Community/PCL2-Uuid-Fix 并启动 使用zmwdz为用户名没有发现相关问题

skilahello commented 4 months ago

[Uuid-Fix] 根据用户名生成的离线 UUID:a4cbd3b0f8183c52ab44360aa83a7edb

Silverteal commented 4 months ago

注意到日志中的这一行: [15:06:45.403] [Launch] 正在构建自定义皮肤资源包,格式为:17 玩家似乎设置了自定义皮肤。这可能也是导致问题的原因之一。

如果您还有时间,请尝试以下操作: 1.使用UUID-Fix版本,选择自定义皮肤,启动 2.使用正式版,选择随机皮肤,启动

我这边能做的到此为止,接下来交给开发者……

skilahello commented 4 months ago

我调整一下---保证和问题环境一致

Silverteal commented 4 months ago

哦,我猜是自定义资源包生成对应体型UUID的时候忘记补足最后五位转写后生成十六进制数据的前导0了 我暂时没时间验证,等开发者来看看吧。 通过阅读代码,基本确定问题就是这个导致的。

skilahello commented 4 months ago

使用正式版,选择随机皮肤,可以正常启动 使用UUID-Fix版本,选择自定义皮肤,可以正常启动

也就是--正式版使用自定义皮肤--并且用户名为zmwdz--出现了启动失败

skilahello commented 4 months ago

Log1.txt UUID-Fix生成的Log

RimacC2-EV commented 4 months ago

为啥你们都能发现这么诡异的Bug

Silverteal commented 4 months ago

提交了PR #4018 尝试修复此问题


完整复盘一下问题原因。造成此问题需要:

  1. 使用离线模式启动,且离线皮肤选项是”自定义“
  2. PCL根据用户名生成的默认UUID的体型和加载的离线皮肤体型不符
  3. PCL迭代UUID后五位生成符合体型的UUID时,迭代产物的后五位中存在前导0,且该产物拼接的”缺位UUID“根据常规计算方法能得出正确的体型

这个问题之前应该已经修复过了 已经找到:#3879,但是不知道为什么自定义这一项好像被遗忘了……