这是一个发送系统邮件的解决方案,适用于各种复杂情况
- 给 2022/08/25 14点 ~ 16点 在线时长满1小时的玩家发送邮件
- 给超过30天未登录且总游戏时间超过50小时的老玩家发送邮件
- 每周周一晚上8点给在线的玩家发送邮件
- 给今天在线超过10小时的玩家发送邮件
- 给当前在线/离线的玩家发送邮件
- 给服务器新人发送邮件
- 按权限发送邮件
- ......
- 插件全程异步操作,主线程0卡顿
- 支持 MySQL、MariaDB、SQLite、H2、Oracle、PostgreSQL、SQLServer 数据库
- 高度自定义的ui、消息
-
插件使用
Kotlin
语言 8000 编写,开源地址 https://github.com/SakuraTown/SakuraMail -
兼容的MC版本:
1.7.10
~1.19.2
(仅测试1.19.2) -
软依赖
PlaceholderAPI
-
运行环境:
jre8
及以上 -
依赖(在第一次插件启用时将自动下载)
-
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10
-
org.jetbrains.exposed:exposed-core:0.39.2
-
org.jetbrains.exposed:exposed-dao:0.39.2
-
org.jetbrains.exposed:exposed-jdbc:0.39.2
-
org.jetbrains.exposed:exposed-java-time:0.39.2
-
com.zaxxer:HikariCP:4.0.3
-
org.quartz-scheduler:quartz:2.3.2
-
com.github.cryptomorin:XSeries:9.0.0
-
将服务端关闭,将插件复制到服务端下的 plugins
文件夹中,启动服务端
将插件复制到服务端下的 plugins
文件夹中,使用 pluginman
yum
serverutils
等插件不停服载入插件
插件的邮件系统分为3个部分:邮件、邮件接收者、邮件发送者
一封邮件的所有接收者的附件与标题都是一样的,邮件可以被重复发送,当一封邮件被删除时,所有人的该邮件将被删除
在 plugins\SakuraMail
文件夹中, mails.yml
为储存本地邮件的配置文件。
邮件分为 id
、expire
(有效时间) 、icon
(显示的图标)、title
(邮件标题)、items
(附件物品)、fakeItems
(虚拟物品的位置)
、commands
(命令) 其中只有 id
是必须的
你有2种方式来创建邮件:
-
使用命令
sakuramail systemMail create [id]
其ID为任意唯一的字符串,如果手上拿着物品,则这个物品为 icon ,之后会打开一个物品栏,放入附件物品(会记录位置),当关闭物品栏时邮件完成创建。expire
fakeItems
commands
无法通过命令创建。 -
通过配置修改
mails.yml
如下
mails: test: # 随便取名,建议与ID一致 id: test # 唯一ID expire: P30D # 过期时间,格式见下文 #时间格式 icon: #图标,格式遵循XItemStack的格式https://github.com/CryptoMorin/XSeries/wiki/XItemStack material: STONE title: aaa # 标题(箱子界面的标题) items: ...(省略) fakeItems: '47' # 虚拟物品的位置,该位置的物品将不会发给玩家 commands: - spawn # 以玩家省份运行命令 - CMD:eco give %player% 200 # 以控制台省份运行命令 %player% 将转为领取的玩家名字 - OP:fly # 以玩家为OP运行命令
** 需要注意的是,以下选项建议为true,将支持所有物品,为false虽然能编辑附件,但是有可能不兼容一些特殊物品,比如拥有自定义附魔的物品**
# 是否对邮件的 items 加密压缩
# 如果为true,只能使用命令/sakuramail systemMail edit 命令在游戏内修改物品
# 请注意,设置为 false 可能不支持某些非原版物品!
isEncrypted: true
如果你装了 ItemsAdder
mails.yml
中的
icon 项可以为 item: namespacedId
否则为
icon:
material: PAPER
sakuramail systemMail
为邮件命令的根节点
有以下子节点
create <id> [title] 创建系统邮件,手上的是图标
edit <id> 编辑系统邮件的物品,其他操作请从yml修改
upload 上传邮件数据至数据库
download 从数据库下载邮件数据至本地
remove <id> 删除邮件
在 plugins\SakuraMail
文件夹中, receivers.yml
为储存邮件接收者的配置文件。
你有2种方式来创建邮件接收者:
-
使用命令
sakuramail receiver add <id> <parms>
为某个id的接收者添加参数,如果不存在则将创建新的。 -
通过配置修改
receivers.yml
如下是一个最简单的选择在线玩家的选择器,id为
在线玩家
参数为 online# 邮件目标选择器节点 receivers: 在线玩家: # 邮件目标选择器的ID - online # 参数 - ...
邮件接收者拥有丰富的参数选择,可以适应大多数情况
每条参数都会匹配所有符合情况的人
参数的解析自上而下,但是有一类参数的解析优先—— 一次游戏sql参数
所有一次游戏sql参数
将合并为一条sql语句以节省查询次数
sql参数将会从数据库查询匹配的接收者,请尽量少用以节省性能消耗
[time]、[duartion]的格式见下 ## 时间格式
玩家从进服到退服将被记录,以下参数就是对这一次游戏的选择
参数 | 说明 |
---|---|
loginTime before | 登陆时间 在 之前 |
loginTime after | 登陆时间 在 之后 |
loginTime between | 登陆时间 在 和 之间 |
quitTime before | 退出时间 在 之前 |
quitTime after | 退出时间 在 之后 |
quitTime between | 退出时间 在 和 之间 |
playtime greater | 一次游戏时间大于 |
playtime less | 一次游戏时间小于 |
playtime between | 一次游戏时间在 之间 |
为 totaltime
专用可选参数,分别为 统计时间
的 起始
和终点
不选则默认所有时间范围 格式与 相同
start需要以S开头,end需要以E开头,顺序随意
比如
totaltime greater PT5H SDPT0S 表示今天0点开始在线超过5小时 totaltime greater PT5H SDP-1D EPT0S 表示昨天0点到现在在线超过5小时
参数 | 说明 |
---|---|
totaltime greater [start] [end] | 游戏时间大于 |
totaltime less [start] [end] | 游戏时间小于 |
totaltime between | 游戏时间在 之间 |
hasmail | 拥有 ID 为 的邮件 |
all | 所有记录过的玩家(在安装本插件之后) |
参数 | 说明 |
---|---|
online | 所有在线玩家 |
offline | 所有离线玩家 |
permission | 所有拥有 权限的在线玩家 |
gamemode | 所有 游戏模式为 的在线玩家 |
uuids ;[uuid2];[uuid3].... | 一组uuid的玩家 |
names ;[name2];[name3].... | 一组name的玩家(从登录过的玩家里找) |
limit | 限制集合最多 个 |
参数的解析自上而下,彼此为独立的集合,而集合之间的关系也可以指定
比如
- online
- permission xxx
表示既是在线玩家 又是 拥有 xxx 权限的玩家 所有参数默认为集合的与的关系,也就是交集
集合关系的声明位于参数之前 格式为: 关系,参数
以英文逗号分隔
集合关系有如下
关系 | 说明 |
---|---|
and | 2个集合取交集 |
andNot | 在所有接收者(对应all参数)的集合中减去本行参数的玩家组成的集合再取交集 |
or | 2个集合的并集,也就是相加 与add一致 |
orNot | 在所有接收者(对应all参数)的集合中减去本行参数的玩家组成的集合再取并集 |
add | 2个集合相加,也就是并集 与or一致 |
remove | 从上面参数的集合中减去本集合的接收者 |
比如
- online
- or,offline
=> 效果与 localAll
相同
-
online
-
remove,permission xxx
=> 在线玩家中没有xxx权限的玩家
sakuramail receiver
为邮件接收者命令的根节点
有以下子节点
set <id> <index> <parms> 设置邮件接收者参数
add <id> <parms> 设置邮件接收者参数
remove <id> 删除邮件接收者
test <id> 测试邮件接收者
upload <id> 上传邮件接收者数据
download <id> 下载邮件接收者数据
export <id> <type> 导出符合邮件接收者的玩家
在 plugins\SakuraMail
文件夹中, senders.yml
为储存邮件发送者的配置文件。
你有2种方式来创建邮件发送者:
-
使用命令
sakuramail sender create <id> <type> [param]
其中 为唯一id 为发送者的类型,目前有
onTime
period
login
manual
register
5种 [parma] 为对应类型的参数 -
通过配置修改
senders.yml
手动: # 邮件发送者ID type: manual receivers: - online mails: - test 准时: # 邮件发送者ID type: onTime param: 2022-08-20T20:00:00 ## 只有这种格式 receivers: - online mails: - test 周期: # 邮件发送者ID type: period param: 0 0 * * * ? ## cron 表达式 生成器 https://cron.qqe2.com/ receivers: - online mails: - test 登录: # 邮件发送者ID type: login # 该类型在玩家登录时触发 receivers: - player mails: - test 注册: # 邮件发送者ID,仅支持Authme时有效 type: register # 该类型在玩家注册时触发 receivers: - pl 8558 ayer mails: - test
特别的: login 类型的发送者中的接收者的参数中如果有
%uuid%
将被替换为哦该登录玩家的uuid一个发给新人的邮件应该这么写
receivers.yml
receivers: login_player: - uuids %uuid% logined_before: - logintime before -PT1S
senders.yml
登录: type: login receivers: - login_player - remove,logined_before mails: - test
如上,你会发现 邮件发送者的 receivers 也接受 集合操作 这样可以有更多的组合以满足不同情况
从登录的玩家(login_player)中 减去 以前登录过的玩家(logined_before),剩下的就是新玩家了
lang.yml
中为玩家能看到的消息
database.yml
为数据库设置,默认使用 H2
数据库,生成的默认文件名为 database.mv.db
ui目录下为邮箱界面的设置,可以通过修改文件来修改邮箱界面
如果你装了 ItemsAdder
UI配置中的
item 项可以为 item: namespacedId
否则为
item:
material: PAPER
quartz.properties
为 quartz 库的设置,不懂可以不管
相关信息在文件中都有注释
以下只能用于 mailbox.yml
的 title
变量 | 意义 |
---|---|
%sakura_mail_current_page% | 当前邮箱的页码 |
%sakura_mail_total_page% | 邮箱的总行数 |
以下只能用于 mails.yml
的 icon
选项
变量 | 意义 |
---|---|
%sakura_mail_id% | 当前邮件的id |
%sakura_mail_sendtime% | 当前邮件的发送时间 |
%sakura_mail_accepttime% | 当前邮件的领取时间 |
%sakura_mail_expire% | 当前邮件的剩余有效时间 |
其他的变量由PlaceHolderAPI提供,有效范围为 邮箱界面、邮件title
邮箱界面可看到的所有物品(除了附件物品)
瞬时时间 支持的格式有
第一种
例子 | 说明 |
---|---|
2022-08-24 | 2022-08-24 当天0点0分0秒 |
2022-08-24T12:00:00 | 2022-08-24 的 12:00:00 |
**第二种 **
例如:P10DT2H30M15.03S 相对时间,默认以当前时间为参考系,正为当前之后负当前之前
P:开始标记,必须有
10D:十天
T:日期和时间的分割标记
2H:两个小时
30M:三十分钟
15.02S:15.02秒
**以上格式也支持<duartion>
P1D 表示一天的时间 PT1H表示1小时的时间,但是以下仅支持 **
可在在P之前声明参考系 如DPT1D 表示明天的0点 D-PT1D 或 DPT-1D 表示昨天的0点
参考系 | 说明 |
---|---|
H | 以当前小时的起始为参考系 |
D | 以当天0点的起始为参考系 |
W | 以当周周日的起始为参考系 |
M | 以当月一号的起始为参考系 |
插件主命令根节点为 sakuramail
别名 smail
mail
输入根节点可查看所有子节点的信息
命令的权限为 sakuramail.节点名称
可嵌套
玩家默认可用的命令只有一个 sakuramail open
打开自己的邮箱
如果你想要跨服,请先设置好数据库
将 邮件、邮件发送者、邮件接收者 的信息使用 upload 命令上传到数据库
请使用一台服务器作为配置服务器和发送服务器,以免重复发送邮件
所有 yml 配置都会自动重载 无需命令
推荐在IDEA中通过 gralde 的 build 构建
或者控制台运行./gradlew build