联动
OnlineRewards 跨模块联动与 Capability
OnlineRewards 模块通过 Capability 注册、EventBus 事件发布、跨服通道同步等机制与其他模块和子系统联动。
Capability 注册
模块在启动时注册以下 Capability,供其他模块通过 getCapability() 获取并调用:
OnlineRewardsQueryable
提供在线奖励的查询与操作能力(公开 capability,@PublicCapability),接口定义位于 xuanmo.arcartxsuite.api.capability.OnlineRewardsQueryable。外部插件可经 AxsCapabilities.get(OnlineRewardsQueryable.class) 获取,模块未启用时返回 null。
| 方法签名 | 返回值 | 说明 |
|---|---|---|
hasSignedToday(UUID playerUuid) | boolean | 查询玩家今日是否已签到 |
todayOnlineMinutes(UUID playerUuid) | int | 查询玩家今日在线分钟数 |
weeklyOnlineMinutes(UUID playerUuid) | int | 查询玩家本周在线分钟数 |
monthlyOnlineMinutes(UUID playerUuid) | int | 查询玩家本月在线分钟数 |
signIn(Player player) | boolean | 为玩家执行签到(已签到返回 false) |
makeupSignIn(Player player, String date) | boolean | 为玩家执行补签(日期格式 yyyy-MM-dd) |
addMakeupCards(Player player, int amount) | boolean | 为玩家增加补签卡数量 |
grantDailyRewards(Player player) | void | 立即发放玩家当前已达阈值但未领取的阶段奖励 |
addOnlineMinutes(Player player, int minutes) | boolean | 给玩家增加在线时长(用于联动活动或 GM 补偿) |
使用示例(其他模块中):
数据清理与迁移
/axs purge支持按 UUID 或全量清理玩家在线奖励数据/axs migrate支持跨源数据迁移
EventBus 事件
模块通过 EventBusCapability 发布事件,其他模块可订阅对应 Topic 接收事件。
axs.onlinerewards.server_goal_reached
全服签到目标达成时发布。
| Payload 字段 | 类型 | 说明 |
|---|---|---|
goal_id | String | 目标 ID |
goal_name | String | 目标名称 |
required | String | 所需签到人数 |
signed_count | String | 实际签到人数 |
跨服同步
跨服通道
当 cross-server.enabled 为 true 且使用 MySQL 共享数据库时,签到、补签、管理员调整在线时长/补签卡/离线储蓄等操作会自动通知其他子服刷新该玩家数据与界面。
跨服前提条件
storage.shared必须为true(共享 MySQL 数据库)- 宿主
config.yml的cross-server节已正确配置 cross-server.enabled设为true
数据存储
模块将玩家在线时长、签到记录、补签卡、已领奖励与全服签到目标触发记录存储在数据库中(SQLite 或 MySQL)。表名前缀由 storage.mysql.table-prefix 控制,默认 axs_onlinerewards_,共享模式下无前缀。
与其他模块联动
Mail 模块
所有奖励(阶段奖励、签到奖励、周期奖励、时刻奖励、全服签到目标)均支持通过 mail.presets 字段发送邮件预设。填写 Mail 模块 mail/presets/*.yml 中的 preset.id,达成条件后自动发送邮件给玩家。
物品来源(ItemSourceRegistry)
所有奖励支持通过 item-rewards 字段发放物品。物品来源支持:
| source | 说明 | id 格式 |
|---|---|---|
minecraft | 原版物品 | 材质名(如 DIAMOND) |
mythic | MythicMobs | 物品 ID |
neige | NeigeItems | 物品 ID |
overture | Overture | 物品 ID |
mmoitems | MMOItems | 类型ID;物品ID |
物品发放统一行为:放入背包 → 背包满转邮件 → 无邮件则掉落。详见 物品来源。
签到信号
签到成功后模块发送 signin_success 信号,EventPacket 等模块可监听该信号触发联动逻辑。
信号变量:
| 变量名 | 说明 |
|---|---|
streak | 连续签到天数 |
total | 累计签到天数 |
date | 签到日期 |
day_of_month | 当月第几天 |
聊天卡片 / 字幕 / 称号 / QQ 广播
全服签到目标达成时支持向在线玩家发送聊天卡片(chat-cards 填卡片 ID)、播放字幕组(subtitle-groups 填字幕组 ID)、授予永久称号(title-ids 填称号 ID)、向 QQ 群广播消息。
客户端变量推送
模块向 ArcartX 客户端推送以下变量:
| 变量名 | 默认值 | 说明 |
|---|---|---|
arcartx_online_time | 0.0~1.0 | 当前进度(可通过 variables.progress 配置) |
arcartx_online_time_title | String | 当前阶段标题(可通过 variables.title 配置) |
客户端 HUD 或其他 UI 可读取这些变量显示在线奖励进度。
配置版本迁移
模块支持配置版本自动迁移。当前配置版本为 4。
| 迁移 | 说明 |
|---|---|
| 2→3 | 签到配置独立为外部 sign-in.yml 文件 |
| 3→4 | storage.mode 重命名为 storage.shared,值从 sqlite/mysql 映射为 true/false |
模块启动时自动检测 config-version 并执行迁移,无需手动干预。