📅 AdventureSignIn

一、简介

AdventureSignIn —— 每日签到日历系统,头颅日历 · 七种奖励 · 补签卡 · 权限组 · 跨服同步

AdventureSignIn 为您的服务器提供完整的每日签到系统。玩家通过精美的 54 格头颅日历面板签到,支持 7 种奖励类型、权限组差异化奖励、补签卡机制和 Redis 跨服数据同步。

兼容 Paper / Spigot 1.21.4+ 服务器(Java 21),完全自包含,无需前置插件。

核心特性

  • 头颅日历面板 > 54 格 7 列布局,5 种日期状态独立头颅材质
  • 7 种奖励类型 > 连签里程碑 / 连签周期 / 累计里程碑 / 累计周期 / 特殊日期 / 特殊星期 / 基础奖励
  • 权限组系统 > VIP / Default 分组,优先级匹配
  • 补签卡系统 > 4 种补签模式 (CARD/VAULT/ITEM/FREE)
  • 奖励物品 > 命令 / 消息 / 广播 / 物品 / 音效,支持随机数量
  • MiniMessage > 渐变色 / HEX / 悬停提示全支持
  • 数据存储 > SQLite / MySQL + HikariCP 连接池
  • Redis 跨服 > Pub/Sub 实时同步签到数据
  • PAPI 变量 > 7 个占位符,支持计分板等外部显示
  • 完全自包含 > HikariCP / Jedis 内置,无需安装前置插件

二、插件前置说明

均为可选依赖,不安装也能正常运行:

  • Vault — 经济系统联动 (VAULT 模式补签扣费、命令奖励)
  • PlaceholderAPI — 占位符扩展 (计分板 / Tab / 聊天格式)

📥 安装与目录

环境要求

项目要求
服务端Paper / Spigot 1.21.4+
Java21+

依赖插件

插件类型说明
Vault可选经济扣费 / 金币奖励
PlaceholderAPI可选占位符扩展

安装步骤

  1. 放入 AdventureSignIn-1.1.0.jarplugins/ 目录
  2. 重启服务器
  3. 编辑 plugins/AdventureSignIn/ 下配置文件
  4. /signin reload 重载生效

目录结构

plugins/AdventureSignIn/
├── config.yml          # 核心配置 (时区/补签/存储/Redis)
├── messages.yml        # 消息文本 (MiniMessage 格式)
├── gui-settings.yml    # 日历面板外观 (头颅/按钮/布局)
├── rewards.yml         # 奖励配置 (权限组/7种奖励类型)
└── data/
    └── adventuresignin.db  # SQLite 数据库

📅 日历面板

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
└──┴──┴──┴──┴──┴──┴──┴──┴──┘

← = 上月翻页    👤 = 玩家档案    → = 下月翻页
☰ = 返回菜单    ▓ = 琥珀边框      ✕ = 关闭

5 种日期状态

状态配置键说明可交互
✓ 已打卡checked当天已签到 (绿色头颅)
★ 今日待签pending今天未签到 (金色发光头颅)✅ 点击签到
◻ 未到upcoming未来日期 (灰色头颅)
✗ 缺勤skipped过去未签到 (红色头颅)✅ 点击补签
↻ 已补签recovered补签找回 (青色头颅)

功能组件

组件位置说明
玩家档案Slot 3显示连签天数、累计签到、补签卡余额
上月翻页Slot 0查看上月签到历史
下月翻页Slot 6查看下月签到记录
返回菜单Slot 8可配置执行命令
关闭面板Slot 53关闭并发送消息
琥珀边框两侧 + 底部橙色玻璃板装饰

头颅材质

每种状态使用独立的 Base64 材质,可从 minecraft-heads.com 获取并替换。

calendar:
  checked:
    item: PLAYER_HEAD
    skull-value: 'eyJ0ZXh0dXJl...'   # Base64 材质
    title: "<#4ADE80>✓ <white>%day%日 <#4ADE80>已打卡"
    glow: false                       # 附魔发光
    auto-close: false                 # 点击后关闭面板

历史月份浏览

  • 点击 ◄ 上月 / 下月 ► 翻页
  • 命令跳转: /signin gui 3 2026 直接查看 2026年3月
  • 历史月份标题自动切换为 ❖ 历史签到 — 3月 格式

🎁 奖励系统

7 种奖励类型

