Skip to content

事件 API ​

Skills 事件位于 emaki.jiuwu.craft.skills.api.event, 同步发布在技能玩家 owner thread. 异步施法由 runtime 先切换回 owner thread, 再发布 pre/post 事件

事件触发时机Cancellable可修改字段取消/结果效果runtime 路径
SkillPreCastEvent条件, 冷却, 资源检查通过后, 执行技能 effect 前是无停止 effect, 资源与冷却提交CastAttemptService 的 active/passive, cast 与 castByTrigger 路径
SkillPostCastEventeffect 成功, 资源与冷却已通过当前 session 提交后否无post 通知, 不可回滚成功的 CastAttemptService.finalizeAttempt; 失败或 source lost 不发
SkillPreUpgradeEvent升级校验通过后, 扣费和摇点前是successRate停止扣费与升级SkillUpgradeService
SkillUpgradeEvent升级尝试成功或失败结果已应用后否无post 通知SkillUpgradeService
PlayerSkillSlotChangeEventequip, unequip, bind-trigger 写入前是无阻止槽位变更PlayerSkillStateService 三条状态路径

事件字段 ​

事件只读字段可写字段
SkillPreCastEventplayer, skillId, triggerIdcancelled
SkillPostCastEventplayer, skillId, triggerId无 (不含 HandlerList 之外的字段)
SkillPreUpgradeEventplayer, skillId, currentLevel, targetLevel, maxLevelcancelled, successRate
SkillUpgradeEventplayer, skillId, fromLevel, toLevel, successRate, success, downgraded无
PlayerSkillSlotChangeEventplayer, slotIndex, skillId, triggerId, actioncancelled

PlayerSkillSlotChangeEvent.Action 枚举取值: EQUIP (装配技能), UNEQUIP (清空槽位), BIND_TRIGGER (绑定触发器). 字段随动作变化: UNEQUIP 时 skillId 为原先绑定的技能 id, triggerId 仅在 BIND_TRIGGER 时非空

边界说明 ​

  • SkillPostCastEvent 只含 player, skillId, triggerId 三个字段, 且恒不 Cancellable
  • SkillPreUpgradeEvent 在扣费之前发布, 取消它不会产生已扣费用
  • SkillUpgradeEvent 在等级 (或失败惩罚) 已经应用之后发布, 监听器只能观察, 不能改变结果
  • Script action 与外部技能来源 provider 是扩展执行点, 注册本身不触发这些事件; 只有实际进入中央 cast/upgrade/slot service 的操作才发布这些事件
  • 事件由插件同步调用, 监听器不得在其中执行阻塞操作或访问其他实体的 Bukkit 状态