模组服和插件服的账号怎么打通?

我们既有基于 Paper/Folia 的生电插件服,也有跑着各种新奇模组的 Fabric 服。尴尬的是,原版 AuthMeReloaded 只有 Bukkit/Paper 插件版,Fabric 圈子里的其他登录模组不管是数据库表结构还是密码加密方式,都跟 AuthMe 对不上。总不能让玩家进模组服时再去重新注册一套密码吧?

2026 年 8 月 13 日到 14 日(Commit 8ee3610、f9eb7d0),我索性把 AuthMeReloaded 6.0.1 完整移植到了服务端 Fabric,一口气拉通了从 1.18.2 到 1.21.11 的六条版本线。

28 种哈希字节级对齐,老密码无感升级

既然要共用同一个 MySQL 账号库,最核心的要求就是“一模一样”。我把原版的表结构、字段名以及全部 28 种密码哈希算法(包括 SHA256、Argon2id、BCrypt、PBKDF2 等)原封不动地搬了过来,做到了字节级兼容。

以前老库里不少玩家的密码还是早年的 SHA256 格式。我在登录校验逻辑里加了一步基于数据库 CAS(Compare-And-Swap)事务的无感升级:当玩家用老密码成功登录的那一瞬间,后台自动把他的密码重新用更安全的 Argon2id 哈希一遍并条件更新落库,整个过程玩家完全无感,也不会因为多端并发登录把密码改乱。

原版对话框输密码,连半空中的末影珍珠都给你冻住

在 1.21.11 版本下,我还利用原版新增的对话框特性做了一层体验升级:玩家进服根本不需要打开聊天框敲 /login,屏幕上会直接弹出原版输入框让你填密码和 TOTP 动态验证码,再也不用担心手滑把密码当成公屏聊天发出去。

而在玩家还没输完密码的 Limbo(未登录隔离)阶段,防护也抠到了细节里:不用额外装笨重的 PacketEvents,单靠纯 Mixin 注入就把背包点击、丢弃物品和命令补全枚举封得死死的;甚至如果玩家上次下线前刚扔出一颗末影珍珠,进服未登录时这颗珍珠也会被先冻结存起来,防止还没登录就被传送走摔死,等输完密码登录成功后再原样恢复飞行轨迹。