类型配置键触发条件可重复
🎯 基础签到normal每次签到✅ 每天
🔄 补签奖励retroactive补签时触发
🔥 连签里程碑streak-milestones连续签到达 N 天❌ 一次性
♻️ 连签周期streak-cycle每连续 N 天✅ 循环
⭐ 累计里程碑total-milestones累计签到达 N 天❌ 一次性
🔁 累计周期total-cycle每累计 N 天✅ 循环
📅 特殊日期special-dates指定日期 (MM-dd)✅ 每年

另有 special-weeks (特殊星期) 奖励,1=周一 ~ 7=周日。

奖励内容 (5 种)

内容配置键示例
命令commandsconsole:eco give %player% 100
消息messages<green>签到成功!
广播broadcast-messages%player% 连签了 7 天!
物品itemsdiamond:1gold_ingot:3-5
音效soundsENTITY_PLAYER_LEVELUP-1-0-true

命令前缀

前缀执行方式
console:后台控制台执行
sudo:以管理员权限执行
(无前缀)玩家正常执行

override-default-rewards 机制

里程碑/周期/特殊奖励设置 override-default-rewards: true 时,该次签到不发放基础 normal 奖励,仅发放该特殊奖励。用于"大奖替换小奖"场景。

奖励执行顺序

可在 reward-task-sequence 中自定义执行顺序:

reward-task-sequence:
  - ITEMS_REWARD             # 1. 给予物品
  - COMMANDS_EXECUTION       # 2. 执行命令
  - MESSAGES_SENDING         # 3. 发送消息
  - BROADCAST_MESSAGES_SENDING  # 4. 广播消息
  - PLAY_SOUNDS              # 5. 播放音效

🔄 补签系统

4 种补签模式

模式扣费方式配置
CARD消耗补签卡card-cost: 1
VAULTVault 经济扣款cost.amount: 500
ITEM消耗指定物品cost.item: DIAMOND + amount: 1
FREE免费补签无需配置

补签限制

  • 每月次数上限: max-per-month: 3 (默认每月 3 次)
  • 最远回溯天数: max-days-ago: 30 (最多补 30 天前)
  • 不能补签未来日期
  • 不能重复补签同一天

补签卡系统

设置说明默认
initial-amount新玩家初始补签卡数量3
daily-earn每日签到额外获得补签卡0
card-cost每次补签消耗卡数1

补签卡管理命令

/signin card give <玩家> <数量>   # 给予补签卡
/signin card take <玩家> <数量>   # 扣除补签卡
/signin card set <玩家> <数量>    # 设置补签卡数量

补签奖励控制

补签时可通过 disabled-modules 禁止某些奖励模块触发:

retroactive:
  disabled-modules:
    special-dates: true       # 禁止补签获取特殊日期奖励
    special-weeks: true       # 禁止补签获取特殊星期奖励
    statistics-times: false   # 允许补签触发累计里程碑
    statistics-times-cycle: false

补签与连签

补签成功后会自动重新计算连续签到天数。如果补签的日期恰好填补了断链,连签天数会自动连通。

👥 权限组

通过权限节点实现 VIP 与普通玩家不同的签到奖励。

优先级匹配

groups-priority 从上到下匹配,第一个满足权限的组生效。

groups-priority:
  - VIP        # 优先匹配
  - Default    # 兜底

组配置示例

permission-groups:
  Default:
    # 无 permission 字段 = 所有人匹配
    normal:
      commands:
        - "console:eco give %player% 100"
      items:
        - "diamond:1"
    streak-milestones:
      7:
        commands:
          - "console:eco give %player% 700"
        items:
          - "diamond_sword:1"

  VIP:
    permission: "adventuresignin.group.vip"
    normal:
      commands:
        - "console:eco give %player% 200"
      items:
        - "diamond:2"

每个组支持的奖励模块

  • normal — 基础签到
  • retroactive — 补签奖励 + disabled-modules
  • streak-milestones — 连签里程碑
  • streak-cycle — 连签周期
  • total-milestones — 累计里程碑
  • total-cycle — 累计周期
  • special-dates — 特殊日期 (MM-dd)
  • special-weeks — 特殊星期 (1=周一 ~ 7=周日)

⌨️ 命令与权限

玩家命令

命令别名说明
/signin/sign /qd /qiandao打开签到日历面板
/signin gui [月] [年]查看指定月份日历
/signin info查看自己的签到信息
/signin help查看帮助

管理命令

命令说明
/signin reload重载所有配置文件
/signin info <玩家>查看指定玩家签到信息
/signin give <玩家> <日期>补录签到记录 (日期格式: yyyy-MM-dd)
/signin reset <玩家>重置玩家所有签到数据
/signin card give <玩家> <数量>给予补签卡
/signin card take <玩家> <数量>扣除补签卡
/signin card set <玩家> <数量>设置补签卡数量

