事件系统
Assiah 提供 9 个 Bukkit 事件,覆盖邮件的完整生命周期。标记 ✅ 的事件可取消。
事件一览
| 事件 | 可取消 | 说明 |
|---|---|---|
MailSendEvent | ✅ | 邮件发送前触发 |
MailDeliveredEvent | ❌ | 邮件投递完成后触发 |
MailReadEvent | ❌ | 邮件被阅读时触发 |
MailClaimEvent | ❌ | 邮件附件被领取时触发 |
MailDeleteEvent | ❌ | 邮件被删除时触发 |
MailArchiveEvent | ❌ | 邮件被归档时触发 |
MailReplyEvent | ❌ | 邮件被回复时触发 |
MailForwardEvent | ❌ | 邮件被转发时触发 |
MailDraftSaveEvent | ❌ | 草稿被保存时触发 |
事件详情
MailSendEvent
邮件发送前触发,取消后邮件不会发送。
| 属性 | 类型 | 说明 |
|---|---|---|
sender | UUID | 发送者 UUID |
receiver | UUID | 接收者 UUID |
title | String | 邮件标题 |
body | String | 邮件正文 |
attachments | List<Attachment> | 附件列表 |
@EventHandler
fun onMailSend(event: MailSendEvent) {
// 禁止向某个玩家发送邮件
if (event.receiver == bannedUUID) {
event.isCancelled = true
}
}
MailDeliveredEvent
邮件成功投递到收件箱后触发。
| 属性 | 类型 | 说明 |
|---|---|---|
mailId | String | 邮件 ID |
sender | UUID | 发送者 UUID |
receiver | UUID | 接收者 UUID |
@EventHandler
fun onMailDelivered(event: MailDeliveredEvent) {
// 通知在线玩家
val player = Bukkit.getPlayer(event.receiver)
player?.sendMessage("你收到了一封新邮件!")
}
MailReadEvent
邮件被阅读时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 邮箱所有者 UUID |
mailId | String | 邮件 ID |
MailClaimEvent
邮件附件被领取时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 领取者 UUID |
mailId | String | 邮件 ID |
attachments | List<Attachment> | 被领取的附件 |
MailDeleteEvent
邮件被删除时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 邮箱所有者 UUID |
mailId | String | 邮件 ID |
MailArchiveEvent
邮件被归档时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 邮箱所有者 UUID |
mailId | String | 邮件 ID |
MailReplyEvent
邮件被回复时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 回复者 UUID |
originalMailId | String | 原始邮件 ID |
replyMailId | String | 回复邮件 ID |
MailForwardEvent
邮件被转发时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 转发者 UUID |
originalMailId | String | 原始邮件 ID |
forwardMailId | String | 转发邮件 ID |
target | UUID | 转发目标 UUID |
MailDraftSaveEvent
草稿被保存时触发。
| 属性 | 类型 | 说明 |
|---|---|---|
ownerId | UUID | 草稿所有者 UUID |
draftId | String | 草稿 ID |
监听示例
import org.bukkit.event.EventHandler
import org.bukkit.event.Listener
class AssiahListener : Listener {
@EventHandler
fun onSend(event: MailSendEvent) {
// 记录邮件发送日志
logger.info("${event.sender} -> ${event.receiver}: ${event.title}")
}
@EventHandler
fun onClaim(event: MailClaimEvent) {
// 记录附件领取
logger.info("${event.ownerId} 领取了邮件 ${event.mailId} 的附件")
}
}
备注
所有事件位于 kim.hhhhhy.assiah.api.event 包下。