插件介绍

展示名和插件内部名不是同一套

当前目录名是 MythicUpdateLibao,但源码里的插件名、Jar 名、权限节点和命令体系实际都是 MythicMail。也就是说,官网页可以叫 MythicUpdateLibao,但服务器里实际操作请按 /mmail 来。

从源码来看,这个插件的核心功能不是“礼包码”或“普通礼包菜单”,而是一套完整的 多服邮件投递系统。管理员通过 GUI 编写邮件,选择发送给全体玩家、指定玩家、某权限组玩家,或者“发送当时在线的玩家”,并附带物品、Vault 金币、PlayerPoints 点券等奖励。

玩家只需要输入 /mmail 打开收件箱,查看待领取邮件,预览附件与奖励,然后一键领取。管理员则可以进入后台面板发送新邮件、查看历史邮件,并把历史邮件中的附件直接复制回背包里复用。

说人话:这是“服主后台发福利邮件”的系统,不是一次性兑换礼包页面。更适合补偿邮件、节日福利、赞助组奖励、活动补发和跨服统一发放。

适合拿来做什么

开服补偿 / 活动补发

回档补偿、维护补偿、节日福利、活动返奖,都可以直接发到邮件里,不用在线一个个手动给。

权限组定向福利

可以按权限节点发放,例如 VIP、赞助组、测试组、内测组,做分层福利和运营活动很顺手。

在线玩家即时奖励

发送模式里有“在线玩家”快照,发送瞬间在线的人会被记录下来,之后离线了也还能回来领取。

跨服共用邮件箱

所有邮件数据走 MySQL,适合多个子服共用一套邮件奖励数据,不用每个服重复维护。

主要功能

  • 多服共享邮件数据,所有邮件、附件、目标玩家和领取记录都保存在 MySQL 中。
  • 完整 GUI 操作链路,包括收件箱、写信界面、附件编辑器、历史邮件列表和邮件详情页。
  • 四种发送模式:全体玩家、指定玩家、权限组玩家、发送时在线玩家。
  • 支持邮件过期,界面内可切换为永久、1 天、3 天、7 天、14 天、30 天。
  • 奖励类型完整,一封邮件可以同时附带物品、Vault 金币、PlayerPoints 点券。
  • 附件编辑器固定 36 格,管理员可直接拖放物品编辑邮件附件。
  • 历史邮件可回溯,管理员能分页查看历史邮件,并把历史附件复制出来复用。
  • 登录提醒,玩家进服 2 秒后会自动提示未领取邮件数量。
  • 异步数据库流程,发送、读取、统计、领取尽量异步执行,减轻主线程压力。

命令列表

主命令:/mmail,别名:/mythicmail/mail

命令说明权限
/mmail打开玩家自己的收件箱mythicmail.use
/mmail admin打开管理员面板mythicmail.admin
/mmail send直接打开写信 / 发送邮件 GUImythicmail.send
/mmail history查看历史已发送邮件mythicmail.history
/mmail reload重载配置文件mythicmail.reload

玩家无参数输入 /mmail 会直接进入收件箱;管理员也可以走 /mmail admin 进入后台,而不是靠复杂子命令切换。

权限节点

权限说明默认
mythicmail.use允许玩家打开自己的收件箱所有人
mythicmail.admin管理员面板入口OP
mythicmail.send允许编写并发送邮件OP
mythicmail.history查看历史邮件并复制附件OP
mythicmail.reload重载配置OP

发送模式

模式说明源码行为
ALL全体玩家均可领取每个玩家各自领取一次,未过期且未领取就会出现在收件箱里
PLAYER指定单个玩家发送时解析玩家名或 UUID,并写入目标玩家表
PERMISSION指定权限节点不是快照,玩家打开收件箱时按当前生效权限判断是否可见
ONLINE仅发送瞬间在线的玩家发送时先抓取在线玩家 UUID 快照,之后下线也仍然能回来领取

这个区别要写清楚

ONLINE 是“发送时在线的人”,PERMISSION 是“领取时仍满足该权限的人”。两者都像定向发放,但实际触发时机完全不同。

使用教程

安装插件

target/mythicmail-1.0.jar 放进服务端 plugins/ 目录,首次启动后会生成 plugins/MythicMail/config.yml

配置数据库

编辑 config.yml 中的 MySQL 地址、库名、账号密码。插件启动时会自动建表。

打开后台面板

管理员输入 /mmail admin,可以看到“发送新邮件”“历史邮件”“重载配置”三个核心入口。

编写邮件

