跳转到正文
iPlugin

事件

监听 Popup、Screen 和 Compass 生命周期

Xerr 事件继承 TabooLib BukkitProxyEvent。在使用 TabooLib 的插件中通过 @SubscribeEvent 监听。

import com.hiusers.xerr.api.event.popup.PopupStartEvent
import com.hiusers.xerr.api.event.popup.PopupEndEvent
import taboolib.common.platform.event.SubscribeEvent

object XerrPopupListener {

    @SubscribeEvent
    fun onStart(event: PopupStartEvent) {
        val playerId = event.playerId
        val popupId = event.popupId
        val variables = event.variables
    }

    @SubscribeEvent
    fun onEnd(event: PopupEndEvent) {
        val reason = event.reason
    }
}
  • PopupStartEvent: 实例真正开始入场或显示时触发,排队时不触发。
  • PopupEndEvent: 实例进入最终结束状态后触发。

Screen

import com.hiusers.xerr.api.event.screen.ScreenStartEvent
import com.hiusers.xerr.api.event.screen.ScreenMarkerEvent
import com.hiusers.xerr.api.event.screen.ScreenEndEvent
import taboolib.common.platform.event.SubscribeEvent

object XerrScreenListener {

    @SubscribeEvent
    fun onStart(event: ScreenStartEvent) {
        val handle = event.handle
    }

    @SubscribeEvent
    fun onMarker(event: ScreenMarkerEvent) {
        if (event.marker == "covered") {
            // 切换场景或传送玩家
        }
    }

    @SubscribeEvent
    fun onEnd(event: ScreenEndEvent) {
        val reason = event.reason
    }
}
  • ScreenStartEvent: 创建实例后触发。
  • ScreenMarkerEvent: Scene 到达配置 Marker 时触发。
  • ScreenEndEvent: 效果完全结束后触发。

Compass

import com.hiusers.xerr.api.event.compass.CompassTargetAddEvent
import com.hiusers.xerr.api.event.compass.CompassTargetRemoveEvent
import taboolib.common.platform.event.SubscribeEvent

object XerrCompassListener {

    @SubscribeEvent
    fun onAdd(event: CompassTargetAddEvent) {
        val target = event.target
        val cause = event.cause
    }

    @SubscribeEvent
    fun onRemove(event: CompassTargetRemoveEvent) {
        val target = event.target
        val cause = event.cause
    }
}

事件原因:

  • API: 普通 API 或命令修改。
  • STORAGE_LOAD: 从 Compass Storage 读取。
  • STORAGE_UNLOAD: Storage 注销或卸载。

同一目标 ID 的更新不会重复触发 Add。Provider 每次刷新的快照也不会产生逐目标 Add/Remove 事件。

事件不可取消

这些事件用于观察已经发生的生命周期,不支持取消。要阻止显示,应在调用 Xerr 前完成自己的权限和业务条件判断。