AdventureTops
AdventureTops 是跨服排行榜聚合与展示中心。从 Adventure 系列及外部玩法采集指标,生成日/周/月/季/总榜快照,再通过 GUI、TextDisplay 全息和奖励规则呈现。
多数据源
等级、Boss、抽奖、在线、通行证、任务、种植、钓鱼和安全分。
多周期
daily、weekly、monthly、season、all 与集成切换榜。
双重展示
箱子 GUI 分类浏览与世界内 TextDisplay 全息榜。
幂等奖励
按榜单、周期和名次执行命令,数据库避免重复发放。
| 版本 | 0.2.6 |
|---|---|
| 服务端 | Paper 1.21.4,Java 21 |
| 存储 | MySQL + HikariCP |
| 可选同步 | Redis 刷新频道 |
| 展示 | GUI、TextDisplay;可选 DecentHolograms |
安装与数据库
- 创建 AdventureTops MySQL 数据库和专用账号。
- 在需要采集或展示的 Paper 服务器安装插件。
- 为每台服务器设置唯一
server.id与角色。 - 配置排名库及 AdventureLevel、AdventureBossRank 等外部源数据库。
- 检查
/atops status,再执行首次/atops recalc all。
storage:
mysql:
host: localhost
port: 3306
database: adventuretops
username: playcraftdatauser
password: "change-me"
table-prefix: atops_
pool-size: 8示例密码 change-me 仅用于提醒,生产环境必须更换并限制数据库权限。
集群角色
server:
id: spawn
role: display-and-aggregator| 职责 | 说明 |
|---|---|
| collector | 监听本服事件并批量写入指标 |
| aggregator | 读取各源和事件表,生成排名快照 |
| display | 提供 GUI 和世界全息展示 |
| display-and-aggregator | 主城常用组合角色 |
大型群组服可拆分角色,避免每个节点都重复聚合。所有节点通过 heartbeat 和可选 Redis 刷新版本保持一致。
数据源
| 来源 | 代表指标 |
|---|---|
| AdventureLevel | level |
| AdventureBossRank | hunt_count、damage |
| AdventureLottery | lucky_score、common_count |
| AdventureOnline | online_seconds |
| AdventurePass | season_exp、season_level、season_tasks |
| AdventureQuests | favor |
| AdventureSignIn | signs、total_signs、streak |
| AdventureTask | completed_tasks、task_points |
| CustomCrops | plant_harvest |
| CustomFishing | fish_count、competition_attended、max_size |
| AdventureSafe | safety_score |
部分来源直接读取其 MySQL,部分由集成监听器写入 AdventureTops 事件表。
榜单定义
boards:
在线时长排行榜_周榜:
enabled: true
source: adventureonline
metric: online_seconds
period: weekly
limit: 10
sort: DESC
title: "在线时长排行榜 · 周榜"
value-format: "{value_time}"| 字段 | 说明 |
|---|---|
source | 数据提供器 |
metric | 指标名 |
period | 统计周期 |
limit | 入榜人数 |
sort | DESC 或 ASC |
value-format | {value}、{value_short}、{value_time} |
集成排行榜使用 integrated: true 和 boards 列表,将多个周期组合成 GUI/全息可切换组。
周期与快照
| period | 界面标签 | 范围 |
|---|---|---|
daily | 日榜 | 当前自然日 |
weekly | 周榜 | 当前自然周 |
monthly | 月榜 | 当前自然月 |
season | 季榜 | 来源赛季或季节窗口 |
all | 总榜 | 累计数据 |
周期按 cluster.timezone 计算,默认 Asia/Shanghai。展示读取已生成快照,不会在每次玩家打开 GUI 时实时扫描所有源库。
固定快照让 GUI 与全息展示稳定、查询轻量,也为排名奖励提供确定的发放依据。
采集与聚合
collector:
enabled: true
flush-interval-seconds: 5
max-flush-batch-size: 500
online-sample-seconds: 60
aggregator:
enabled: true
snapshot-refresh-seconds: 300
realtime-refresh-seconds: 30
sync:
heartbeat-seconds: 30- Collector 将高频事件缓存后每 5 秒最多批量写入 500 条。
- 普通快照默认每 300 秒刷新。
- 实时型刷新版本默认 30 秒。
- Redis 可选,用
adventuretops:refresh频道通知其他节点刷新缓存。
排行榜 GUI
/tops 打开三级界面:
- 首页:等级、Boss、抽奖、在线、通行证、好感度、签到、任务、种植、钓鱼、安全分等分类。
- 分类页:选择某类下的排行榜组。
- 榜单页:显示前十名头颅,并切换日/周/月/季/总榜。
关键槽位
| 界面 | 设置 |
|---|---|
| 首页 | 54 格,分类槽列表,通知 49,关闭 53 |
| 分类 | 榜单槽 11/13/15/20/22/24,返回 45 |
| 榜单 | 排名槽前十,周期从 28 开始,缓存 15 秒 |
全息榜单
hologram:
enabled: true
provider: TEXT_DISPLAY
import-presets: true
refresh-seconds: 30
line-spacing: 0.28holograms.yml 将 hologram ID 绑定到 board group 与世界坐标,例如:
holograms:
在线时长排行榜:
group: 在线时长排行榜
location: "spawn,20,80,0,0,0"组内可包含多个周期榜,展示服务按配置生成标题、名次与数值行。默认使用原生 TextDisplay,也声明了 DecentHolograms 软依赖。
排名奖励
rules:
weekly_top3:
enabled: false
boards: ["*"]
periods: [weekly]
top: 3
claim-key-mode: period
commands:
- "give {player} diamond {rank}"
- "eco give {player} {value}"防重复
每个玩家、名次、规则、榜单和周期的发放记录写入 MySQL;重复执行 recalc 不会重复奖励。
领取键
period:每个自然周期一次。fixed-interval:按分钟间隔重新开放。- 自定义
claim-key+ active 时间窗:活动专用。
确认命令、榜单和测试快照正确后再逐条启用,避免首次 recalc 大范围误发。
命令与权限
| 命令 | 权限 | 用途 |
|---|---|---|
/tops | adventuretops.gui.use | 打开 GUI |
/atops status | adventuretops.admin | 节点、角色和数据库状态 |
/atops reload|hotreload | admin | 重载配置 |
/atops sync | admin | 发布 heartbeat/刷新版本 |
/atops boards | admin | 查看榜单 |
/atops recalc <榜单|all> | admin | 重算快照并触发奖励检查 |
/atops holo create <id> <boardId> | admin | 创建全息 |
/atops holo delete|refresh <id> | admin | 删除/刷新 |
/atops holo refreshall | admin | 刷新全部 |
公开权限
adventuretops.view:查看公共排行榜。adventuretops.gui.use:打开 GUI。adventuretops.click:点击全息交互。
配置参考
| 文件 | 用途 |
|---|---|
config.yml | 服务器角色、数据库、源、采集、聚合、同步与全息全局项 |
boards.yml | 榜单、指标、周期、排序、值格式和集成组 |
gui.yml | 三级菜单、分类、材质、槽位和周期按钮 |
holograms.yml | 全息位置及 board group |
rewards.yml | 排名奖励规则和幂等键 |
messages.yml | 管理命令与玩家提示 |
Redis
cluster:
timezone: Asia/Shanghai
storage: mysql
redis:
enabled: false
host: localhost
port: 6379
password: ""
channel: adventuretops:refresh故障排查
榜单无数据
- 检查 board 的 source、metric 和 period 是否由对应集成提供。
- 验证源数据库连接和表权限。
- 执行
/atops recalc <榜单>并查看返回行数。
多服展示不一致
- 所有节点连接同一 AdventureTops 数据库。
- 确保 timezone 一致。
- 检查 heartbeat,或启用 Redis refresh 通知。
全息不出现
- 世界已加载且坐标格式正确。
hologram.enabled为 true。- 先用 holo create/refresh 测试单个 ID。
奖励重复或未发
检查规则 enabled、boards、periods、claim-key-mode、活动时间窗和数据库领取记录;不要手工删除记录后再执行 recalc。