联动
Tab 模块公开能力、刷新触发、跨服与模块集成
联动
TabRefreshable 公开能力
Tab 列表刷新能力接口,供 Title、Chat 等模块在数据变更时触发 Tab 刷新。
| 方法 | 参数 | 说明 |
|---|---|---|
requestViewerRefresh | Player viewer, String reason | 请求刷新指定玩家可见的 Tab |
requestGlobalRefresh | String reason | 请求刷新所有在线玩家的 Tab |
同一 tick 内的重复刷新请求会被合并去重;全局刷新会吸收所有单玩家请求。
刷新触发时机
| 触发源 | 刷新范围 | 说明 |
|---|---|---|
| 周期任务 | 全局 | 每隔 refresh-interval-ticks 自动触发一次全局刷新 |
| 玩家进服/退服 | 全局 | 自动触发全局刷新 |
| 客户端回包 | 单玩家 | 客户端主动请求刷新 |
| 客户端翻页 | 单玩家 | 翻页时刷新 |
| 命令 | 单玩家 | /tab refresh / /tab view / /tab page |
| 跨服数据 | 全局 | 收到远程节点数据时触发全局刷新 |
| 公开能力 | 单玩家/全局 | 其他模块通过 TabRefreshable 触发 |
客户端刷新防护
客户端主动刷新受滑动窗口限流保护,防止高频刷新请求:
| 配置项 | 默认值 | 说明 |
|---|---|---|
enabled | true | 是否启用防护 |
window-ms | 1500 | 统计窗口时长(毫秒) |
max-hits | 1 | 窗口内允许的最大刷新次数 |
mode | silent | silent 静默丢弃 / notify 提示玩家 |
notify-message | &cTAB 刷新过快,请稍后再试。 | 命中防护时的提示消息 |
notify-cooldown-ms | 3000 | 提示消息冷却时长(毫秒) |
跨服同步
跨服同步的完整配置与部署说明见 跨服同步与聚合。
| 配置层级 | 说明 |
|---|---|
宿主 config.yml 的 cross-server 节 | 配置 Redis 或 Proxy 后端连接参数 |
模块 config.yml 的 cross-server.enabled | 全局开关 |
Tab 定义 cross-server | 单定义覆盖全局开关 |
跨服同步需要所有节点使用相同的 Tab 定义 ID 和兼容的
pack配置。
数据存储
Tab 模块不使用数据库。所有运行时状态(视图、页码、跨服数据、限流状态等)均保存在内存中,服务端重启后重置。调试快照以 JSON 文件存储在 data/tab/snapshots/。
模块集成
与 Title 模块联动
Title 模块在称号变更时通过 TabRefreshable 触发 Tab 刷新,确保 Tab 列表中的称号前后缀实时更新。Tab 的 pack 中可直接使用 Title 模块的 PAPI 占位符:
| 占位符 | 说明 |
|---|---|
%axstitle_tab_<groupId>_prefix% | 指定分组的 Tab 前缀 |
%axstitle_tab_<groupId>_suffix% | 指定分组的 Tab 后缀 |
%axstitle_display% | 主展示称号 |
%axstitle_chat_<groupId>_prefix% | 聊天前缀(可按分组接入) |
%axstitle_chat_<groupId>_suffix% | 聊天后缀(可按分组接入) |
与 Chat 模块联动
Chat 模块在聊天格式变更时可通过 TabRefreshable 触发 Tab 刷新。Tab 的 pack 中可使用 Chat 模块的前后缀占位符。
与 EventPacket 模块联动
EventPacket 模块可通过 TabRefreshable 在事件触发时刷新 Tab,例如玩家完成特定成就后刷新 Tab 以更新排序列表。
PVP 高亮
%axstab_pvp% / %axstab_pvp_color% 占位符可判定玩家是否处于 PVP 高亮窗口(受 settings.style.pvp-highlight.enabled 控制)。玩家间相互伤害会自动记录时间戳,自身伤害不计入。