AdventureMail
支持 GUI 操作的 Minecraft 服务器邮件插件
📨 10种邮件类型
📎 四种附件
🗄️ MySQL跨服同步
📋 模板系统
🌐 Web编辑器
📦 Paper 1.21+
功能一览
邮箱GUI
分类筛选,分页浏览,未读邮件闪烁提示
邮件类型
10种邮件类型,4大分类,独立属性
附件系统
物品/金币/点券/指令四种附件
发件箱
管理员查看已发送记录
模板系统
保存/加载/删除邮件模板
回收站
删除可恢复,7天自动清理
定时邮件
立即/延迟/定时三种模式
数据库
MySQL + HikariCP 跨服同步
登录提醒
上线提示未读和未领取附件
管理员GUI
可视化编辑,草稿保护
书本模式
邮件可选书本界面查看
Web编辑器
浏览器端编辑,生成YAML/命令
前置依赖
| 插件 | 说明 | 用途 |
|---|---|---|
| Vault | 经济前置 (软依赖) | 金币/点券附件 |
| PlaceholderAPI | 变量支持 (软依赖) | 占位符解析 |
| LuckPerms | 权限插件 (软依赖) | 按权限组发送 |
兼容性
| 项目 | 要求 |
|---|---|
| 服务端 | Paper 1.21.4+ |
| Java | JDK 21+ |
| 代理端 | BungeeCord / Velocity(跨服可选) |
| 数据库 | MySQL 8.0+(跨服可选)/ YAML本地 |
下一篇安装配置 →
安装配置
全新安装
- 下载 Paper 1.21.4+ 服务端
- 将
AdventureMail-5.2.0.jar放入plugins/ - 启动服务器,自动生成配置
- 按需修改
config.yml和messages.yml /amail reload重载
文件结构
plugins/AdventureMail/
├── config.yml # 主配置
├── messages.yml # 消息文本
├── mails/<UUID>.yml # 玩家邮件数据(YAML模式)
├── sent/<玩家名>.yml # 发件箱记录
├── templates/ # 邮件模板
└── scheduled.yml # 定时邮件队列
群组服配置
- 在所有子服安装
AdventureMail-5.2.0.jar - 修改每个子服的
config.yml(详见跨服配置) - 重启所有子服
⚠ 注意
每个子服的 server-id 必须不同,但 servers 列表必须完全一致!
上一篇← 简介
下一篇命令权限 →
命令权限
玩家命令
| 命令 | 说明 |
|---|---|
/amail | 打开邮箱GUI |
/amail check | 检查未读邮件和未领取附件 |
/amail markallread | 全部标记已读 |
/amail claimall | 一键领取所有附件 |
/amail outbox | 查看发件箱 |
管理员命令
| 命令 | 说明 |
|---|---|
/amail admin | 管理员面板GUI |
/amail template | 邮件模板管理 |
/amail send <目标类型> <目标值> <标题> [--type 类型] <内容> | 命令行发送 |
/amail reload | 重载配置 |
/amail dbstatus | DB/Redis/跨服状态 |
/amail dbreset confirm | 清空邮件数据 |
/amail dbreset all confirm | 完全重置含注册表 |
/amail dbclean | 清理过期邮件 |
ℹ️ 别名
/amail = /adventuremail = /mail
命令行发送示例
# 发送给指定玩家
/amail send player Steve 系统通知 欢迎来到服务器!
# 发送给全服(指定邮件类型)
/amail send all _ 服务器公告 --type system_notice 今晚维护
# 发送给有权限的玩家
/amail send permission vip.access VIP专属 --type event_ranking VIP通知
# 发送给所有在线玩家
/amail send online _ 在线奖励 --type system_reward 感谢在线
目标类型:player / all / online / permission
权限节点
| 权限 | 说明 | 默认 |
|---|---|---|
adventuremail.use | 使用邮箱GUI(打开/查看/领取) | 所有玩家 |
adventuremail.admin | 管理员权限(发送/面板/模板/重载) | OP |
PAPI 占位符
| 变量 | 说明 |
|---|---|
%adventuremail_unread% | 未读邮件数量 |
%adventuremail_unclaimed% | 未领取附件邮件数量 |
%adventuremail_total% | 邮件总数 |
%adventuremail_trashed% | 回收站邮件数 |
消息内置变量
| 变量 | 说明 |
|---|---|
%count% | 数量(动态) |
%player% | 玩家名 |
%name% | 模板名/邮件标题 |
& 颜色代码 | Minecraft颜色代码 |
上一篇← 安装
下一篇更新记录 →
更新记录
v5.2.2
- CONFIG softdepend 更新 — plugin.yml 新增 AdventureManage 为可选依赖,提升跨插件兼容性
v5.2.1
- FIX 跨服邮件投递Bug:resolveRecipients 从 Redis 线程移至主线程
- 每个收件人独立 Mail 对象避免 ID 冲突
- NEW 数据库管理指令:
/amail dbstatus/dbreset/dbclean
v5.2.0
- NEW 书本模式 (view-mode: book)
- NEW 未读邮件闪烁:每秒交替类型图标↔红色染料
- FIX 双行标题重复显示
- IMPROVED 跨服性能:移除15秒DB轮询改用事件驱动
- FIX Redis cross_send 回调 + 新增玩家UUID注册表
v5.1.0
- 跨服邮件:Redis cross_send 广播实现真正跨服投递
- 多步目标选择向导(多选服务器+多选玩家类型GUI)
- MailManager.sendMail 支持多目标类型合并收件人
v5.0.0
- Redis跨服同步全面重写(server-id过滤、JSON结构化、指数退避重连)
- 所有玩家消息100%可自定义(messages.yml 50+条目)
v4.0.0
- 邮箱分类筛选(红=系统/黄=活动/绿=社交/蓝=安全)
- 邮件显示格式重做 + Web编辑器同步更新
v3.x
- v3.2.0 — Web邮件编辑器
- v3.1.0 — 领取截止时间 + 草稿保护 + 性能优化
- v3.0.0 — 邮件类型系统(10种) + MySQL + StorageProvider
v2.0.0
- 回收站、模板、发件箱、一键领取/全部已读、定时邮件、过期清理
上一篇← 命令权限
下一篇邮件类型 →
邮件类型系统
四大分类
| 分类 | 颜色 | 说明 |
|---|---|---|
| 系统邮件 (SYSTEM) | 🟢 绿色 | 系统自动发送(奖励/补偿/通知) |
| 活动邮件 (EVENT) | 🩷 粉色 | 活动相关奖励(参与/排名/抽奖) |
| 社交邮件 (SOCIAL) | 🔵 青色 | 玩家互动(私信/公会) |
| 安全邮件 (SECURITY) | 🔴 红色 | 安全通知(举报/违规处罚) |
10种邮件类型
| 类型ID | 显示名 | 分类 | 图标 | 附件 | 过期 | 优先级 |
|---|---|---|---|---|---|---|
system_reward | 系统奖励 | SYSTEM | CHEST | ✅ | 7天 | 高 |
system_compensation | 系统补偿 | SYSTEM | NETHER_STAR | ✅ | 14天 | 高 |
system_notice | 系统通知 | SYSTEM | BOOK | ❌ | 7天 | 中 |
event_participation | 活动参与奖 | EVENT | FIREWORK_ROCKET | ✅ | 7天 | 中 |
event_ranking | 排名奖励 | EVENT | GOLDEN_APPLE | ✅ | 14天 | 高 |
event_lottery | 抽奖奖励 | EVENT | END_ROD | ✅ | 7天 | 高 |
social_private | 玩家私信 | SOCIAL | PAPER | ✅ | 30天 | 中 |
social_guild | 公会邮件 | SOCIAL | WHITE_BANNER | ✅ | 14天 | 低 |
security_report | 举报反馈 | SECURITY | REDSTONE | ❌ | 30天 | 低 |
security_punish | 违规处罚 | SECURITY | BARRIER | ❌ | 永久 | 高 |
特殊属性
- 违规处罚 (
security_punish):不可删除,登录时强制显示 - 玩家私信 (
social_private):支持回复功能 - 每种类型有独立的通知音效
查看模式
| 模式 | 说明 |
|---|---|
gui | 默认GUI界面预览,物品附件可视化 |
book | 书本模式,Minecraft原生书本界面 |
书本模式:标题金色加粗,正文自动分页,[关闭]/[领取] 可点击按钮。
mail-types:
system_notice:
view-mode: book
system_reward:
view-mode: gui
未读邮件闪烁
每秒交替切换:邮件类型图标 ↔ 红色染料(附魔光效)。全局一个定时任务,性能友好。
上一篇← 更新记录
下一篇附件系统 →
附件系统
| 附件类型 | 说明 |
|---|---|
| 📦 物品 | 任意Minecraft物品,保留NBT/附魔/Lore,背包满自动掉落 |
| 💰 金币 | 金币数量(需Vault) |
| 💎 点券 | 点券数量(需Vault) |
| ⚡ 指令 | 执行指令奖励,三种模式 |
指令执行模式
| 模式 | 说明 |
|---|---|
CONSOLE | 以控制台身份执行 |
OP | 临时赋予OP执行后移除 |
PLAYER | 以玩家身份执行 |
变量:{player} = 玩家名,{uuid} = UUID
上一篇← 邮件类型
下一篇GUI 界面 →
GUI 界面
玩家邮箱 /amail
54格箱子界面,4行×7列显示邮件列表:
| 图标 | 状态 |
|---|---|
| 📕 BOOK | 未读纯文本邮件 |
| 📄 PAPER | 已读纯文本 |
| 📦 CHEST_MINECART | 带附件未领取 |
| 🛒 MINECART | 已领取附件 |
操作方式
- 左键 → 标记已读
- 右键 → 打开邮件预览
- Shift+右键 → 删除(移到回收站)
底栏按钮
| 槽位 | 按钮 | 功能 |
|---|---|---|
| 47 | 漏斗 一键领取 | 领取所有未领取附件 |
| 48 | 绿色染料 全部已读 | 标记所有为已读 |
| 49 | 书 邮箱信息 | 总邮件/未读/未领取 |
| 50 | 书与笔 发件箱 | 已发送记录 |
| 51 | 炼药锅 回收站 | 已删除的邮件 |
| 53 | 命令方块 管理面板 | 仅管理员可见 |
邮件编辑GUI(管理员)
| 槽位 | 按钮 | 功能 |
|---|---|---|
| 10 | 命名牌 | 设置标题 |
| 12 | 画 | 发布者名称 |
| 14 | 纸 | 编辑内容(多行) |
| 16 | 标靶 | 选择目标(玩家/全服/在线/权限) |
| 19 | 箱子 | 附加物品 |
| 21 | 金锭 | 金币数量 |
| 23 | 钻石 | 点券数量 |
| 25 | 命令方块 | 指令奖励 |
| 37 | 漏斗 | 过期天数 |
| 38 | 类型图标 | 选择邮件类型 |
| 39 | 时钟 | 发送时间 |
| 40 | 时钟 | 领取截止 |
| 41 | 知识之书 | 模板管理 |
| 43 | 混凝土 | 发送 |
| 53 | TNT | 重置草稿(Shift+右键) |
其他GUI
| GUI | 功能 |
|---|---|
| 邮件预览 | 查看详情,领取附件 |
| 发件箱 | 已发送记录,分页 |
| 回收站 | 恢复/永久删除/一键清空,默认保留7天 |
| 模板列表 | 加载/保存/删除模板 |
| 物品附件 | 从背包拖拽物品(2行×7列=14格) |
| 草稿确认 | ESC关闭时弹出确认 |
| 指令类型选择 | 选择执行方式 |
| 发送时间设置 | 立即/延迟/定时 |
上一篇← 附件系统
下一篇模板 / 定时 →
模板 / 定时 / 回收站
模板系统
- 保存模板 — 当前草稿存为模板
- 加载模板 — 从模板恢复到编辑界面
- 删除模板 — 移除不需要的模板
- 保存在
plugins/AdventureMail/templates/
模板保存所有属性:标题、内容、附件、邮件类型等。
定时邮件
| 模式 | 说明 |
|---|---|
| 立即发送 | 编辑完成直接发送 |
| 延迟发送 | 设定延迟时间 |
| 定时发送 | 设定具体时间点 |
数据保存在 scheduled.yml,重启后自动恢复。
回收站
- 删除的邮件移入回收站,可恢复或永久删除
- 支持一键清空
- 默认保留 7天,到期自动清理
mail:
trash-retain-days: 7
上一篇← GUI 界面
下一篇数据库 →
数据库
YAML 模式(默认)
- 单服本地文件存储,保存在
mails/ - 无需额外配置,适合单服
MySQL 模式(跨服同步)
- HikariCP 高性能连接池
- 自动建表(
amail_mails+amail_sent) - 支持 BungeeCord / Velocity 多子服共享
- 单条记录级精确更新
storage:
type: mysql
mysql:
host: localhost
port: 3306
database: adventuremail
username: root
password: "your_password"
table-prefix: "amail_"
pool-size: 10
上一篇← 模板 / 定时
下一篇跨服配置 →
跨服配置
⚠ 前提
跨服同步需要 MySQL + Redis,所有子服连接同一实例。
storage:
type: mysql
mysql:
host: 数据库地址 # 所有子服相同
database: adventuremail
username: your_user
password: your_password
redis:
enabled: true # 跨服必须启用!
host: redis地址 # 所有子服相同
port: 6379
cross-server:
enabled: true
server-id: "lobby" # 每个子服不同!
server-name: "主城服"
servers: # 所有子服必须一致!
- id: "lobby"
name: "&a主城服"
icon: GRASS_BLOCK
- id: "survival"
name: "&2生存服"
icon: DIAMOND_PICKAXE
⚠ 重要
每个子服的 server-id 必须不同,但 servers 列表必须完全一致!
通信架构
- 子服A发送 → MySQL写入 → Redis广播 cross_send
- 子服B收到 → 事件驱动刷新缓存 → 在线玩家收到通知
- 支持500人在线(移除高频DB轮询)
上一篇← 数据库
下一篇配置参考 →
配置参考
存储设置
storage:
type: yaml # yaml 或 mysql
mysql:
host: localhost
port: 3306
database: adventuremail
username: root
password: ""
table-prefix: "amail_"
pool-size: 10
邮件设置
mail:
max-mails-per-player: 50
expire-days: 30
trash-retain-days: 7
default-sender-display: "来自Feiiy管理组"
claim-deadline-days: 7
GUI / 通知
gui:
title: "&6&l冒险邮件"
mails-per-page: 28
notification:
login-reminder: true
sound-enabled: true
邮件类型配置
mail_types:
system_reward:
enabled: true
display_name: "&a系统奖励"
icon: CHEST
allow_attachments: true
default_expiry_days: 7
priority: HIGH
sound: ENTITY_PLAYER_LEVELUP
security_punish:
enabled: true
display_name: "&4违规处罚"
icon: BARRIER
allow_attachments: false
expiry: permanent
priority: HIGH
sound: ENTITY_WITHER_SPAWN
settings:
cannot_delete: true
force_read: true
消息配置 (messages.yml)
prefix: "&a&l[冒险邮件] &f"
player:
mail-received: "&a您收到了一封新邮件!"
login-unread: "&e您有 &f%count% &e封未读邮件"
login-unclaimed: "&a您有 &f%count% &a封附件待领取"
mark-all-read: "&a已将 &e%count% &a封标记为已读"
claim-all: "&a已领取 &e%count% &a封附件"
admin:
mail-sent: "&a邮件发送成功!"
template-saved: "&a模板已保存: &e%name%"
input:
enter-title: "&f请输入邮件标题 &7(cancel 取消):"
enter-content: "&f请输入邮件内容 &7(done 完成, cancel 取消):"
messages.yml 支持 50+ 条目完全自定义。
上一篇← 跨服配置
下一篇项目 / 构建 →
项目结构 / 数据库表 / 构建
项目结构
AdventureMail/
├── pom.xml
└── src/main/
├── java/com/adventuremail/
│ ├── AdventureMail.java # 主类
│ ├── ConfigManager.java # 配置管理
│ ├── MailManager.java # 邮件核心
│ ├── MailCommandExecutor.java # 命令处理
│ ├── model/
│ │ ├── Mail.java / MailDraft.java
│ │ ├── MailType.java (10种)
│ │ ├── MailCategory.java (4分类)
│ │ ├── MailCommand.java / TargetType.java
│ ├── storage/
│ │ ├── StorageProvider.java # 存储抽象
│ │ ├── YamlStorage.java
│ │ ├── DatabaseManager.java # HikariCP
│ │ └── DatabaseStorage.java # MySQL
│ ├── gui/ (18个GUI类)
│ └── listener/
│ └── PlayerJoinListener.java
└── resources/
├── plugin.yml / config.yml / messages.yml
web-editor/
└── index.html # Web邮件编辑器
数据库表结构
amail_mails
| 字段 | 类型 | 说明 |
|---|---|---|
id | VARCHAR(64) | 邮件唯一ID(联合主键) |
recipient | VARCHAR(36) | 收件人UUID(联合主键) |
mail_type | VARCHAR(32) | 邮件类型ID |
sender / sender_display | VARCHAR | 发件人 |
title | VARCHAR(256) | 标题 |
content | TEXT | 内容 |
items_data | MEDIUMTEXT | 物品序列化(Base64) |
coins / coupons | DOUBLE / INT | 金币/点券 |
commands_data | TEXT | 指令数据 |
send_time / expire_time | BIGINT | 发送/过期时间戳 |
is_read / is_claimed / is_trashed | TINYINT(1) | 状态标记 |
索引:idx_recipient, idx_recipient_trashed, idx_expire, idx_send_time
amail_sent
| 字段 | 类型 | 说明 |
|---|---|---|
id | INT AUTO_INCREMENT | 主键 |
sender_name / sender_display | VARCHAR | 发件人 |
mail_id / title | VARCHAR | 邮件ID/标题 |
target_type / target_value | VARCHAR | 目标 |
send_time | BIGINT | 发送时间 |
recipient_count | INT | 收件人数 |
has_attachments | TINYINT(1) | 是否有附件 |
构建方式
cd AdventureMail
mvn clean package
# 产物: target/AdventureMail-5.2.0.jar
| 依赖 | 版本 | 范围 |
|---|---|---|
| Paper API | 1.21.4-R0.1-SNAPSHOT | provided |
| HikariCP | 5.1.0 | compile (shaded) |
| MySQL Connector/J | 8.3.0 | compile (shaded) |
HikariCP 通过 maven-shade-plugin 重定位到 com.adventuremail.libs.hikari。
Web 邮件编辑器
独立浏览器端工具,直接打开 web-editor/index.html。支持可视化编辑、附件管理、内置模板、Minecraft风格预览、输出YAML/命令。
上一篇← 配置参考