Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

固定启动器离线用户默认UUID生成规则 #7

Open
3 tasks done
Steve-xmh opened this issue Feb 2, 2024 · 15 comments
Open
3 tasks done

固定启动器离线用户默认UUID生成规则 #7

Steve-xmh opened this issue Feb 2, 2024 · 15 comments
Labels
可以考虑 不是什么特别要紧的功能,能做尽量做吧

Comments

@Steve-xmh
Copy link

检查项

  • 我充分理解提交的建议可能无法所有启动器作者参与,并尊重所有启动器开发者的选择
  • 我确认在Issues列表中并无其他人已经提出过与此问题相同或相似的问题
  • 我确认该反馈并非针对单个启动器的,如果是,我将会去该启动器的反馈页面反馈

您是什么类型的用户

启动器作者

请简单的说一下您的想法

可以的话,以一个固定的方式统一离线用户的 UUID 生成规则,例如 UUID v3 (基于 MD5 生成)

它能解决什么样的问题/带来什么样的帮助

可以避免因交叉使用启动器导致玩家存档物品内容不同步的情况

期望的结果

以一个固定的方式统一离线用户的 UUID 生成规则

是否有对这个方案的相关链接?

No response

附注

No response

@tnqzh123
Copy link

tnqzh123 commented Feb 2, 2024

其实也可以考虑找一个统一的位置生成一个类似服务端的 usercache.json 的文件,把 username 和 UUID 写进去,然后让所有启动器都去读这个文件…

@Steve-xmh
Copy link
Author

备注一下自己的方式:

我的启动器支持多账户管理,离线账户的UUID在创建时生成并保存在了固定的路径下。因此如果这个规则如果固定下来了,之后跟进只会影响新创建的离线账户,对旧账户影响不大。
(考虑到我的用户技术能力因此我认为有义务自行保护数据安全,故没有所多少加解密操作)

image

image

@ZhaiSoul
Copy link
Member

ZhaiSoul commented Feb 2, 2024

目前国内外比较统一的UUID生成规则是根据 OfflinePlayer: 后跟随用户名来生成的,来源于Bukkit。

@bangbang93
Copy link

建议与Bukkit统一,实现例: https://github.com/PrismarineJS/node-minecraft-protocol/blob/21240f8ab2fd41c76f50b64e3b3a945f50b25b5e/src/datatypes/uuid.js#L14

@LTCatt
Copy link

LTCatt commented Feb 3, 2024

其实也可以考虑找一个统一的位置生成一个类似服务端的 usercache.json 的文件,把 username 和 UUID 写进去,然后让所有启动器都去读这个文件…

我更倾向于如果要做的话按照这个实现……因为大家提到的其他实现 PCL 在底层逻辑上就迁移不了 Orz

@burningtnt
Copy link

HMCL 是与 Bukkit 一致的

@laolarou726
Copy link

建议与Bukkit统一,实现例: https://github.com/PrismarineJS/node-minecraft-protocol/blob/21240f8ab2fd41c76f50b64e3b3a945f50b25b5e/src/datatypes/uuid.js#L14

目前 LauncherX 的实现和Bukkit一致

@ZhaiSoul ZhaiSoul added the 可以考虑 不是什么特别要紧的功能,能做尽量做吧 label Feb 5, 2024
@TT702
Copy link

TT702 commented Feb 5, 2024

BakaXL 对应离线玩家 UUID 的行为与 Bukkit 一致。

@Silverteal
Copy link

根据 OfflinePlayer: 后跟随用户名来生成

这个方式也是原版服务端关闭在线模式时对玩家生成的UUID。

@Silverteal
Copy link

Silverteal commented Feb 10, 2024

我支持默认使用“OfflinePlayer:玩家名”取UUIDv3,这能够实现以下目标:
1.一个用户名在没有任何附加信息的情况下唯一对应一个UUID,符合玩家思维习惯。
2.能使某些通过UUID版本识别玩家类型的相关工具正常工作。
3.避免了启动器对游戏文件夹的“侵入式修改”,无需额外的文件记忆,所以不会出现“UUID索引丢失导致存档找不到”等问题。
4.能正确处理多人游戏存档。这个算法是原版服务端(内置和专业)生成离线玩家UUID的方式。在(离线)局域网世界或下载的(离线)服务器世界中,可以实现“使用某用户名登录=使用对应玩家的存档”。如果采用“UUID索引”的方式,则无法/很难记录多人游戏玩家。

