跳到主要内容

事件系统

Adyeshach 提供了一个完整的事件系统,用于监听和处理虚拟实体的各种行为。事件系统分为以下几类:

  • [B] Bukkit 事件:标准的 Bukkit 事件,可通过 @EventHandler 或 @SubscribeEvent 监听
  • [A] 内部事件:Adyeshach 特有事件,需通过 Adyeshach.api().getEventBus() 监听
  • [C] 可取消事件:事件可以被取消(通过设置 isCancelled = true)

实体生命周期事件​

创建与销毁​

[BC] AdyeshachEntityCreateEvent​

当通过管理器创建新的虚拟实体时触发。

class AdyeshachEntityCreateEvent(
val entity: EntityInstance, // 被创建的实体
var location: Location // 创建位置
) : BukkitProxyEvent()

[BC] AdyeshachEntityRemoveEvent​

当通过管理器移除虚拟实体时触发。

class AdyeshachEntityRemoveEvent(
val entity: EntityInstance // 被移除的实体
) : BukkitProxyEvent()

[B] AdyeshachEntitySpawnEvent​

当虚拟实体在世界中生成时触发。

[B] AdyeshachEntityDestroyEvent​

当虚拟实体从世界中销毁时触发。

玩家交互事件​

[BC] AdyeshachEntityInteractEvent​

当玩家与虚拟实体进行交互(右键)时触发。

class AdyeshachEntityInteractEvent(
val entity: EntityInstance, // 被交互的实体
val player: Player, // 交互的玩家
var isMainHand: Boolean, // 是否主手交互
var vector: Vector // 交互位置向量
) : BukkitProxyEvent()

[BC] AdyeshachEntityDamageEvent​

当玩家攻击(左键)虚拟实体时触发。

class AdyeshachEntityDamageEvent(
val entity: EntityInstance, // 被攻击的实体
val player: Player // 攻击的玩家
) : BukkitProxyEvent()

实体控制事件​

[BC] AdyeshachControllerAddEvent​

当向虚拟实体添加控制器时触发。

class AdyeshachControllerAddEvent(
val entity: EntityInstance, // 目标实体
val controller: Controller // 被添加的控制器
) : BukkitProxyEvent()

[BC] AdyeshachControllerRemoveEvent​

当从虚拟实体移除控制器时触发。

可见性与状态事件​

[BC] AdyeshachEntityVisibleEvent​

当虚拟实体的可见状态发生改变时触发。

示例:视野检查
@SubscribeEvent
fun onVisible(e: AdyeshachEntityVisibleEvent) {
if (e.visible && !checkView(e.entity, e.viewer)) {
e.isCancelled = true
}
}

[B] AdyeshachGameProfileGenerateEvent​

当生成玩家类型虚拟实体的游戏档案时触发。

命令相关事件​

[B] AdyeshachEntityCreateByCommandEvent​

当通过命令创建虚拟实体时触发。

class AdyeshachEntityCreateByCommandEvent(
val type: EntityTypes, // 实体类型
val id: String, // 实体ID
val player: CommandSender // 执行命令的发送者
) : BukkitProxyEvent()

[B] AdyeshachEntityRemoveByCommandEvent​

当通过命令删除虚拟实体时触发。

[B] AdyeshachEntityCloneByCommandEvent​

当通过命令克隆虚拟实体时触发。

[B] AdyeshachEntityRenameByCommandEvent​

当通过命令重命名虚拟实体时触发。

标签与数据事件​

[BC] AdyeshachTagUpdateEvent​

当更新虚拟实体的标签时触发。

[BC] AdyeshachPersistentTagUpdateEvent​

当更新虚拟实体的持久化标签时触发。

[BC] AdyeshachItemHookEvent​

当解析物品时触发的钩子事件。

示例:自定义物品解析
@SubscribeEvent
fun onHook(e: AdyeshachItemHookEvent) {
if (e.namespace == "myplugin") {
e.itemStack = MyPlugin.getItem(e.source)
}
}

预处理事件​

这些事件通过 Adyeshach.api().getEventBus() 注册,可以在特定操作前执行自定义逻辑。

[AC] prepareSpawn​

在实体生成前的预处理。

示例:ModelEngine 集成
Adyeshach.api().getEventBus().prepareSpawn { e -> 
!e.entity.showModelEngine(e.viewer)
}

[AC] prepareDestroy​

在实体销毁前的预处理。

[AC] prepareTick​

在 tick 更新前的预处理。

[A] prepareMove​

在移动状态变更后的预处理。

[AC] prepareTeleport​

在传送前的预处理。

[AC] prepareVelocity​

在设置速度前的预处理。

[AC] prepareMetaUpdate​

在元数据更新前的预处理。

[AC] prepareMaskedMetaGenerate​

在生成 MetaMasked 前的预处理。

[AC] prepareNaturalMetaGenerate​

在生成 MetaNatural 前的预处理。

预处理事件说明

标注为 [AC] 的预处理事件通过返回 false 来取消(拦截)该操作