界面协议
Presence 奖励面板与 HUD 的 UI 数据和动作
界面协议
本页用于修改 plugins/Presence/ui/hud.yml、plugins/Presence/ui/rewards.yml,或重新制作 Presence 玩家界面。
打开流程
奖励面板打开后,服务端会:
- 发送
stages,建立左侧阶段列表; - 优先选择第一份可领取奖励,否则选择下一份未解锁奖励;
- 发送所选阶段的
stage_detail; - 在玩家选择其他阶段后,发送该阶段的新详情。
UI → 服务端
动作参数均为字符串:
| 动作 | 参数 | 用途 |
|---|---|---|
select | stageId | 查看指定阶段 |
claim | stageId | 领取当前所选阶段 |
阶段 ID 必须符合 [a-z0-9][a-z0-9_.-]{0,63}。claim 回传的 ID 必须与当前详情一致;界面未打开、参数错误或操作过快时,服务端会忽略动作。
HUD:state
| 字段 | 类型 | 可空 | 含义 |
|---|---|---|---|
cycleKey | String | 否 | 当前日期标识,例如 d:2026-08-21 |
serverEpochMillis | Long | 否 | 发送数据时的服务器时间戳 |
onlineMillis | Long | 否 | 发送时的累计在线时长 |
previousThresholdMillis | Long | 否 | 上一阶段所需在线时长 |
stageId | String | 是 | 下一阶段 ID |
stageName | String | 是 | 下一阶段名称 |
thresholdMillis | Long | 是 | 下一阶段所需在线时长 |
claimAtEpochMillis | Long | 是 | 预计达到下一阶段的时间戳 |
allUnlocked | Boolean | 否 | 是否已经达到全部启用阶段 |
HUD 应在本地计算倒计时与进度:
新的 state 会在玩家加入、资源加载完成、HUD 同步、阶段解锁、阶段修改或每日重置时发送;界面无需持续向服务端请求剩余时间。
阶段列表:stages
| 字段 | 类型 | 含义 |
|---|---|---|
cycleKey | String | 当前日期标识 |
cycleEndsAtEpochMillis | Long | 当前日期结束时间 |
serverEpochMillis | Long | 服务器时间戳 |
onlineMillis | Long | 当前累计在线时长 |
selectedStageId | String / null | 默认选中的阶段 ID |
stages | Array | 全部启用阶段的摘要 |
每个 stages[] 包含:
| 字段 | 类型 | 含义 |
|---|---|---|
id | String | 阶段 ID,点击后原样回传 |
name | String | 奖励名称 |
thresholdMillis | Long | 所需在线时长 |
state | String | 当前领取状态 |
阶段详情:stage_detail
该处理器包含 cycleKey、serverEpochMillis、onlineMillis 和 stage。stage 字段如下:
| 字段 | 类型 | 含义 |
|---|---|---|
id | String | 阶段 ID |
name | String | 奖励名称 |
description | String | 奖励介绍 |
thresholdMillis | Long | 所需在线时长 |
state | String | 当前领取状态 |
rewardCount | Number | 奖励项数量 |
rewards | Array | 当前阶段的奖励内容 |
每个 rewards[] 包含:
| 字段 | 类型 | 含义 |
|---|---|---|
id | String | 当前奖励项的稳定 ID |
type | String | item、eco 或 command |
name | String | 奖励显示名称 |
content | String | 仅物品奖励提供的完整物品数据 |
icon | String | 货币或命令奖励的资源路径,可为空 |
物品使用 Slot 与 setItemIcon 展示 content;货币和命令奖励使用 icon。
领取状态:
| 值 | 含义 |
|---|---|
locked | 尚未达到在线时长 |
claimable | 可以领取 |
pending | 奖励投递中 |
claimed | 已领取 |
failed | 自动投递已暂停 |
领取结果:claim_result
| 字段 | 类型 | 可空 | 含义 |
|---|---|---|---|
code | String | 否 | 领取结果代码 |
success | Boolean | 否 | 本次领取是否成立 |
message | String | 否 | 可以直接展示给玩家的文字 |
stageId | String | 是 | 对应的阶段 ID |
| code | 含义 |
|---|---|
delivered | 奖励邮件已经送达 |
accepted_pending | 已记录领取,等待投递 |
already_reserved | 已领取,正在投递 |
stage_not_found | 阶段不存在 |
stage_disabled | 阶段未启用 |
not_unlocked | 在线时长不足 |
already_claimed | 已领取 |
delivery_failed | 暂未发放,需要管理员处理 |
internal_error | 本次操作未完成 |
收到 claim_result 后直接显示 message。Presence 随后会重新发送 stages 与当前阶段的 stage_detail。