权限节点

权限默认说明
adventuresignin.usetrue使用签到面板
adventuresignin.adminOP管理员命令 (reload/give/reset/card/查看他人info)
adventuresignin.group.vipfalseVIP 权限组 (享受 VIP 签到奖励)

⚙️ 配置文件 (config.yml)

完整配置参考

# 时区 (用于判断"今天"是哪天)
timezone: "Asia/Shanghai"

# 自动签到: 玩家上线时自动签到
auto-sign-on-join: false

# 签到冷却提示 (已签到的玩家再次点击签到时)
show-already-signed-message: true

# 补签设置
makeup:
  enabled: true
  mode: CARD           # CARD / VAULT / ITEM / FREE
  max-per-month: 3     # 每月补签上限
  card-cost: 1         # CARD 模式消耗
  cost:
    type: VAULT        # VAULT / ITEM
    amount: 500        # 金额或物品数量
    item: DIAMOND      # ITEM 模式物品
  max-days-ago: 30     # 最远回溯天数

# 补签卡设置
retroactive-card:
  initial-amount: 3    # 新玩家初始卡
  daily-earn: 0        # 每日签到获卡

# 数据存储
storage:
  type: sqlite         # sqlite / mysql
  mysql:
    host: localhost
    port: 3306
    database: minecraft
    username: root
    password: ""
    table-prefix: "asignin_"
  redis:
    enabled: false
    host: localhost
    port: 6379
    password: ""
    channel: "adventuresignin:sync"

messages.yml