在 GUI 中依次设置标题、发送模式、目标、过期时间、金币、点券,并进入附件编辑器拖放物品,最后确认发送。

玩家领取

玩家输入 /mmail 打开收件箱,点开邮件详情,预览附件后点击“领取全部”即可。

一个典型流程

例如要给 VIP 玩家发活动礼包:管理员切换到 PERMISSION 模式,目标填 group.vip 或你实际使用的权限节点,放入物品和奖励,设置 7 天过期后发送。符合权限的玩家进服后会收到未领取提示。

GUI 结构

管理员面板

27 格面板,核心按钮只有三个:发送新邮件、历史邮件、重载配置。入口简洁,适合服主直接操作。

写信界面

54 格 GUI,标题、目标、金币、点券通过聊天输入,发送模式与过期时间在 GUI 内循环切换。

附件编辑器

上方固定 36 格可自由拖放附件,下方是保存、清空、返回按钮。保存后附件会写回当前草稿。

玩家收件箱

每页展示 36 封可领取邮件,支持分页,Lore 会显示发送者、模式、剩余时间和附带奖励。

邮件详情页

可预览附件区、邮件信息和奖励信息,并提供“领取全部”和“返回收件箱”按钮。

历史邮件页

管理员可分页查看全部历史邮件,点击后可把该邮件附件副本直接放回背包,用来复用模板或核对内容。

配置文件

配置文件路径:plugins/MythicMail/config.yml

数据库配置

YAMLconfig.yml
database:
  host: 127.0.0.1
  port: 3306
  database: mythicmail
  username: root
  password: your_password
  pool:
    maximum-pool-size: 10
    minimum-idle: 2
    max-lifetime: 1800000
    connection-timeout: 5000
    idle-timeout: 600000

基础设置

YAMLconfig.yml
settings:
  login-notify: true

messages:
  prefix: '&7[&6邮件系统&7] &r'
  new-mail-notify: '&a你有 &e%count% &a封未领取的邮件!使用 &e/mmail &a查看。'
  mail-claimed: '&a邮件领取成功!'
  inventory-full: '&c你的背包已满,请先清理后再领取。'

按当前源码实际行为来看,附件编辑区固定为 36 格,过期时间由 GUI 内置选项循环切换;因此页面说明以实际界面行为为准,而不是完全按配置模板字段名理解。

数据表

数据表作用
mythicmail_mails邮件主表,记录发送者、标题、模式、奖励、过期时间、创建时间
mythicmail_mail_items邮件附件表,按槽位保存 Base64 序列化物品
mythicmail_mail_targets定向目标表,用于指定玩家和在线玩家快照
mythicmail_claims领取记录表,防止同一玩家重复领取同一封邮件

关于 table-prefix

配置模板里虽然出现了 database.table-prefix 字段,但当前 1.0 源码里的建表和查询 SQL 仍然固定使用 mythicmail_*。部署时建议按固定表名理解,不要预期前缀会自动生效。

依赖插件

依赖是否必须说明
Paper 1.20.1+必须插件基于 Paper API 开发
MySQL 5.7+必须所有邮件与领取记录都依赖数据库存储
Vault可选需要发放金币奖励时才有意义
PlayerPoints可选需要发放点券奖励时才有意义

如果你在邮件里配置了 Vault 金币或 PlayerPoints 点券,但服务器没有装对应依赖,源码里这部分奖励不会真正发放,正式上服前最好先联调一次。

技术信息

项目信息
页面展示名MythicUpdateLibao
插件内部名称MythicMail
版本1.0
Jar 文件target/mythicmail-1.0.jar
服务端Paper 1.20.1
Java 版本17+
API 版本1.20
连接池HikariCP 5.1.0
MySQL 驱动mysql-connector-java 8.0.33
Vault API1.7.1
PlayerPoints3.2.7

常见问题

因为当前文件夹命名和源码内部命名不一致。源码里的 plugin.yml、主类、Jar 包、权限节点都统一使用 MythicMail 体系,所以服内实际操作请按 /mmail 来。
是发送时在线。源码会在点击发送时抓取一份在线玩家 UUID 快照写入目标表,所以玩家当时在线、之后下线,也仍然能在之后登录领取。
不会。权限模式不是快照,而是玩家打开收件箱时根据当前生效权限判断是否可领取。也就是说,后续加权或掉权,结果会跟着变。
插件会先模拟检查背包是否能容纳全部附件。放不下时会阻止领取并提示清背包,避免奖励丢失。
因为当前版本的 SQL 语句没有动态读取这个字段,表名仍然写死。这个字段更像预留项,现阶段别把它当成真正可配置特性。