📋 AdventureTask
一、简介
AdventureTask —— 一款每日任务系统插件,任务池随机 · 活跃度阶梯 · 任务卡 · 商城
AdventureTask 为您的服务器提供完整的每日任务系统。每天从任务池中随机抽取任务,玩家完成任务获取活跃度和任务币,累积活跃度可领取阶梯奖励,任务币可在商城兑换商品。支持51种目标类型和4种功能卡。
AdventureTask 支持 Paper / Spigot 1.21.4+ 服务器(Java 21),并且会第一时间支持未来版本。
AdventureTask
- 任务池随机 > 按权重从模板池抽取每日任务
- 51种目标 > 挖矿/击杀/合成/钓鱼/MythicMobs 等
- 活跃度阶梯 > 累积活跃度领取额外奖励
- 4种任务卡 > 重置/豁免/冷却/延迟
- 任务币商城 > 完成任务赚币兑换商品
- GUI 100% > 材质/名称/Lore/音效全自定义
- Redis跨服 > 支持 Redis 跨服数据同步
- 性能优化 > 异步处理,大服不卡顿
- 数据存储 > SQLite / MySQL
- PAPI变量 > 支持 PlaceholderAPI 变量
二、插件前置说明
都是非必须
- Vault — 经济插件(金币奖励)
- PlayerPoints — 点券插件(点券奖励)
- PlaceholderAPI — PAPI变量支持
- AdventureQuests — 主线/支线任务集成
- CraftEngine — GUI 自定义模型
- MythicMobs — KILL_MYTHICMOBS 目标类型
📥 安装与目录
环境要求
| 项目 | 要求 |
| 服务端 | Spigot / Paper 1.21.4+ |
| Java | 21+ |
依赖插件
| 插件 | 类型 | 说明 |
| Vault | 可选 | 金币奖励 |
| PlayerPoints | 可选 | 点券奖励 |
| PlaceholderAPI | 可选 | 占位符 |
| AdventureQuests | 可选 | 主线/支线任务集成 |
| CraftEngine | 可选 | GUI 自定义模型 |
| MythicMobs | 可选 | KILL_MYTHICMOBS 目标 |
安装步骤
- 放入
AdventureTask-1.1.0.jar
- 重启服务器
- 编辑配置文件
/ataskadmin reload
目录结构
plugins/AdventureTask/
├── config.yml # 核心配置
├── gui.yml # GUI 自定义
├── messages.yml # 消息文本
├── tasks.yml # 任务池模板
├── Translations/
│ ├── items_CN.yml # 660+ 物品中文
│ └── entities_CN.yml # 100+ 实体中文
└── data/
└── adventuretask.db
📋 每日任务
每天 00:00 (北京时间) 自动重置,从任务池按权重随机抽取。
- 默认每人每天 5 个任务
- VIP 权限增加额外 +1~+5 槽位
- 支持有序多步骤(需按顺序完成)
- 冻结/延迟的任务在重置时保留
任务池配置 (tasks.yml)
tasks:
mine_stone:
name: "§f采集石头"
description: "§7在世界中挖掘64个石头"
icon: STONE
weight: 20 # 越大越容易被抽到
activity-reward: 10 # 完成获得活跃度
objectives:
- type: BREAK_BLOCK
target: STONE
amount: 64
rewards:
- type: MONEY
amount: 100
- type: TASK_COIN
amount: 5
🎯 目标类型 (51 种)
8 大类,所有类型用于 tasks.yml 的 objectives[].type。
基础资源类 (12)
| 类型 | 中文 | target | 事件 |
BREAK_BLOCK | 挖掘方块 | STONE / ANY | BlockBreakEvent |
PLACE_BLOCK | 放置方块 | BRICKS / ANY | BlockPlaceEvent |
CRAFT_ITEM | 合成物品 | BREAD | CraftItemEvent |
SMELT_ITEM | 熔炼 | IRON_INGOT | FurnaceExtractEvent |
CATCH_FISH | 垂钓 | ANY / COD | PlayerFishEvent |
CONSUME_ITEM | 消耗食物 | ANY | PlayerItemConsumeEvent |
ENCHANT_ITEM | 附魔 | ANY | EnchantItemEvent |
BREW_ITEM | 酿造 | ANY | InventoryClick(BREWING) |
COLLECT_ITEM | 收集物品 | DIAMOND | 内部轮询 |
DELIVER_ITEM | 提交物品 | IRON_INGOT | 内部 |
DELIVER_ITEM_NPC | 向NPC提交 | NPC名称 | 内部 |
PICKUP_ITEM | 拾取物品 | DIAMOND | EntityPickupItemEvent |
战斗类 (8)
| 类型 | 中文 | target | 事件 |
KILL_MOB | 击杀怪物 | ZOMBIE / ANY | EntityDeathEvent |
KILL_PLAYER | 击杀玩家 | ANY | EntityDeathEvent |
KILL_MYTHICMOBS | 击杀MM怪 | SkeletonKing | MythicMobDeathEvent |
PROJECTILE_HIT | 投射命中 | ARROW / ANY | ProjectileHitEvent |
DAMAGE_DEALT | 造成伤害 | ZOMBIE / ANY | EntityDamageByEntityEvent |
DAMAGE_TAKEN | 承受伤害 | FALL / ANY | EntityDamageEvent |
PLAYER_DEATH | 玩家死亡 | ANY / FALL | PlayerDeathEvent |
LAUNCH_PROJECTILE | 发射投掷 | ARROW / ANY | ProjectileLaunchEvent |
生活/动物类 (7)
| 类型 | 中文 | target | 事件 |
TAME_MOB | 驯服 | WOLF / ANY | EntityTameEvent |
BREED_MOB | 繁殖 | COW / ANY | EntityBreedEvent |
SHEAR_ENTITY | 剪切 | SHEEP | PlayerShearEntityEvent |
HARVEST_CROP | 收获农作物 | WHEAT | BlockBreak+Ageable |
MILK_ENTITY | 挤奶 | COW / GOAT | PlayerInteractEntityEvent |
BUCKET_FILL | 装桶 | WATER_BUCKET | PlayerBucketFillEvent |
BUCKET_EMPTY | 倒桶 | LAVA_BUCKET | PlayerBucketEmptyEvent |
工作台类 (6)
| 类型 | 中文 | target | 事件 |
SMITHING | 锻造台 | NETHERITE_SWORD | InventoryClick(SMITHING) |
GRINDSTONE | 砂轮 | ANY | InventoryClick(GRINDSTONE) |
STONECUTTER | 切石机 | ANY | InventoryClick(STONECUTTER) |
ANVIL_USE | 铁砧 | ANY | InventoryClick(ANVIL) |
LOOM_USE | 织布机 | ANY | InventoryClick(LOOM) |
TRADE_VILLAGER | 村民交易 | ANY | InventoryClick(MERCHANT) |
移动/探索类 (7)
| 类型 | 中文 | target | 事件 |
WALK_DISTANCE | 行走距离 | ANY (格) | PlayerMoveEvent (每5格) |
RIDE_ENTITY | 骑乘 | HORSE / BOAT | VehicleEnterEvent |
PORTAL_USE | 传送门 | NETHER_PORTAL | PlayerPortalEvent |
ADVANCEMENT | 获得成就 | ANY | PlayerAdvancementDoneEvent |
REACH_LOCATION | 到达位置 | 坐标+半径 | 内部 |
SLEEP | 睡觉 | BED | PlayerBedEnterEvent |
JUMP | 跳跃 | JUMP | StatisticIncrementEvent |
数值/状态类 (3) + 交互类 (4) + 通用 (1)
| 类型 | 中文 | target |
GAIN_EXPERIENCE | 获取经验 | ANY |
REACH_LEVEL | 达到等级 | ANY |
ITEM_BREAK | 用坏工具 | ANY |
PLAYER_INTERACT | 交互 | 方块/实体 |
PLAYER_COMMAND | 执行命令 | 关键词 |
PLAYER_CHAT | 发言 | 关键词 |
CHEST_PUT | 放入箱子 | DIAMOND |
EQUIP_ARMOR | 穿戴装备 | DIAMOND_CHESTPLATE |
STEP_ON | 踩踏 | STONE_PRESSURE_PLATE |
EDIT_BOOK | 编书 | SIGN / EDIT |
CUSTOM | 自定义 | API 触发 |
ℹ️ 性能
WALK_DISTANCE 每 5 格推送一次;JUMP 使用 Statistic 事件而非 MoveEvent。
🎁 奖励与活跃度
奖励类型 (7 种)
| 类型 | 说明 | amount |
MONEY | Vault 金币 | 金币数 |
POINTS | PlayerPoints 点券 | 点券数 |
TASK_COIN | 任务币 (商城) | 币数 |
EXPERIENCE | MC 经验 | 经验值 |
ITEM | 物品给予 | 物品数 |
COMMAND | 控制台命令 | — |
ACTIVITY | 活跃度点数 | 活跃度数 |
活跃度系统
完成任务累积活跃度,每周自动重置。达门槛领取阶梯奖励。
- 每任务默认 +10 活跃度(tasks.yml 可自定义)
- 每周上限约 700 (10 任务 × 10 点 × 7 天)
- 阶梯奖励在
config.yml → activity-rewards 配置
🃏 4 种任务卡
| 卡片 | 效果 | 限制 |
| 重置卡 | 替换为新随机任务 | 每日最多 5 次 |
| 豁免卡 | 直接完成任务 | 无次数限制 |
| 冷却卡 | 冻结任务不过期 | 每任务限 1 次 |
| 延迟卡 | 延长 12 小时 | 每任务最多 2 次 (+24h) |
卡片配置 v1.1.0
cards:
reset:
material: PAPER
custom-model-data: 0
name: "§e任务重置卡"
lore:
- "§7类型: §eRESET"
- "§7替换当前任务为新的随机任务"
exempt:
material: PAPER
name: "§b任务豁免卡"
freeze:
material: PAPER
name: "§9任务冷却卡"
delay:
material: PAPER
name: "§d任务延迟卡"
匹配逻辑:material + ChatColor.stripColor(displayName) 同时匹配。
卡片选择 GUI
在任务中心右键进行中任务打开 27 格选择界面:
- 卡片数量以堆叠数显示 (1~127)
- 最后一行:
[点击对任务 "xxx" 使用此卡]
- 无库存卡显示灰色玻璃板
发放命令
/ataskadmin givecard <玩家> <RESET|EXEMPT|FREEZE|DELAY> [数量]
# 背包满时自动掉落
🖥️ GUI 系统
任务中心 GUI
54 格界面,/atask 打开:
行0: # # # # # # # # #
行1: # a # 1 2 3 4 5 # a=每日任务 Tab
行2: # b # 6 7 8 9 A # b=主线任务 Tab
行3: # c # B C D E F # c=支线任务 Tab
行4: # d # G H I J K # d=任务奖励中心 Tab
行5: ← # # @ $ # # # → @=信息 $=商城
- 4 个 Tab:每日 / 主线 / 支线 / 奖励中心
- 20 个任务槽 (4×5)
- 底部:信息、商城入口、翻页
GUI 100% 自定义
| 特性 | 配置 | 说明 |
| 材质 | material | Material 或 ce:namespace:id |
| 名称 | name | 支持颜色码+PAPI |
| 描述 | lore | 多行+占位符 |
| 发光 | glow: true | 附魔光效 |
| 状态材质 | override-material | 不同状态不同材质 |
| 模型 | custom-model-data | CustomModelData |
音效反馈
# 格式: 音效名:音量:音调
click-sound: "UI_BUTTON_CLICK:1.0:1.0"
right-click-sound: "BLOCK_NOTE_BLOCK_PLING:1.0:2.0"
click-sound: false # 关闭
通知系统 v1.1.0
4 种通知事件,每种支持 message / title / sound 三选:
| 事件 | 说明 |
daily-assigned | 每日任务分配 |
progress-half | 进度 50% |
progress-complete | 任务完成 |
activity-milestone | 活跃度达标 |
分页系统
- 下一页 (slot 53):有更多内容时显示
- 上一页 (slot 45):第 2 页起显示
CraftEngine 支持
material: "ce:myplugin:task_icon"
ℹ️ 降级
CE 未安装时自动降级为原版 PAPER 材质。
🛒 任务币商城
完成任务获得任务币,在商城兑换物品。
- 商品在
config.yml → shop 配置
- 4 种限购:每日 / 每周 / 总限购 / 全服限购
- 购买后执行命令(支持
{player})
- 独立 54 格 GUI,28 个商品槽
⌨️ 命令与权限
玩家命令
| 命令 | 别名 | 说明 |
/atask | /at /task | 打开任务中心 GUI |
管理命令
| 命令 | 说明 |
/ataskadmin reload | 重载所有配置 |
/ataskadmin givecoins <玩家> <数量> | 给予任务币 |
/ataskadmin takecoins <玩家> <数量> | 扣除任务币 |
/ataskadmin givecard <玩家> <类型> [数量] | 给予任务卡 (RESET/EXEMPT/FREEZE/DELAY) |
/ataskadmin reset <玩家> | 重置每日任务 |
/ataskadmin info <玩家> | 查看任务数据 |
/ataskadmin stats | 缓存/限流/Redis 统计 |
权限节点
| 权限 | 默认 | 说明 |
adventuretask.use | true | 使用任务中心 |
adventuretask.vip1~vip5 | false | VIP 额外 +1~+5 槽 |
adventuretask.admin | OP | 管理员权限 |
⚙️ 配置文件
config.yml
daily-task-count: 5
timezone: "Asia/Shanghai"
progress-display: "BOSSBAR"
reset-card-daily-limit: 5
delay-card-hours: 12
activity-reset: "WEEKLY"
database:
type: sqlite # sqlite / mysql
通知配置 v1.1.0
notifications:
daily-assigned:
message: "{prefix}§a今日任务已刷新! 共 §e{count} §a个任务!"
title: "§6§l每日任务|§e共 {count} 个任务|10|40|10"
sound: "ENTITY_PLAYER_LEVELUP:0.6:1.5"
progress-complete:
message: "{prefix}§a{task_name} §7已完成!"
title: "§6§l任务完成!|§e{task_name}|10|40|10"
sound: "ENTITY_PLAYER_LEVELUP:0.8:1.2"
gui.yml v1.1.0
包含:task-center / task-status-* / card-select / shop / activity-reward
card-select:
card-reset:
material: SUNFLOWER
name: "§e任务重置卡"
lore:
- "§7当前持有: §e{count} 张"
- "§a[点击对任务 \"{task_name}\" 使用此卡]"
click-sound: "BLOCK_NOTE_BLOCK_PLING:1.0:1.5"
messages.yml
支持 & 颜色码、RRGGBB Hex、{prefix} {player} {task_name} 等。
内置变量
| 变量 | 说明 |
{coins} | 任务币余额 |
{task_name} | 任务名 |
{count} | 数量 |
{progress} / {goal} | 进度/目标 |
{activity} | 活跃度 |
{price} | 商品价格 |
PlaceholderAPI
| 占位符 | 说明 |
%adventuretask_task_coins% | 任务币余额 |
%adventuretask_weekly_activity% | 周活跃度 |
%adventuretask_daily_completed% | 今日已完成数 |
%adventuretask_daily_total% | 今日总任务数 |
%adventuretask_daily_progress% | 完成百分比 |
🔗 插件集成
AdventureQuests 集成
安装后任务中心自动显示:
- 主线任务 Tab — 进行中的主线列表
- 支线任务 Tab — 进行中的支线列表
- 信息预览物品中显示主线/支线进度
中文命名系统 v1.1.0
- 内置 660+ 物品/方块中文翻译 (
items_CN.yml)
- 内置 100+ 实体中文翻译 (
entities_CN.yml)
- 优先使用 jar 内置资源,外部文件可覆盖
- 进度全中文化:如 "击杀 僵尸 0/15"
数据存储
| 模式 | 说明 |
| SQLite | 默认零配置 → data/adventuretask.db |
| MySQL | HikariCP 连接池 |
自动保存间隔 5 分钟(异步)。存储:任务分配/进度/状态、活跃度、任务币、购买记录。
⚡ 性能优化
| 优化项 | 解决问题 | 状态 |
| CachedStorageProvider | 高频 DB 读写 | ✅ |
| 分批重置 | 100+ 人同时刷新卡顿 | ✅ |
| WorldValidator | 多世界任务判定 | ✅ |
| RateLimiter | 高频事件轰炸 | ✅ |
| Redis 跨服 | 跨服数据同步 | ✅ |
三级缓存架构
TaskManager → L1 本地内存 → L2 Redis → L3 MySQL
↓ dirty
异步批量刷盘 + Redis Pub/Sub 跨服失效
- 读:缓存优先,miss 时加载并缓存
- 写:标记脏数据入队,定时批量刷盘
- TTL:离线数据自动淘汰
- 关服:同步刷盘零丢失
分批重置
批次1: 玩家1~10 → 处理 → 等待2tick
批次2: 玩家11~20 → 处理 → 等待2tick
...
# 200人: 从~500ms阻塞 → 分散~2秒, 单次<25ms
世界校验 (WorldValidator)
- 全局白名单 — 空列表=不限制
- 世界组 — 同组视为等价
- 任务级 —
objectives[].world 精确限制
限流器 (RateLimiter)
| 动作 | 冷却 |
advance_BREAK_BLOCK | 50ms |
advance_KILL_MOB | 50ms |
gui_open | 500ms |
完整配置参考
optimization:
cache:
ttl-seconds: 300
flush-interval-seconds: 30
batch-size: 20
reset-batch-size: 10
reset-batch-delay-ticks: 2
world-validation:
enabled: false
whitelist: []
groups: {}
rate-limit:
objective-cooldown-ms: 50
gui-open-cooldown-ms: 500
🌐 Redis 跨服部署
前提
- Velocity 代理群组
- Redis 实例
- 所有子服连同一个 MySQL(SQLite 不支持跨服)
数据流
| 操作 | 流程 |
| 读取 | L1→Redis→MySQL 逐级穿透 |
| 写入 | L1→Redis→Pub/Sub 通知→异步 MySQL |
| 收到失效 | 清除本地 L1 → 下次从 Redis/MySQL 加载 |
| 玩家退出 | 立即 MySQL+Redis → 发布失效 → 清 L1 |
配置
database:
type: mysql
mysql:
host: 127.0.0.1
port: 3306
database: adventure_task
username: root
password: "your_password"
redis:
enabled: true
host: "127.0.0.1"
port: 6379
password: ""
database: 0
pool-size: 8
ttl-seconds: 600
Pub/Sub
- 频道:
adventuretask:invalidate
- 消息:玩家 UUID
- 断线:自动 5 秒重连
降级策略
ℹ️ 降级
Redis 完全可选。enabled: false 或连接失败时自动回退 L1+MySQL 双层模式,所有 Redis 操作静默失败。
部署步骤
- 安装 Redis
- 配置 MySQL,所有子服同库
- 每个子服放入 jar,配
database.type: mysql + redis.enabled: true
- 重启检查日志
/ataskadmin stats 验证
未来路线
- 分布式锁 (Redis + Lua)
- 任务预生成
- 活跃度增量更新
- 智能缓存 TTL
📝 更新日志
v1.1.0 最新
- NEW 中文命名系统 — 660+ 物品 + 100+ 实体翻译,进度全中文化
- NEW 卡牌可配置化 — 材质/模型/名称/描述可自定义
- NEW GUI PAPI 支持 — name/lore 支持 PlaceholderAPI
- NEW 通知系统 — 4 事件 × message/title/sound 三选
- NEW 内置变量 — {coins}/{task_name}/{progress}/{activity} 等
v1.1
- NEW 目标大扩展 — 20→51 种,新增 26 种 (战斗/生活/工作台/移动/数值/交互)
- NEW MythicMobs 软依赖 (KILL_MYTHICMOBS)
- FIX WALK_DISTANCE 每 5 格推送 / HARVEST_CROP 成熟检测 / JUMP 使用 Statistic
v1.0.1
- NEW 分页系统优化 + GUI 100% 自定义 + 任务卡 GUI
- FIX ConcurrentModificationException / Shift+Click 数量 / GUI 关闭误清理
- NEW 性能优化四件套:缓存层 + 分批重置 + 世界校验 + 限流器
- NEW Redis 跨服部署