跳到主要内容

事件分发

事件分发器是 Monoceros 的事件驱动核心 —— 它监听 Bukkit 事件,并将事件路由到脚本、动作工作流或自定义处理器中执行。

基本信息

  • 分发器定义文件放在插件目录下的 dispatcher/ 文件夹中,YAML 格式,支持子目录
  • 每个分发器绑定一个 Bukkit 事件类,当事件触发时自动执行对应的路由目标
  • 支持优先级(listen-priority)和权重(weight)排序,同一事件可注册多个分发器
  • 支持 ignore-cancelled 跳过已被取消的事件
  • 文件修改后自动热重载,无需重启服务器

路由类型

分发器支持三种路由目标:

路由类型说明
script执行 Fluxon 脚本
action执行动作工作流
handler执行自定义处理器

Pipeline 管道

每个事件分发器的执行都经过一条 Pipeline 管道,管道包含 5 个生命周期阶段:

  1. initPrincipal —— 初始化事件主体(玩家、实体或方块)
  2. initVariables —— 初始化上下文变量
  3. filter —— 过滤条件判断
  4. afterFilter —— 过滤通过后的后处理
  5. postprocess —— 最终后处理

同一事件可以注册多条 Pipeline,按优先级从高到低排序执行。

StateProbe 状态探针

部分状态变化在 Bukkit 中没有对应事件(例如玩家更换盔甲),Monoceros 通过 StateProbe 机制来补偿:

  • StateProbe 会定期轮询检测状态变化
  • 检测到变化后生成虚拟事件(如 PlayerArmorChangeEvent
  • 虚拟事件和普通 Bukkit 事件一样,可以被分发器监听和路由

相关页面