联动
LoginView 跨模块联动、Capability 与模块集成
联动
LoginView 模块通过 EventBus、信号派发、Capability 等机制与宿主及其他模块联动。
EventBus 事件
LoginView 模块通过 EventBusCapability 发布登录成功事件,其他模块可通过 EventBus 监听。
发布的事件
| 事件 Topic | 触发时机 | Payload |
|---|---|---|
axs.loginview.login_success | 玩家登录成功(密码登录、注册自动登录、免密进入) | auth_mode(认证模式)、account_type(账号类型 ID) |
Payload 字段
| 字段 | 类型 | 说明 |
|---|---|---|
auth_mode | string | 认证模式:standalone 或 authme |
account_type | string | 账号类型 ID:microsoft / littleskin / offline |
若 EventBus 不可用,事件发布为空操作,不影响 LoginView 正常运行。
信号派发
LoginView 还通过 SignalDispatchable 派发信号,可供 QuestGPS、条件触发器等模块监听。
| 信号 | 触发时机 | 变量 |
|---|---|---|
login_success | 密码登录成功 | auth_mode、account_type、account_type_display |
first_register | 注册成功并自动登录 | auth_mode、account_type、account_type_display |
premium_bypass | 正版/LittleSkin 免密进入 | auth_mode、account_type、account_type_display |
信号变量
| 变量 | 说明 |
|---|---|
auth_mode | 认证模式:standalone 或 authme |
account_type | 账号类型 ID:microsoft / littleskin / offline |
account_type_display | 账号类型中文展示名:微软正版 / LittleSkin / 离线 |
信号与 EventBus 事件的区别:信号通过 SignalDispatchable 派发,可供条件触发器(Conditions)和任务系统使用;EventBus 事件供模块间直接监听。两者互不冲突,登录成功时同时触发。
Capability 注册
LoginView 模块注册了以下 Capability,供宿主及其他模块调用:
LoginViewQueryable(公开)
认证状态查询与登录界面打开能力(@PublicCapability),外部插件经 AxsCapabilities.get(LoginViewQueryable.class) 获取;LoginView 未启用时返回 null。查询方法可从任意线程调用(冷路径可能产生一次数据库查询,高频路径请异步或缓存);openFor 须在 Bukkit 主线程调用。
| 方法 | 说明 |
|---|---|
isAuthenticated(player) | 玩家是否已通过认证(含 session 恢复判定) |
isRegistered(player) | 玩家是否已有注册账号 |
openFor(player) | 打开登录界面(已认证时为空操作) |
openFor(player, force) | force=true 时即使已认证也强制打开(改密等场景) |
数据迁移与玩家数据清理
LoginView 支持 /axs migrate 存储迁移与 /axs purge 玩家数据清理命令。
LoginView 账户以玩家名为主键,不支持按 UUID 删除账户数据。/axs purge <玩家> loginview 会清理该玩家的 session 记录,但账户记录保留;/axs purge <玩家> all 或全量清理会清空全部账户和 session 数据。
联动降级
| 缺失能力 | 影响 |
|---|---|
| 信号派发不可用 | 登录/注册/免登信号不派发,其余功能正常 |
| EventBus 不可用 | 登录成功事件不发布,其余功能正常 |
| qqbot 模块未加载 | QQ 绑定功能不可用,正版玩家无法完成绑定 |
跨服与存储
共享存储模式
storage.shared: true(推荐)时,LoginView 使用本体统一数据源,各模块共用 config.yml 的 storage 节配置。
自建存储模式
storage.shared: false 时,LoginView 使用独立数据库连接,支持 SQLite 或 MySQL。适用于需要独立数据库隔离的场景。
跨服 Session
standalone 模式下,登录 session 保存到数据库。多服场景下,若各服共享同一数据库,玩家在 A 服登录后切换到 B 服可免登录(需 session-strict-ip: false 或两服出口 IP 一致)。
跨服场景推荐使用共享存储模式 + 同一 MySQL 数据库,确保 session 数据全局共享。详见 配置管理 的 storage 节。
数据存储
账号与登录会话存储在数据库中(MySQL 表名前缀由 storage.mysql.table-prefix 配置)。日常维护请使用 /axs purge、/axs migrate 命令,不建议手动改表。
模块集成
qqbot 模块
LoginView 通过 QqBindCapable 能力与 qqbot 模块集成,实现正版/LittleSkin 玩家强制绑定 QQ:
qq-binding.enabled: true启用绑定流程microsoft-require-bind/littleskin-require-bind控制各账号类型是否强制绑定- 未绑定时登录界面显示
bind-prompt提示与验证码输入框 - 玩家在 QQ 群发送
#绑定 {name}获取验证码,在 UI 中输入确认
AuthMe 插件
auth.mode: authme时,注册/登录/改密委托 AuthMe 处理auth.mode: standalone时,可通过migrate-authme命令从 AuthMe 数据库导入历史账户- AuthMe 缺失时相关功能自动降级,
authme模式下模块不加载
账号类型识别
LoginView 自动判定玩家账号类型:
| 账号类型 | ID | 展示名 | 免密 | 说明 |
|---|---|---|---|---|
| 微软正版 | microsoft | 微软正版 | 是 | 玩家名在 Mojang 正版数据库存在 |
| LittleSkin | littleskin | LittleSkin | 是 | 通过 authlib-injector 认证 |
| 离线 | offline | 离线 | 否 | 未通过任何正版认证 |
玩家进服后自动判定账号类型:正版玩家显示免密进入界面,离线玩家显示密码登录/注册界面。
条件触发器
LoginView 派发的信号可被条件触发器监听,实现登录后触发逻辑:
login_success— 密码登录成功后触发first_register— 首次注册成功后触发premium_bypass— 正版免密进入后触发
信号变量包含 auth_mode、account_type、account_type_display,可用于条件判断。详见 Conditions 指南。
物品来源
LoginView 不直接使用物品来源系统,但其 UI 文件中的服规面板等组件可引用 Item Sources 定义的物品作为装饰。