AdventureMonthCard
一、简介
AdventureMonthCard —— 冒险月卡签到系统,日历签到 · 双级月卡 · 积分里程碑 · 经济集成 · 自动备份
为您的服务器提供完整的月卡签到体系。玩家通过精美的 54 格日历面板每日签到,享受每日奖励、特殊日奖励和累计里程碑。支持普通/精英双级月卡、Vault & PlayerPoints 双经济、PlaceholderAPI 变量、MiniMessage & RGB 渐变色,以及 SQLite/MySQL 持久化存储。
兼容 Spigot / Paper 1.21.4+ 服务器(Java 21),HikariCP 内置,无需前置。
核心特性
- 54格签到日历 — 7列日期布局,4种状态 (可签/已签/未到/错过),自定义材质 + CustomModelData
- 双级月卡 — 普通月卡 (Vault 银币) + 精英月卡 (PlayerPoints 金币),精英包含普通奖励
- 3层奖励体系 — 每日奖励 / 特殊日奖励 / 累计里程碑奖励
- 月卡积分 — 签到累积积分,可通过管理命令管理
- 连续签到追踪 — 自动记录连签天数,断签重置
- 智能提醒 — 登录提醒 + 定时提醒,支持 CHAT / TITLE / ACTIONBAR 三种方式
- 月卡商店 GUI — 可视化购买/查看月卡
- MiniMessage + RGB — 渐变色 / HEX / 标签全支持
- 数据存储 — SQLite / MySQL + HikariCP 连接池
- 自动备份 — 定时 SQL 全量导出,自动轮替旧备份
- PAPI 变量 — 10 个占位符,支持计分板/Tab等外部显示
- 完全可配置 — 4 个 YAML 配置文件,所有文本/物品/布局均可自定义
二、插件前置说明
均为可选依赖,不安装也能正常运行:
- Vault — 经济系统联动 (普通月卡购买使用银币)
- PlayerPoints — 金币系统联动 (精英月卡购买使用金币)
- PlaceholderAPI — 占位符扩展 (计分板 / Tab / 聊天格式)
安装与目录
环境要求
| 项目 | 要求 |
|---|---|
| 服务端 | Spigot / Paper 1.21.4+ |
| Java | 21+ |
依赖插件
| 插件 | 类型 | 说明 |
|---|---|---|
| Vault | 可选 | 普通月卡购买 (银币) |
| PlayerPoints | 可选 | 精英月卡购买 (金币) |
| PlaceholderAPI | 可选 | 占位符扩展 |
安装步骤
- 放入
AdventureMonthCard-1.0.0.jar到plugins/目录 - 重启服务器
- 编辑
plugins/AdventureMonthCard/下配置文件 /monthcard admin reload重载生效
目录结构
plugins/AdventureMonthCard/
├── config.yml # 核心配置 (数据库/备份/提醒/音效)
├── passes.yml # 月卡类型定义 (奖励/价格/里程碑)
├── gui.yml # GUI面板外观 (日历/商店布局)
├── messages.yml # 消息文本 (MiniMessage 格式)
├── data.db # SQLite 数据库 (默认)
└── backUp/
├── backup_2026-05-07_04-00-00.sql
└── ... # 自动备份文件
月卡体系
AdventureMonthCard 支持多种月卡类型,默认提供普通月卡和精英月卡两级体系。
月卡对比
| 属性 | 普通月卡 | 精英月卡 |
|---|---|---|
| 价格 | 5000 银币 (Vault) | 200 金币 (PlayerPoints) |
| 有效期 | 30 天 | 30 天 |
| 每日积分 | 10 | 25 |
| 每日命令奖励 | 钻石 ×1 | 钻石 ×3 + 500银币 |
| 包含下级 | — | ✅ 包含普通月卡所有奖励 |
| 权限节点 | monthcard.normal | monthcard.elite |
| 商店图标 | PAPER | NETHER_STAR |
月卡生命周期
- 购买 — 玩家在商店 GUI 中选购月卡,扣除对应货币
- 激活 — 购买后立即激活,从当天起计算有效期
- 续费 — 若月卡已到期,可重新购买;有效期从当前日期起算
- 签到 — 月卡有效期内,每天可在日历 GUI 中签到一次
- 到期 — 到期后无法签到,需重新购买
includes 继承机制
精英月卡设置 includes: "normal",签到时自动额外发放普通月卡的当日奖励。这意味着精英月卡玩家一次签到获得两份奖励(精英 + 普通)。
在 passes.yml 中添加新的月卡节点即可扩展更多等级,插件会自动加载并在商店中显示。
签到日历
54 格 (6行 × 9列) 日历面板,7列居中布局,两侧黑色边框填充。
面板布局
┌──┬──┬──┬──┬──┬──┬──┬──┬──┐
│🛒│▓ │▓ │▓ │📖│▓ │▓ │▓ │💎│ 行0: 功能栏
├──┼──┼──┼──┼──┼──┼──┼──┼──┤
│▓ │01│02│03│04│05│06│07│▓ │ 行1: 日历
│▓ │08│09│10│11│12│13│14│▓ │ 行2
│▓ │15│16│17│18│19│20│21│▓ │ 行3
│▓ │22│23│24│25│26│27│28│▓ │ 行4
│▓ │29│30│31│ │ │ │ │▓ │ 行5
└──┴──┴──┴──┴──┴──┴──┴──┴──┘
🛒 = 月卡商店 (Slot 0) 📖 = 月卡信息 (Slot 4)
💎 = 里程碑 (Slot 8) ▓ = 黑色边框填充
4 种日期状态
| 状态 | 配置键 | 默认物品 | 说明 | 可交互 |
|---|---|---|---|---|
| 🌻 可签到 | available | SUNFLOWER (附魔发光) | 今天且未签到 | ✅ 点击签到 |
| ✔ 已签到 | signed | LIME_DYE | 已完成签到 | ❌ |
| ◻ 未到达 | future | GRAY_STAINED_GLASS_PANE | 未来日期 | ❌ |
| ✘ 已错过 | missed | RED_DYE | 过去未签到 | ❌ |
功能按钮
| 按钮 | Slot | 物品 | 说明 |
|---|---|---|---|
| 月卡商店 | 0 | GOLD_INGOT | 点击打开商店 GUI |
| 月卡信息 | 4 | BOOK | 显示月卡类型/到期/签到/积分/连签 |
| 里程碑 | 8 | DIAMOND | 查看累计签到里程碑 |
| 边框填充 | 两侧 + 空位 | BLACK_STAINED_GLASS_PANE | 装饰 |
日期格子自定义
每个状态的物品支持以下属性:
| 属性 | 类型 | 说明 |
|---|---|---|
material | Material | 物品类型 |
custom-model-data | int | 自定义模型 ID (资源包) |
name | MiniMessage | 显示名称 |
lore | List | 物品描述 |
可用变量
| 变量 | 说明 |
|---|---|
%day% | 当月第几天 (1~31) |
%points% | 该日签到积分 |
%reward_desc% | 奖励描述 |
%sign_time% | 签到时间 |
%month% | 当前月份 |
%pass_type% | 月卡类型名称 |
%expire_date% | 月卡到期日 |
%signed_days% | 本月已签到天数 |
%total_days% | 当月总天数 |
%streak% | 连续签到天数 |
月卡商店
27 格 (3行 × 9列) 商店面板,用于购买和查看月卡。
面板布局
┌──┬──┬──┬──┬──┬──┬──┬──┬──┐
│▓ │▓ │▓ │▓ │▓ │▓ │▓ │▓ │▓ │ 行0: 边框
├──┼──┼──┼──┼──┼──┼──┼──┼──┤
│▓ │▓ │📄│▓ │▓ │▓ │⭐│▓ │▓ │ 行1: 商品
├──┼──┼──┼──┼──┼──┼──┼──┼──┤
│▓ │▓ │▓ │▓ │🔙│▓ │▓ │▓ │▓ │ 行2: 功能
└──┴──┴──┴──┴──┴──┴──┴──┴──┘
📄 = 普通月卡 (Slot 11) ⭐ = 精英月卡 (Slot 15)
🔙 = 返回日历 (Slot 22) ▓ = 黑色边框填充
商品显示
每个月卡商品自动读取 passes.yml 中的配置:
- 图标 —
shop-icon.material+custom-model-data - 名称 —
display-name(支持 MiniMessage) - 描述 —
description列表 - 价格 — 自动显示价格和货币类型
- 状态 — 已拥有时显示到期日,未拥有时显示「点击购买」
购买流程
- 点击商品图标
- 检查是否已拥有该月卡(已拥有则拒绝)
- 扣除对应货币(Vault 或 PlayerPoints)
- 给予月卡,播放音效
- 自动刷新商店界面
奖励系统
3 层奖励体系
| 类型 | 配置键 | 触发条件 | 可重复 |
|---|---|---|---|
| 📦 每日奖励 | daily-reward | 每次签到触发 | ✅ 每天 |
| ⭐ 特殊日奖励 | special-days | 指定日期签到 (覆盖每日奖励) | ✅ 每月 |
| 🏆 里程碑奖励 | milestones | 当月累计签到达 N 天 | ❌ 一次性 |
奖励内容
每种奖励包含两部分:
| 内容 | 配置键 | 说明 |
|---|---|---|
| 月卡积分 | points | 累加到玩家月卡积分 |
| 命令奖励 | commands | 以控制台身份执行,支持 %player% 变量 |
特殊日奖励
以当月第几天为键,覆盖当日的 daily-reward:
special-days:
7: # 第7天
points: 30
commands:
- "give %player% diamond 3"
- "give %player% gold_ingot 5"
14: # 第14天
points: 50
commands:
- "give %player% diamond 5"
累计里程碑
当月累计签到达到指定天数时额外触发,每个里程碑仅领取一次:
milestones:
7: # 累计7天
points: 50
commands:
- "give %player% emerald 10"
28: # 累计28天 (满勤)
points: 500
commands:
- "give %player% elytra 1"
精英月卡继承
设置 includes: "normal" 后,精英月卡签到时自动叠加普通月卡的当日奖励,包括积分和命令。
默认奖励对比
| 里程碑 | 普通月卡 | 精英月卡 |
|---|---|---|
| 第 7 天 | 钻石 ×3 + 金锭 ×5 (30分) | 钻石块 ×1 (80分) |
| 第 14 天 | 钻石 ×5 (50分) | 钻石块 ×2 (120分) |
| 第 21 天 | 钻石块 ×1 (80分) | 下界合金锭 ×3 (200分) |
| 第 28 天 | 下界合金锭 ×1 (150分) | 下界合金块 ×1 (400分) |
| 累计 7 天 | 绿宝石 ×10 (50分) | 绿宝石块 ×2 (100分) |
| 累计 14 天 | 绿宝石块 ×1 (100分) | 下界之星 ×2 (200分) |
| 累计 21 天 | 下界之星 ×1 (200分) | 不死图腾 ×1 (400分) |
| 累计 28 天 | 鞘翅 ×1 (500分) | 鞘翅 ×1 + 下界合金块 ×2 (1000分) |
积分系统
月卡积分是插件内置的独立积分体系,与 Vault/PlayerPoints 无关。
积分来源
| 来源 | 说明 |
|---|---|
| 每日签到 | 普通 10分/天,精英 25分/天 |
| 特殊日奖励 | 指定日期额外积分 |
| 里程碑奖励 | 累计签到达标额外积分 |
| 管理员给予 | /mc admin points <玩家> give <数量> |
积分管理命令
/mc admin points <玩家> give <数量> # 给予积分
/mc admin points <玩家> take <数量> # 扣除积分
/mc admin points <玩家> set <数量> # 设置积分
积分名称自定义
在 config.yml 中设置:
points-name: "<gradient:#FFD700:#FFA500>月卡积分</gradient>"
PAPI 占位符
积分可通过 %monthcard_points% 在任何支持 PAPI 的地方显示。
命令与权限
主命令
/monthcard (别名: /mc /mcard)
玩家命令
| 命令 | 说明 | 权限 |
|---|---|---|
/mc | 打开签到日历面板 | monthcard.use |
/mc sign | 打开签到日历 (同上) | monthcard.sign |
/mc shop | 打开月卡商店 | monthcard.shop |
/mc info | 查看自己的月卡信息 | monthcard.use |
/mc help | 查看帮助 | monthcard.use |
管理命令
| 命令 | 说明 | 权限 |
|---|---|---|
/mc admin reload | 重载所有配置文件 | monthcard.admin.reload |
/mc admin give <玩家> <月卡ID> [天数] | 给予玩家月卡 | monthcard.admin.give |
/mc admin reset <玩家> | 重置玩家所有数据 | monthcard.admin.reset |
/mc admin backup | 手动触发备份 | monthcard.admin.backup |
/mc admin points <玩家> give <数量> | 给予积分 | monthcard.admin |
/mc admin points <玩家> take <数量> | 扣除积分 | monthcard.admin |
/mc admin points <玩家> set <数量> | 设置积分 | monthcard.admin |
/mc info <玩家> | 查看他人月卡信息 | monthcard.admin |
权限节点
| 权限 | 默认 | 说明 |
|---|---|---|
monthcard.use | true | 使用月卡基础功能 |
monthcard.sign | true | 签到权限 |
monthcard.shop | true | 查看月卡商店 |
monthcard.admin | OP | 管理员总权限 |
monthcard.admin.reload | OP | 重载配置 |
monthcard.admin.give | OP | 给予月卡 |
monthcard.admin.reset | OP | 重置玩家数据 |
monthcard.admin.backup | OP | 手动备份 |
config.yml
完整配置参考
# 数据库设置
database:
type: sqlite # sqlite 或 mysql
mysql:
host: localhost
port: 3306
database: adventuremonthcard
username: root
password: ""
pool-size: 5
# 自动备份
backup:
enabled: true
time: "04:00" # 每天几点备份 (24小时制)
max-backups: 7 # 最多保留几份
# 签到提醒
reminder:
on-join: true # 登录时提醒未签到
on-join-delay: 60 # 延迟多少ticks后提醒
scheduled:
enabled: true # 定时提醒
times:
- "12:00"
- "20:00"
type: TITLE # CHAT / ACTIONBAR / TITLE
# 签到音效
sounds:
sign-success: "ENTITY_PLAYER_LEVELUP"
sign-fail: "ENTITY_VILLAGER_NO"
shop-buy: "BLOCK_NOTE_BLOCK_PLING"
gui-click: "UI_BUTTON_CLICK"
gui-open: "BLOCK_CHEST_OPEN"
# 月卡积分名称
points-name: "<gradient:#FFD700:#FFA500>月卡积分</gradient>"
配置项说明
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
database.type | String | sqlite | 数据库类型 |
backup.enabled | boolean | true | 启用自动备份 |
backup.time | String | 04:00 | 备份时间 |
backup.max-backups | int | 7 | 最大备份数 |
reminder.on-join | boolean | true | 登录提醒 |
reminder.on-join-delay | int | 60 | 提醒延迟 (ticks) |
reminder.type | String | TITLE | 提醒方式 |
sounds.* | String | — | Bukkit Sound 枚举名 |
passes.yml
月卡定义结构
passes:
月卡ID:
display-name: "显示名称 (MiniMessage)"
description:
- "描述行1"
- "描述行2"
permission: "monthcard.月卡ID"
duration-days: 30 # 有效天数
price: 5000 # 价格
currency-type: VAULT # VAULT (银币) 或 PLAYERPOINTS (金币)
includes: "其他月卡ID" # 继承 (可选)
shop-icon:
material: PAPER # 商店图标物品
custom-model-data: 0 # 自定义模型ID
daily-reward:
points: 10 # 每日签到积分
commands:
- "give %player% diamond 1"
special-days:
7: # 当月第7天
points: 30
commands:
- "give %player% diamond 3"
milestones:
7: # 累计签到7天
points: 50
commands:
- "give %player% emerald 10"
字段说明
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
display-name | String | ✅ | 月卡显示名称 (MiniMessage) |
description | List | ❌ | 商店描述文本 |
permission | String | ❌ | 购买后赋予的权限 |
duration-days | int | ✅ | 有效天数 |
price | double | ✅ | 购买价格 |
currency-type | enum | ✅ | VAULT 或 PLAYERPOINTS |
includes | String | ❌ | 包含的低级月卡 ID |
shop-icon | Section | ❌ | 商店图标 (material + cmd) |
daily-reward | Section | ✅ | 每日签到奖励 |
special-days | Map | ❌ | 特殊日奖励 (key=天数) |
milestones | Map | ❌ | 里程碑奖励 (key=累计天数) |
新增自定义月卡
只需在 passes 下新增一个节点,如 vip:
passes:
normal: ...
elite: ...
vip: # 新增 VIP 月卡
display-name: "<gradient:#FF6B6B:#FF8E53>VIP月卡</gradient>"
duration-days: 30
price: 500
currency-type: PLAYERPOINTS
includes: "elite" # 包含精英月卡奖励
daily-reward:
points: 50
commands:
- "give %player% diamond_block 1"
然后在 gui.yml 的 shop.items 中添加 vip.slot 即可在商店显示。
gui.yml
日历面板配置
calendar:
title: "<gradient:#FFD700:#FFA500>✦ 月卡签到 - %month%月 ✦</gradient>"
size: 54 # GUI大小: 9/18/27/36/45/54
day-slots: # 7列日期格子布局
- 10,11,12,13,14,15,16
- 19,20,21,22,23,24,25
- 28,29,30,31,32,33,34
- 37,38,39,40,41,42,43
- 46,47,48,49,50,51,52
items:
available: # 今天可签到
material: SUNFLOWER
custom-model-data: 0
name: "<yellow>✦ 第%day%天 - 点击签到!</yellow>"
lore: [...]
signed: # 已签到
material: LIME_DYE
future: # 未到日期
material: GRAY_STAINED_GLASS_PANE
missed: # 已错过
material: RED_DYE
buttons:
info:
slot: 4
material: BOOK
shop:
slot: 0
material: GOLD_INGOT
milestone:
slot: 8
material: DIAMOND
filler:
material: BLACK_STAINED_GLASS_PANE
商店面板配置
shop:
title: "<gradient:#FFD700:#FF8C00>✦ 月卡商店 ✦</gradient>"
size: 27
items:
normal:
slot: 11 # 普通月卡位置
elite:
slot: 15 # 精英月卡位置
back:
slot: 22
material: ARROW
name: "<gray>返回签到日历</gray>"
自定义日期布局
day-slots 定义了每一行的日期 Slot 位置。修改这些数字可以改变日期格子的排列方式。每行 7 个数字对应星期一到星期日。
messages.yml
所有消息支持 MiniMessage 格式标签和 RGB 渐变色。
消息分类
| 分类 | 前缀 | 说明 |
|---|---|---|
| 签到 | sign.* | 签到成功/失败/里程碑/连签 |
| 商店 | shop.* | 购买成功/余额不足/已拥有 |
| 提醒 | reminder.* | 登录提醒/定时提醒/Title |
| 管理 | admin.* | 重载/给予/重置/备份 |
| 信息 | info.* | 月卡信息显示 |
| 帮助 | help.* | 帮助文本 |
可用变量
| 变量 | 说明 | 适用消息 |
|---|---|---|
%player% | 玩家名 | 全部 |
%points% | 获得积分 / 总积分 | sign / info |
%days% | 签到天数 | sign / info / admin |
%streak% | 连续签到天数 | sign / info |
%pass% | 月卡类型名 | shop / info / admin |
%price% | 价格 | shop |
%currency% | 货币名称 | shop |
%date% | 到期日期 | info |
%amount% | 积分数量 | admin.points |
前缀自定义
prefix: "<gradient:#FFD700:#FFA500>[月卡]</gradient> "
所有带前缀的消息自动拼接此前缀。
PlaceholderAPI 占位符
安装 PlaceholderAPI 后自动注册,无需手动下载扩展。
占位符列表
| 占位符 | 说明 | 示例值 |
|---|---|---|
%monthcard_points% | 月卡积分 | 350 |
%monthcard_streak% | 连续签到天数 | 7 |
%monthcard_signed_today% | 今日是否已签到 | true / false |
%monthcard_signed_month% | 本月签到天数 | 15 |
%monthcard_has_normal% | 是否拥有普通月卡 | true / false |
%monthcard_has_elite% | 是否拥有精英月卡 | true / false |
%monthcard_has_any% | 是否拥有任意月卡 | true / false |
%monthcard_pass_type% | 当前最高月卡类型 | 精英月卡 / 无 |
%monthcard_expire_normal% | 普通月卡到期日 | 2026-06-07 / 无 |
%monthcard_expire_elite% | 精英月卡到期日 | 2026-06-07 / 无 |
使用场景
- 计分板 — 显示月卡积分、签到天数、连签
- Tab 列表 — 显示月卡类型标识
- 聊天格式 — 显示月卡徽章
- NPC 对话 — 动态显示月卡信息
- 条件判断 — 结合 PAPI 条件变量实现动态逻辑
经济集成
双经济体系
| 经济 | 插件 | 用途 | 配置值 |
|---|---|---|---|
| 银币 | Vault | 普通月卡购买 | currency-type: VAULT |
| 金币 | PlayerPoints | 精英月卡购买 | currency-type: PLAYERPOINTS |
Vault 集成
自动检测 Vault 插件,通过 Economy 服务进行扣款。如果 Vault 不存在,VAULT 类型的月卡将无法购买。
PlayerPoints 集成
通过反射挂钩 PlayerPoints API,无需编译依赖。如果 PlayerPoints 不存在,PLAYERPOINTS 类型的月卡将无法购买。
奖励命令中使用经济
奖励的 commands 可直接调用经济插件命令:
commands:
- "eco give %player% 500" # Vault 给银币
- "points give %player% 100" # PlayerPoints 给金币
数据库
支持类型
| 类型 | 适用场景 | 配置 |
|---|---|---|
| SQLite | 单服 / 小型服务器 | type: sqlite |
| MySQL | 多服 / 大型服务器 | type: mysql |
数据表结构
| 表名 | 说明 | 主键 |
|---|---|---|
mc_passes | 月卡拥有记录 | uuid + pass_id |
mc_signs | 签到记录 | uuid + sign_date |
mc_player_data | 玩家数据 (积分/连签) | uuid |
mc_milestones | 里程碑领取记录 | uuid + pass_id + milestone_day |
MySQL 配置
database:
type: mysql
mysql:
host: localhost
port: 3306
database: adventuremonthcard
username: root
password: "your_password"
pool-size: 5
连接池
使用 HikariCP 高性能连接池 (内置,无需额外安装)。
- 自动重连
- 连接池大小可配置
- 预编译语句缓存
数据缓存
- 玩家上线时异步加载到内存缓存
- 下线时自动保存并移除缓存
- 每 5 分钟自动全量保存 (防止异常丢数据)
自动备份
功能说明
定时将全部数据表导出为 SQL 文件,存储在 plugins/AdventureMonthCard/backUp/ 目录。
配置
backup:
enabled: true # 启用自动备份
time: "04:00" # 每天凌晨 4 点执行
max-backups: 7 # 最多保留 7 份
备份文件格式
backUp/
├── backup_2026-05-01_04-00-00.sql
├── backup_2026-05-02_04-00-00.sql
├── ...
└── backup_2026-05-07_04-00-00.sql # 最新
文件命名: backup_日期_时间.sql,内容为 INSERT 语句。
自动轮替
超过 max-backups 数量后,自动删除最旧的备份文件。
手动备份
/mc admin backup
管理员可随时手动触发备份,异步执行不影响服务器性能。
颜色与格式
所有配置文件中的文本均支持以下三种颜色格式:
1. MiniMessage 标签
| 标签 | 效果 |
|---|---|
<black> ~ <white> | 16种基础颜色 |
<bold> | 粗体 |
<italic> | 斜体 |
<underlined> | 下划线 |
<strikethrough> | 删除线 |
<obfuscated> | 混淆文字 |
<reset> | 重置格式 |
示例: <green>签到成功! <yellow>+10 积分</yellow></green>
2. RGB HEX 颜色
<#FF6B35>橙色文字
<#4ADE80>绿色文字
3. 渐变色
<gradient:#FFD700:#FFA500>金色渐变文字</gradient>
<gradient:#87CEEB:#4682B4>蓝色渐变文字</gradient>
4. 传统颜色码
同时支持 & 颜色码: &a &6 &l 等。
支持颜色的配置位置
- messages.yml — 所有消息文本
- gui.yml — GUI 标题、物品名称、物品描述
- passes.yml — 月卡显示名称、描述
- config.yml — 积分名称
更新日志
v1.0.0 最新
- NEW 月卡体系 — 普通月卡 (Vault) + 精英月卡 (PlayerPoints) 双级体系
- NEW 签到日历 GUI — 54格日历面板,4种日期状态,自定义材质 + CustomModelData
- NEW 月卡商店 GUI — 可视化购买月卡,自动显示价格/状态
- NEW 3层奖励体系 — 每日奖励 / 特殊日奖励 / 累计里程碑,精英包含普通奖励
- NEW 月卡积分 — 独立积分体系,签到累积,管理员可管理
- NEW 连续签到追踪 — 自动记录连签天数,断签重置
- NEW 智能提醒 — 登录提醒 + 定时提醒 (CHAT / TITLE / ACTIONBAR)
- NEW 双经济集成 — Vault (银币) + PlayerPoints (金币) 反射挂钩
- NEW 数据存储 — SQLite / MySQL + HikariCP 连接池
- NEW 自动备份 — 定时 SQL 全量导出 + 自动轮替
- NEW PAPI 变量 — 10 个占位符 (积分/连签/月卡状态/到期日等)
- NEW MiniMessage + RGB — 渐变色 / HEX / 标签全支持
- NEW 完全可配置 — 4个 YAML 配置文件 (config/passes/gui/messages)
- NEW 命令系统 — 玩家命令 + 管理命令 + Tab 补全