🔐 AdventureLogins

AdventureLogins 是 Velocity 与登录服一体化的身份验证项目,将正版会话验证、离线账号注册、个人资料、邀请码和密码恢复放在同一条登录链路中。

正版免密

由 Velocity 完成 Mojang / Microsoft 会话验证,绑定后直接进入。

🔑

离线密码

离线玩家通过注册与登录命令验证,未认证期间全面锁定。

🧭

身份路由

统一的正版、离线身份资料和保留命名空间,避免身份冲突。

🛡️

风险控制

区分普通与异地 IP 登录,提供失败次数、超时和冻结策略。

运行要求

版本0.5.7
代理端Velocity 3.4
登录服Paper / Folia,Minecraft Java 1.21.1—1.21.11
Java21 或更高
可选依赖PlaceholderAPI、PacketEvents 或 ProtocolLib
⚠️ 身份系统属于关键基础设施

正式启用前必须更换代理认证和密码重置密钥,并备份三份 properties 数据文件。

📥 安装部署

  1. 使用 JDK 21 构建或取得 AdventureLogins 产物。
  2. 将 Velocity 模块放入代理端 plugins/
  3. 将登录服模块放入 Paper / Folia 登录服 plugins/
  4. 首次启动生成配置和身份数据文件后关闭服务器。
  5. 在两端设置一致的代理认证 secret,再完成登录服路由。

数据文件

文件内容
users.properties离线账号密码资料
auth_profiles.properties正版/离线身份路由资料
profiles.properties个人资料、平台绑定和邀请码
💡 部署建议

登录服只承载认证流程;认证完成后再由现有传送或路由系统将玩家送往目标子服。

🧩 双端架构

模块组成

模块职责
adventurelogins-core身份类型、路由决策、名称策略和资料存储
adventurelogins-velocity连接入口、正版会话验证、离线名称改写与后端路由
adventurelogins-loginserver注册登录、玩家锁定、GUI、邮箱、密码与资料管理
adventurelogins-universal统一发布产物

认证边界

  • 正版真实性由 Velocity 在线会话校验决定。
  • 登录服只接受代理发来的可信认证结果。
  • proxy-auth.secret 必须与代理端 auth-gate.properties 一致。
  • 不得让玩家绕过 Velocity 直连登录服。

🪪 身份模型

正版身份

Velocity 强制在线验证;成功后保存正版名称与 UUID,后续登录自动免密。

离线身份

离线玩家进入后端前会统一改写为 _{ID}_,例如 Steve 进入后端时显示为 _Steve_

  • 不支持中文 ID。
  • _ID_ 命名空间由系统保留。
  • 展示和资料查询时会还原原始名称。
  • 身份一旦确定,应通过管理流程清理后再重新选择。
⚠️ 不要手工混改 UUID

身份资料同时关联代理路由、登录密码和个人资料;只删除其中一个文件会造成状态不一致。

🆕 新玩家流程

  1. 玩家连接 Velocity,离线身份先以 _{ID}_ 进入登录服。
  2. 等待 CraftEngine 材质包和 AdventureRule 同意流程完成。
  3. 身份选择器以外部 Dialog 或内置箱子 GUI 打开。
  4. 选择正版:进入倒计时并断开,重新连接时完成正版验证。
  5. 正版验证成功后保存资料、执行正版权限命令并免密进入。
  6. 选择离线:进入锁定状态,使用 /reg <密码> <重复密码> 注册。

正版授权命令

premium:
  pending-seconds: 300
  countdown-seconds: 3
  permission-command: "lp user {player} permission set adventurelogins.premium true"

🔁 已注册玩家

状态处理
已绑定正版代理验证通过后直接免密
已注册离线施加失明和缓慢,使用 /l <密码>
普通登录默认 120 秒,最多失败 5 次
可疑/异地 IP默认 60 秒,失败 3 次后冻结 30 分钟

锁定期间

插件可隐藏未认证玩家,锁定移动速度,并只允许注册、登录或密码辅助白名单中的命令。

lock:
  hide-unauthenticated-players: true
  walk-speed:
    locked: 0.0
  effects:
    blindness-amplifier: 0
    slowness-amplifier: 4

🛡️ 安全策略