所有消息支持 MiniMessage 格式 (<green>, <gradient:#FF6B35:#FFB347>, <hover:show_text:'...'>)。

可用变量: %player% %streak% %total% %cards% %date%

🎨 面板配置 (gui-settings.yml)

面板标题

# 当月标题
title: "<gradient:#FF6B35:#FFB347><bold>✦ 签到日历</bold></gradient> — %date%"
# 历史月标题
title-history: "<gradient:#5B86E5:#36D1DC><bold>❖ 历史签到</bold></gradient> — %view_month%月"
# 跨年标题
title-history-year: "...— %view_year%年%view_month%月"
# 日期格式
date-format: "yyyy年MM月dd日"

日历状态配置

每种状态支持以下属性:

属性类型说明
itemMaterial物品类型 (一般为 PLAYER_HEAD)
skull-valueStringBase64 头颅材质
titleMiniMessage物品显示名称
loreList物品描述
glowboolean附魔发光效果 (默认 false)
auto-closeboolean点击后自动关闭面板
commandsList点击执行命令
messagesList点击发送消息

可用变量

变量说明
%player%玩家名
%day%日号 (1~31)
%date%格式化日期
%date_iso%ISO日期 (yyyy-MM-dd)
%view_month%当前查看月
%view_year%当前查看年
%streak%连续签到天数
%total%累计签到次数
%cards%补签卡余额
%prev_m% / %prev_y%上月月份 / 年份
%next_m% / %next_y%下月月份 / 年份

功能组件 (widgets)

组件支持 slot (单槽) 或 slots (多槽) 定位,以及 head-owner 渲染玩家头颅。

widgets:
  profile:
    item: PLAYER_HEAD
    head-owner: "%player%"       # 使用玩家头颅
    title: "...我的签到..."
    slot: 3                      # 单槽位
  filler:
    item: ORANGE_STAINED_GLASS_PANE
    title: " "
    slots: [1, 2, 4, 5, 7, ...]  # 多槽位填充

📝 奖励配置 (rewards.yml)

完整示例

permission-groups:
  Default:
    normal:
      messages:
        - "<prefix><green>签到成功!获得每日奖励。"
      commands:
        - "console:eco give %player% 100"
      items:
        - "diamond:1"
        - "gold_ingot:3-5"        # 随机 3~5 个
      sounds:
        - "ENTITY_EXPERIENCE_ORB_PICKUP-1-1-false"

    streak-milestones:
      3:
        override-default-rewards: true
        messages:
          - "<prefix><gold>✦ 连签 3 天!奖励翻倍!"
        broadcast-messages:
          - "<prefix>%player% 连签了 3 天!"
        commands:
          - "console:eco give %player% 300"
      7:
        commands:
          - "console:eco give %player% 700"
        items:
          - "diamond_sword:1"
      30:
        commands:
          - "console:eco give %player% 5000"
        items:
          - "diamond_block:1"

    streak-cycle:
      3:              # 每连续 3 天触发
        items:
          - "golden_apple:1"

    total-milestones:
      10:
        commands:
          - "console:eco give %player% 1000"
      100:
        commands:
          - "console:eco give %player% 10000"

    total-cycle:
      50:             # 每累计 50 天触发
        commands:
          - "console:eco give %player% 5000"

    special-dates:
      '01-01':        # 元旦
        items:
          - "golden_apple:3"
      '12-25':        # 圣诞
        items:
          - "apple:64"

    special-weeks:
      6:              # 周六
        items:
          - "golden_apple:1"
      7:              # 周日
        items:
          - "golden_apple:1"

物品格式

# 固定数量
- "diamond:1"

# 随机数量 (min-max)
- "gold_ingot:3-5"    # 随机 3~5 个

音效格式

# 格式: 音效名-音量-音调-是否广播
- "ENTITY_PLAYER_LEVELUP-1-0-true"    # 全服可听
- "ENTITY_EXPERIENCE_ORB_PICKUP-1-1-false"  # 仅自己

🔗 PlaceholderAPI 占位符

安装 PlaceholderAPI 后自动注册,无需手动下载扩展。

占位符列表

占位符说明示例值
%adventuresignin_streak%当前连续签到天数7
%adventuresignin_max_streak%历史最长连签天数30
%adventuresignin_total%累计签到总天数156
%adventuresignin_signed_today%今日是否已签到是 / 否
%adventuresignin_last_date%上次签到日期2026-05-04
%adventuresignin_cards%补签卡余额3
%adventuresignin_group%当前匹配的权限组VIP / Default

使用场景

  • 计分板 — 显示连签天数、今日签到状态
  • Tab 列表 — 显示 VIP 签到组名
  • 聊天格式 — 显示签到徽章
  • NPC 对话 — 动态显示签到信息

🌐 Redis 跨服部署

前提

  • Velocity / BungeeCord 代理群组
  • Redis 实例
  • 所有子服连同一个 MySQL(SQLite 不支持跨服)

数据流

操作流程
签到内存 → 异步写 MySQL → Redis Pub/Sub 通知其他服
收到通知清除本地缓存 → 下次访问从 DB 加载最新数据
玩家登录异步从 MySQL 加载 → 存入本地缓存
玩家退出异步保存 MySQL → 移除缓存

配置

storage:
  type: mysql
  mysql:
    host: 127.0.0.1
    port: 3306
    database: adventure_signin
    username: root
    password: "your_password"
    table-prefix: "asignin_"
  redis:
    enabled: true
    host: "127.0.0.1"
    port: 6379
    password: ""
    channel: "adventuresignin:sync"

Pub/Sub

  • 频道:adventuresignin:sync
  • 消息:UUID:action (如 reload)
  • 收到消息后自动刷新该玩家的本地缓存
ℹ️ 降级策略

Redis 完全可选。enabled: false 时仅使用 MySQL + 本地缓存,单服不影响使用。

部署步骤

  1. 安装 Redis
  2. 每个子服配置同一 MySQL 数据库
  3. 设置 redis.enabled: true
  4. 重启所有子服
  5. 在不同服签到验证数据同步

📝 更新日志

v1.1.0 最新

  • NEW GUI 引擎重构 — 7列居中布局、琥珀色边框、渐变标题
  • NEW 配置结构优化 — 日历区 (calendar) / 组件区 (widgets) 分离
  • NEW 5 种日期状态 — checked/pending/upcoming/skipped/recovered 独立配置
  • NEW MiniMessage 全面支持 — 标题/名称/描述/消息均支持渐变色和HEX
  • FIX 连签计算修复 — 补签后连签天数正确重算并更新 lastSignDate
  • FIX 补签卡存储修复 — 修复每日获卡与数据持久化的时序竞态问题
  • FIX 依赖瘦身 — 移除未使用的 triumph-gui,JAR 体积减小

v1.0.0

  • NEW 核心签到系统 — 每日签到 + 连签 + 累计统计
  • NEW 7 种奖励类型 — 里程碑/周期/特殊日期/星期/基础/补签
  • NEW 权限组系统 — 优先级匹配,VIP 差异化奖励
  • NEW 补签卡系统 — 4 种模式 (CARD/VAULT/ITEM/FREE)
  • NEW 54 格日历面板 — 自定义头颅材质 + 5 种状态
  • NEW 物品奖励 — 支持随机数量范围
  • NEW 数据存储 — SQLite / MySQL + HikariCP
  • NEW Redis 跨服 — Pub/Sub 实时同步
  • NEW PAPI 变量 — 7 个占位符