Skip to content

配置说明

LyMailReload 的配置文件位于插件目录下:

文件 / 目录用途
config.yml数据库、自动任务、邮箱界面和消息配置
template/*.yml邮件模板配置
cdk.ymlCDK 组、兑换奖励和 CDK 生成规则
data/<玩家UUID>.yml未启用 MySQL 时保存玩家邮件数据
cdkdata/<CDK组ID>.yml未启用 MySQL 时保存随机 CDK 数据

重载插件时会重新读取 config.ymltemplate/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.databasenameMySQL 数据库名称。
mysql.usernameMySQL 登录用户名。
mysql.passwordMySQL 登录密码。
mysql.portMySQL 端口。
mysql.ipMySQL 服务器地址。

启用后,插件会使用数据库保存玩家邮箱数据和 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-mailtrue 且玩家已有该模板的收件记录时,插件不会再次发送该模板。

定时发送时间

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自动发送结束日期的日期。

只有同时配置对应的 yearmonthday 时,开始或结束时间才会被读取。

当邮件在定时发送开始时间到结束时间之间创建时,邮件到期时间使用 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,数量,是否发放
字段说明
物品插件标识用于选择物品来源。项目中支持 nisimmmm5oaafsx
物品 ID对应物品插件中的物品 ID。
数量领取或预览时使用的物品数量。
是否发放true 时领取邮件会实际发放;false 时不发放,仅用于展示。

项目中使用的物品来源如下:

标识物品来源
niNeigeItems
siSX-Item
mmMythicMobs
mm5MythicMobs 5
oaOpenAudioMc 物品接口
afAzureFlow
sxSX-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 不要随意修改。
  • 示例模板邮件会在重载时覆盖,创建正式邮件时应复制示例文件并修改副本。
  • 邮件领取前会检查空余槽位;空位不足时邮件不会删除,物品也不会发放。
  • 重载期间邮箱界面会被关闭,避免配置重载过程中继续操作界面。