上面PCL的开发者提到“PCL在底层逻辑上难以实现此方案”,据我了解可能由于如下原因:
1.PCL目前生成的离线UUID(实际上)由很多的0开头,而启动器内部通过判断UUID前面是否有五个0来判断UUID是否是离线的。
2.PCL存在“通过修改UUID修改玩家离线皮肤”的功能,导致一个用户名在皮肤配置不同的情况下会对应多个不同的UUID。
对于问题1,如果采用上述方案,可以改为通过判断UUID的版本来判断UUID是否离线。
对于问题2,如果PCL不大幅度改变现有逻辑,我没有想到什么好的解决方法;然而我个人认为“启动器通过修改登录UUID实现离线皮肤的替换”本身是不合适的,可能的替代方案有:
1.引导用户安装CustomSkinLoader
2.或者干脆在本地设立Yggdrasil服务器,向游戏客户端提供包含自定义皮肤的用户档案(没记错的话,这也是HMCL和BakaXL使用的办法)

编辑:
同时我认为也应该允许高级用户自定义UUID。据我所知目前御三家应该只有HMCL支持此功能。

@ZhaiSoul
Copy link
Member

我支持默认使用“OfflinePlayer:玩家名”取UUIDv3,这能够实现以下目标:
1.一个用户名在没有任何附加信息的情况下唯一对应一个UUID,符合玩家思维习惯。
2.能使某些通过UUID版本识别玩家类型的相关工具正常工作。
3.避免了启动器对游戏文件夹的“侵入式修改”,无需额外的文件记忆,所以不会出现“UUID索引丢失导致存档找不到”等问题。
4.能正确处理多人游戏存档。这个算法是原版服务端(内置和专业)生成离线玩家UUID的方式。在(离线)局域网世界或下载的(离线)服务器世界中,可以实现“使用某用户名登录=使用对应玩家的存档”。如果采用“UUID索引”的方式,则无法/很难记录多人游戏玩家。

上面PCL的开发者提到“PCL在底层逻辑上难以实现此方案”,据我了解可能有如下几点:
1.PCL目前生成的离线UUID(实际上)由很多的0开头,而启动器内部通过判断UUID前面是否有五个0来判断UUID是否是离线的。
2.PCL存在“通过修改UUID修改玩家离线皮肤”的功能,导致一个用户名在皮肤配置不同的情况下会对应多个不同的UUID。
对于问题1,如果采用上述方案,可以改为通过判断UUID的版本来判断UUID是否离线。
对于问题2,如果不大幅度改变现有逻辑,我没有想到什么好的解决方法;然而我个人认为通过这种方式实现离线皮肤本身是不合适的,可能的替代方案有:
1.引导用户安装CustomSkinLoader
2.或者干脆在本地设立Yggdrasil服务器,向游戏客户端提供包含自定义皮肤的用户档案(没记错的话,这也是HMCL和BakaXL使用的办法)

不是为了实现皮肤,而是存档内判断用户和权限依据是使用的uuid

@Silverteal
Copy link

Silverteal commented Feb 10, 2024

不是为了实现皮肤,而是存档内判断用户和权限依据是使用的uuid

没看懂,能具体讲下吗?如果是说UUID在游戏里的作用的话,我应该不是那个意思......

@ZhaiSoul
Copy link
Member

不是为了实现皮肤,而是存档内判断用户和权限依据是使用的uuid

没看懂,能具体讲下吗?如果是说UUID在游戏里的作用的话,我应该不是那个意思......

游戏内背包物品以及权限的归属是通过uuid判断的,和身份证一样。uuid变了,游戏自然不会认为你是他了

@Silverteal
Copy link

Silverteal commented Feb 10, 2024

不是为了实现皮肤,而是存档内判断用户和权限依据是使用的uuid

没看懂,能具体讲下吗?如果是说UUID在游戏里的作用的话,我应该不是那个意思......

游戏内背包物品以及权限的归属是通过uuid判断的,和身份证一样。uuid变了,游戏自然不会认为你是他了

我提到的“通过修改UUID实现离线皮肤”是指PCL的业务逻辑,我知道UUID的作用的...

@d3ara1n
Copy link

d3ara1n commented Apr 4, 2024

很多启动器都是用的Bukkit方案,可以以此作为标准

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
可以考虑 不是什么特别要紧的功能,能做尽量做吧
Projects
None yet
Development

No branches or pull requests

10 participants