Skip to content

自定义事件

AreaModule 提供了三个 Bukkit 事件,供其他插件监听关卡的生命周期变化。所有事件继承自 TabooLib 的 BukkitProxyEvent

LevelStartEvent

关卡启动时触发。

kotlin
import me.kzheart.areamodule.event.LevelStartEvent

@SubscribeEvent
fun onLevelStart(event: LevelStartEvent) {
    val level = event.gameLevel
    val cause = event.cause             // API 或 TRIGGER
    val triggerPlayers = event.triggerPlayerIds  // 触发玩家 UUID 列表

    println("关卡 ${level.id} 启动,原因: $cause")
}
属性类型说明
gameLevelGameLevel启动的关卡实例
causeCause启动原因:API(命令/API 调用)或 TRIGGER(触发器自动触发)
triggerPlayerIdsList<UUID>触发玩家的 UUID 列表(仅 TRIGGER 时有值)

LevelFinishEvent

关卡所有子关卡完成后触发。

kotlin
import me.kzheart.areamodule.event.LevelFinishEvent

@SubscribeEvent
fun onLevelFinish(event: LevelFinishEvent) {
    val level = event.gameLevel
    println("关卡 ${level.id} 完成!")
}
属性类型说明
gameLevelGameLevel完成的关卡实例

LevelFailEvent

关卡失败时触发。此时分数和进度数据还未重置,监听者可以读取。

kotlin
import me.kzheart.areamodule.event.LevelFailEvent

@SubscribeEvent
fun onLevelFail(event: LevelFailEvent) {
    val level = event.gameLevel
    val reason = event.reason  // TIMEOUT 或 MANUAL

    when (reason) {
        LevelFailEvent.FailReason.TIMEOUT -> println("关卡 ${level.id} 超时失败")
        LevelFailEvent.FailReason.MANUAL -> println("关卡 ${level.id} 手动失败")
    }
}
属性类型说明
gameLevelGameLevel失败的关卡实例
reasonFailReason失败原因:TIMEOUT(限时超时)或 MANUAL(命令/API 手动触发)

TIP

LevelFailEvent 触发时,关卡的分数、子关卡进度等信息仍然可读。事件触发之后才会重置。

基于 TabooLib 构建的 Minecraft 区域关卡插件