跳到主要内容

事件系统

Malkuth 提供 14 个 Bukkit 事件,覆盖商城操作的完整生命周期。标记 ✅ 的事件可取消(isCancelled)。

事件一览

事件可取消说明
PlayerOpenShopEvent玩家打开商店前触发
PlayerCloseShopEvent玩家关闭商店后触发
PlayerPurchaseEvent玩家购买商品前触发
PlayerPurchasePostEvent玩家购买商品后触发
PlayerRecycleEvent玩家回收物品前触发
PlayerRecyclePostEvent玩家回收物品后触发
PlayerSellEvent玩家出售物品前触发
PlayerBuyFromPlayerEvent玩家从其他玩家购买前触发
PlayerBuyFromPlayerPostEvent玩家从其他玩家购买后触发
PlayerGiftEvent玩家赠送物品前触发
PlayerGiftPostEvent玩家赠送物品后触发
PlayerCartCheckoutEvent玩家购物车结算前触发
PlayerAuctionBidEvent玩家拍卖出价前触发
MalkuthReloadEventMalkuth 重载完成后触发

事件详情

PlayerOpenShopEvent

玩家打开商店前触发,取消后商店不会打开。

属性类型说明
playerPlayer触发玩家
shopIdString商店 ID
@EventHandler
fun onOpenShop(event: PlayerOpenShopEvent) {
if (event.shopId == "vip_shop" && !event.player.hasPermission("shop.vip")) {
event.isCancelled = true
event.player.sendMessage("你没有权限打开 VIP 商店")
}
}

PlayerCloseShopEvent

玩家关闭商店后触发,不可取消。

属性类型说明
playerPlayer触发玩家
shopIdString商店 ID

PlayerPurchaseEvent

玩家购买商品前触发,取消后购买不会执行。

属性类型说明
playerPlayer购买玩家
shopIdString商店 ID
goodsIdString商品 ID
amountInt购买数量
priceDouble总价格
@EventHandler
fun onPurchase(event: PlayerPurchaseEvent) {
// 限制单次购买数量
if (event.amount > 64) {
event.isCancelled = true
event.player.sendMessage("单次购买不能超过 64 个")
}
}

PlayerPurchasePostEvent

购买完成后触发,用于记录日志或发放额外奖励。

属性类型说明
playerPlayer购买玩家
shopIdString商店 ID
goodsIdString商品 ID
amountInt购买数量
priceDouble总价格
@EventHandler
fun onPurchasePost(event: PlayerPurchasePostEvent) {
// 购买后发放积分
PointsPlugin.addPoints(event.player, (event.price * 0.1).toInt())
}

PlayerRecycleEvent

玩家回收物品前触发,取消后回收不会执行。

属性类型说明
playerPlayer回收玩家
shopIdString商店 ID
goodsIdString商品 ID
amountInt回收数量
priceDouble回收价格

PlayerRecyclePostEvent

回收完成后触发。属性同 PlayerRecycleEvent

PlayerSellEvent

玩家出售物品前触发(玩家交易模式)。

属性类型说明
playerPlayer出售玩家
shopIdString商店 ID
goodsIdString商品 ID
priceDouble出售价格

PlayerBuyFromPlayerEvent

玩家从其他玩家购买物品前触发。

属性类型说明
buyerPlayer买家
sellerUUID卖家 UUID
shopIdString商店 ID
goodsIdString商品 ID
priceDouble价格

PlayerBuyFromPlayerPostEvent

玩家间交易完成后触发。属性同 PlayerBuyFromPlayerEvent

PlayerGiftEvent

玩家赠送物品前触发。

属性类型说明
playerPlayer赠送者
targetUUID接收者 UUID
shopIdString商店 ID
goodsIdString商品 ID
amountInt赠送数量

PlayerGiftPostEvent

赠送完成后触发。属性同 PlayerGiftEvent

PlayerCartCheckoutEvent

购物车结算前触发,取消后结算不会执行。

属性类型说明
playerPlayer结算玩家
shopIdString商店 ID
itemsList<CartItem>购物车内容
totalPriceDouble总价格

PlayerAuctionBidEvent

玩家在拍卖行出价前触发。

属性类型说明
playerPlayer出价玩家
auctionIdString拍卖 ID
bidPriceDouble出价金额

MalkuthReloadEvent

Malkuth 重载完成后触发,用于在重载后刷新缓存。

@EventHandler
fun onReload(event: MalkuthReloadEvent) {
// 重载后刷新自定义缓存
myCache.invalidateAll()
}

监听示例

import org.bukkit.event.EventHandler
import org.bukkit.event.Listener

class MalkuthListener : Listener {

@EventHandler
fun onPurchase(event: PlayerPurchaseEvent) {
val player = event.player
val goods = event.goodsId
val price = event.price
// 自定义逻辑
}

@EventHandler
fun onPurchasePost(event: PlayerPurchasePostEvent) {
// 购买完成后的处理
}
}
备注

所有事件位于 kim.hhhhhy.malkuth.common.api.event 包下。可取消事件继承自 Cancellable,设置 isCancelled = true 即可阻止对应操作。