设置默认值
密码长度6—64
普通失败次数5
可疑失败次数3
可疑冻结1800 秒
近期登录窗口7 天
每日改密次数2
IPv6 识别前缀/64

管理员授权

admin.authorized-ids 优先填写 UUID;名称只对已验证的正版玩家生效。代码同时检查 adventurelogins.admin.* 权限。

🚨 上线前必须更换

password-reset.token-secretproxy-auth.secret 均不可保留默认的 CHANGE-ME 值。

⚙️ config.yml

核心分区

分区用途
module登录服与 PAPI 模块开关
security失败次数、超时、密码和 IP 策略
admin额外授权 UUID/正版名称
mail邮箱域名、验证码和 SMTP
password-reset网页重置地址、令牌期限和密钥
proxy-auth登录服与 Velocity 信任密钥
commands各认证阶段命令白名单和补全
identity.selectorinventorydialogauto

登录出生点

login-spawn:
  enabled: false
  teleport-on-join: true
  world: ""
  x: 0.5
  y: 64.0
  z: 0.5

✉️ 邮箱与密码重置

验证码限制

  • 默认只允许 @qq.com
  • 验证码有效期 300 秒,冷却 60 秒。
  • 每日最多 3 次,单码最多尝试 5 次。
  • SMTP 默认关闭,需要填写主机、授权码和发件人。

网页桥接

可直接连接网站数据库,也可以通过签名 HTTPS 请求发布重置令牌。外网数据库不可用时启用 website-bridge,网站仍在本地写入 MySQL。

⚠️ 凭证管理

SMTP 授权码、数据库密码和 bridge secret 不应提交到公开仓库;修改后限制配置文件访问权限。

🔗 兼容与 GUI

身份选择器

模式行为
inventory始终使用内置箱子 GUI
dialog执行 AdventureRule Dialog 命令,失败时按配置回退
auto优先 Dialog,无法打开则回退箱子 GUI

等待链

compat.wait-adventurerule 会等待规则流程;GUI 另有初始、资源包、规则重试延迟和最大尝试次数,避免界面在材质包或规则窗口前抢先弹出。

可选插件

  • PlaceholderAPI:账户状态变量。
  • PacketEvents / ProtocolLib:协议层兼容支持。
  • AdventureRule:外部 Dialog 身份选择和入服规则流程。
  • CraftEngine:通过延迟机制等待资源包加载。

⌨️ 命令与权限

命令说明
/reg <密码> <重复密码>注册离线账号
/l <密码>登录离线账号
/alogin help账号中心帮助
/alogin mail ...邮箱绑定、验证码、修改与重置
/alogin pass ...密码辅助、设置和重置流程
/alogin setpass / change设置或修改离线密码
/alogin profile打开个人资料
/alogin invite create|use创建或使用邀请码
/alogin admin reload重载配置
/alogin admin clear <玩家>清除指定账号资料

管理员权限

代码使用 adventurelogins.admin 以及 adventurelogins.admin.reload.clear.mail.pass.webreset 等细分权限,并支持配置中的额外授权 ID。

📊 PlaceholderAPI 变量

变量前缀为 adventurelogins

变量返回内容
%adventurelogins_bound_status%是否绑定正版
%adventurelogins_premium_name%正版 ID
%adventurelogins_premium_id%正版 UUID
%adventurelogins_password_mode%已免密 / 需要密码
%adventurelogins_account_type%正版 / 离线
%adventurelogins_platform_mail%已绑定邮箱
%adventurelogins_platforms%平台绑定汇总
%adventurelogins_invited_by%邀请人
%adventurelogins_change_remaining%今日剩余改密次数

🧰 故障排查

玩家无法进入登录服

  • 检查 Velocity 与后端版本是否均为 0.5.7。
  • 确认后端不可被公网直连。
  • 检查两端 proxy auth secret 是否完全一致。

身份 GUI 不出现

  • 暂时将 selector 改为 inventory 排除外部 Dialog 问题。
  • 检查 AdventureRule 命令和规则 ID。
  • 增大资源包与规则等待时间。

玩家持续被识别为异地 IP

  • 确认代理正确转发真实地址。
  • IPv6 用户可保留默认 /64,精确匹配才设置为 128。
  • 不要通过手工删除单个资料文件解除冻结。