配置说明
LyMailReload 的配置文件位于插件目录下:
| 文件 / 目录 | 用途 |
|---|---|
config.yml | 数据库、自动任务、邮箱界面和消息配置 |
template/*.yml | 邮件模板配置 |
cdk.yml | CDK 组、兑换奖励和 CDK 生成规则 |
data/<玩家UUID>.yml | 未启用 MySQL 时保存玩家邮件数据 |
cdkdata/<CDK组ID>.yml | 未启用 MySQL 时保存随机 CDK 数据 |
重载插件时会重新读取 config.yml、template/ 和 cdk.yml。默认示例模板邮件会在每次重载时覆盖,不能直接作为正式邮件使用。
config.yml
时间格式
yaml
time-format: 'yyyy年MM月dd日 HH时mm分'| 配置项 | 说明 |
|---|---|
time-format | 邮件到期时间的显示格式,使用 Java 日期格式。 |
邮箱中邮件按钮追加的 gui.mail-lore 会使用 {time} 替换为邮件到期时间,并按照 time-format 显示。
MySQL 数据库
MySQL 前置要求
启用 MySQL 存储前,必须安装 LyMySQLCore,并确认 LyMySQLCore 已成功连接数据库。插件会在数据库连接成功且初始化完成后启用相关功能;未加载 LyMySQLCore、连接失败或数据库尚未连接完成时,MySQL 数据读取、保存、同步和 CDK 数据存储都不会生效。
yaml
mysql:
enable: false
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1| 配置项 | 说明 |
|---|---|
mysql.enable | 是否启用 MySQL 存储。修改后需要重启服务器。 |
mysql.databasename | MySQL 数据库名称。 |
mysql.username | MySQL 登录用户名。 |
mysql.password | MySQL 登录密码。 |
mysql.port | MySQL 端口。 |
mysql.ip | MySQL 服务器地址。 |
启用后,插件会使用数据库保存玩家邮箱数据和 CDK 数据,并初始化以插件名称命名的玩家数据表以及带 _cdk 后缀的 CDK 表。
未启用 MySQL 时,玩家数据保存到插件目录下的 data/,随机 CDK 保存到 cdkdata/。
自动任务
yaml
auto-save-interval: 3
auto-delete-time: 60
auto-send-time: 60
cdk-redeem-cd: 5| 配置项 | 说明 |
|---|---|
auto-save-interval | 配置项会被读取为自动保存间隔,单位为秒。当前项目中的 YAML 和 MySQL 保存监听器主要在玩家加入、退出或被踢出时处理数据保存;该配置项名称保留在配置文件中。 |
auto-delete-time | 过期邮件自动删除扫描间隔,单位为秒。扫描在线玩家的邮件。 |
auto-send-time | 自动发送邮件扫描间隔,单位为秒。扫描在线玩家符合时间条件的邮件模板。 |
cdk-redeem-cd | 玩家兑换 CDK 的冷却时间,单位为秒。 |
玩家上线或切换世界后,也会进行过期邮件检查。自动发送任务只会处理当前玩家数据中没有收件记录的模板,并根据模板中的时间范围判断是否发送。
邮箱界面
yaml
gui:
title: '&c离渊邮箱'
fill-item: '160:9'
fill-name: '&7封锁'
last-file-item: '341:0'
last-file-name: '&6上一页'
next-file-item: '341:0'
next-file-name: '&6下一页'
receive-item: '116:0'
receive-lore:
- ''
- '&a[点击领取]'
mail-lore:
- ' '
- '&7该邮件到期时间 &6{time}'
- '&e<点击查看/领取附件>'| 配置项 | 说明 |
|---|---|
gui.title | 邮箱界面标题。 |
gui.fill-item | 界面填充物品,支持物品名或旧版数字 ID 格式。 |
gui.fill-name | 界面填充物品名称。 |
gui.last-file-item | 上一页按钮物品。 |
gui.last-file-name | 上一页按钮名称。 |
gui.next-file-item | 下一页按钮物品。 |
gui.next-file-name | 下一页按钮名称。 |
gui.receive-item | 查看邮件后,放置在领取位置的领取按钮物品。 |
gui.receive-lore | 领取按钮的 Lore。 |
gui.mail-lore | 追加到每封邮件 Lore 末尾的内容。 |
邮箱界面每页显示最多 27 封邮件。邮件按照到期时间排序,越早到期的邮件越靠前。
gui.mail-lore 支持以下替换内容:
| 占位符 | 说明 |
|---|---|
{time} | 邮件到期时间,按照 time-format 格式显示。 |
颜色代码使用 &,插件显示时会转换为 Minecraft 颜色代码。
消息
yaml
message:
mail-expire: '&7您有邮件已到期: {mail}'
mail-receive: '&7您收到了一封新的邮件: {mail}'
received-success: '&7领取邮件附件成功.'
empty-slot: '&7空槽位不足{slot}格.'
error-cdk: '&c无效CDK'
used-cdk: '&7该CDK已被使用.'
used-group: '&7你已兑换过该组CDK.'
redeem-cd: '&7兑换冷却中, 请稍后再试.'| 配置项 | 触发时机 | 支持占位符 |
|---|---|---|
message.mail-expire | 邮件过期并被删除时。 | {mail} |
message.mail-receive | 玩家收到新邮件时。 | {mail} |
message.received-success | 玩家成功领取邮件附件后。 | 无 |
message.empty-slot | 玩家背包空余槽位不足时。 | {slot} |
message.error-cdk | 输入的 CDK 不存在时。 | 无 |
message.used-cdk | 输入的随机 CDK 已被使用时。 | 无 |
message.used-group | 玩家已经兑换过该 CDK 组时。 | 无 |
message.redeem-cd | 玩家处于 CDK 兑换冷却期间时。 | 无 |
消息中的颜色代码使用 &,显示时会转换为 Minecraft 颜色代码。
邮件模板
邮件模板文件放在 plugins/LyMailReload/template/ 下。插件会递归读取其中的 .yml 文件,每个文件对应一个邮件模板。
基本字段
yaml
id: 'test'
icon: 'APPLE'
title: '&6这是一封示例邮件'
message:
- '&7这是一封示例邮件'| 配置项 | 类型 | 说明 |
|---|---|---|
id | 字符串 | 邮件模板 ID,用于发送邮件和判断收件记录。应保持唯一。 |
icon | 字符串 | 邮件在邮箱界面中的图标。 |
title | 字符串 | 邮件标题。 |
message | 字符串列表 | 邮件内容,也会显示在邮件详情和邮件按钮 Lore 中。 |
颜色代码使用 &。邮件被创建后会保存模板当时的标题、内容、图标、物品和领取指令。
收件条件
yaml
condition:
- 'permission:{测试邮件.领取权限}'
- 'nopermission:{测试邮件.领取权限}'
- 'papi:{%player_level% >= 1}'
- "papi:{'%player_name%' == '离渊'}"| 条件格式 | 说明 |
|---|---|
permission:{权限节点} | 玩家必须拥有指定权限,否则不会收到邮件。 |
nopermission:{权限节点} | 玩家不能拥有指定权限,否则不会收到邮件。 |
papi:{表达式} | 先解析 PlaceholderAPI 变量,再判断表达式结果。 |
papi:{} 支持以下比较和逻辑运算:
| 运算符 | 说明 |
|---|---|
>= | 大于或等于 |
> | 大于 |
== | 等于 |
!= | 不等于 |
< | 小于 |
<= | 小于或等于 |
&& | 同时满足多个条件 |
| ` |
数值条件支持加、减、乘、除和括号。字符串比较时,需要将字符串放入单引号或双引号中。
发送次数与过期时间
yaml
only-mail: true
expiration-time: 3600| 配置项 | 类型 | 说明 |
|---|---|---|
only-mail | 布尔值 | 是否限制玩家永久只收到一次该模板邮件。判断依据是该模板的收件记录。 |
expiration-time | 整数 | 即时发送邮件的有效时间,单位为秒。从邮件发放时开始计时。 |
当 only-mail 为 true 且玩家已有该模板的收件记录时,插件不会再次发送该模板。
定时发送时间
yaml
timed-send-start-time:
year: 2024
month: 6
day: 1
timed-send-end-time:
year: 2024
month: 9
day: 1| 配置项 | 说明 |
|---|---|
timed-send-start-time.year | 自动发送开始日期的年份。 |
timed-send-start-time.month | 自动发送开始日期的月份。 |
timed-send-start-time.day | 自动发送开始日期的日期。 |
timed-send-end-time.year | 自动发送结束日期的年份。 |
timed-send-end-time.month | 自动发送结束日期的月份。 |
timed-send-end-time.day | 自动发送结束日期的日期。 |
只有同时配置对应的 year、month 和 day 时,开始或结束时间才会被读取。
当邮件在定时发送开始时间到结束时间之间创建时,邮件到期时间使用 timed-send-end-time。否则使用 expiration-time 计算到期时间。
自动发送任务会在配置的时间范围内尝试发送模板;玩家已经拥有该模板收件记录时不会再次发送。
领取所需槽位
yaml
need-slot: 27| 配置项 | 说明 |
|---|---|
need-slot | 领取邮件附件前需要的空余背包槽位数量。空位不足时不会发放物品,也不会删除邮件。 |
插件检查玩家背包前 36 个槽位中的空位数量。
邮件物品
yaml
items:
- 'mm,邮件奖励,1,true'
- 'mm5,邮件奖励,1,true'
- 'ni,邮件奖励,1,true'
- 'si,邮件奖励,1,true'
- 'af,邮件奖励,1,true'
- 'oa,邮件奖励,1,true'
- 'sx,邮件奖励,1,true'每行格式为:
text
物品插件标识,物品ID,数量,是否发放| 字段 | 说明 |
|---|---|
| 物品插件标识 | 用于选择物品来源。项目中支持 ni、si、mm、mm5、oa、af 和 sx。 |
| 物品 ID | 对应物品插件中的物品 ID。 |
| 数量 | 领取或预览时使用的物品数量。 |
| 是否发放 | true 时领取邮件会实际发放;false 时不发放,仅用于展示。 |
项目中使用的物品来源如下:
| 标识 | 物品来源 |
|---|---|
ni | NeigeItems |
si | SX-Item |
mm | MythicMobs |
mm5 | MythicMobs 5 |
oa | OpenAudioMc 物品接口 |
af | AzureFlow |
sx | SX-Attribute |
物品来源插件未安装、物品 ID 不存在或无法创建物品时,对应物品可能无法发放或展示。
领取后指令
yaml
receive-commands:
- '[console]eco give %player_name% 5000'
- '[console]bc %player_name% 领取了&6示例邮件&f, 获得了&e5000金币&f, 恭喜!'领取邮件成功后,插件会执行 receive-commands 中的指令,然后从玩家邮箱中删除该邮件。
| 前缀 | 执行身份 |
|---|---|
[console] | 控制台执行。 |
[op] | 临时以管理员身份执行。 |
[player] | 玩家身份执行。项目代码中未单独处理 [player] 前缀,未使用 [console] 或 [op] 时按玩家身份执行。 |
指令执行前会解析 PlaceholderAPI 变量。常见的玩家变量可以直接放入指令文本中,例如 %player_name%。
CDK 配置
CDK 组配置在 cdk.yml 中。顶层键是 CDK 组 ID,组 ID 一旦开始使用不要随意修改。
yaml
离渊牛批:
fixed-cdk: true
format: '@@@@@@离@@@@@@渊@@@@@@牛@@@@@@批@@@@@@'
mail:
- 'test'
message:
- '§7cdk兑换成功!'
command:
- '[console]tell %player_name% 你兑换了离渊牛批CDK'CDK 组字段
| 配置项 | 类型 | 说明 |
|---|---|---|
<CDK组ID>.fixed-cdk | 布尔值 | 是否使用固定 CDK。为 true 时,CDK 内容就是组 ID。 |
<CDK组ID>.format | 字符串 | 随机 CDK 的生成格式。仅在 fixed-cdk: false 时用于生成随机 CDK。 |
<CDK组ID>.mail | 字符串列表 | 兑换成功后发送的邮件模板 ID,可以配置多个。 |
<CDK组ID>.message | 字符串列表 | 兑换成功后发送给玩家的消息。 |
<CDK组ID>.command | 字符串列表 | 兑换成功后执行的指令。 |
如果兑换关联的邮件模板条件不满足,玩家不会收到该邮件;但 CDK 组兑换记录仍会被记录,之后不能再次兑换该组 CDK。
随机 CDK 格式
format 中的特殊字符会被替换为随机字符,其他字符保持不变:
| 字符 | 生成内容 |
|---|---|
a | 随机小写英文字母。 |
A | 随机大写英文字母。 |
@ | 随机小写英文字母、大写英文字母或数字。 |
! | 随机数字。 |
例如:
yaml
format: '@@@-离渊牛批-@@@'生成结果可能类似于:
text
s2V-离渊牛批-2km随机 CDK 会进行重复检查,避免与已有 CDK 或本次生成列表中的 CDK 重复。一次不要生成过多随机 CDK,项目配置注释明确提示大量生成和集中兑换可能带来明显耗能。
CDK 存储
- 固定 CDK 不需要生成随机序列,兑换内容为 CDK 组 ID。
- 未启用 MySQL 时,随机 CDK 保存到
cdkdata/<CDK组ID>.yml。 - 启用 MySQL 且连接初始化成功时,随机 CDK 保存到数据库的 CDK 表。
- 每个玩家在同一个 CDK 组中只能成功兑换一次。
PlaceholderAPI 变量
安装并启用 PlaceholderAPI 后,插件会注册以下变量:
| 变量 | 说明 |
|---|---|
%lmail_amount% | 玩家当前邮箱中的邮件数量。 |
%lmail_has_<模板ID>% | 玩家是否曾经收到指定模板 ID 的邮件。收到过返回 1,否则返回 0。 |
%lmail_now_mail% | 当前选中的邮件序号。未选中邮件时返回 -1。 |
邮件模板中的 papi:{} 条件、邮件领取后指令和相关消息也会使用 PlaceholderAPI 解析变量。
配置注意事项
- 修改
mysql.enable后需要重启服务器。 - 启用 MySQL 时,必须同时安装
LyMySQLCore并确认数据库连接成功。 - 邮件模板的
id用于发送、自动发送和唯一邮件判断,不能随意修改已经投入使用的 ID。 cdk.yml中的 CDK 组 ID 用于记录玩家兑换情况,已经使用的组 ID 不要随意修改。- 示例模板邮件会在重载时覆盖,创建正式邮件时应复制示例文件并修改副本。
- 邮件领取前会检查空余槽位;空位不足时邮件不会删除,物品也不会发放。
- 重载期间邮箱界面会被关闭,避免配置重载过程中继续操作界面。