简体中文
事件 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 路径 |
SkillPostCastEvent | effect 成功, 资源与冷却已通过当前 session 提交后 | 否 | 无 | post 通知, 不可回滚 | 成功的 CastAttemptService.finalizeAttempt; 失败或 source lost 不发 |
SkillPreUpgradeEvent | 升级校验通过后, 扣费和摇点前 | 是 | successRate | 停止扣费与升级 | SkillUpgradeService |
SkillUpgradeEvent | 升级尝试成功或失败结果已应用后 | 否 | 无 | post 通知 | SkillUpgradeService |
PlayerSkillSlotChangeEvent | equip, unequip, bind-trigger 写入前 | 是 | 无 | 阻止槽位变更 | PlayerSkillStateService 三条状态路径 |
事件字段
| 事件 | 只读字段 | 可写字段 |
|---|---|---|
SkillPreCastEvent | player, skillId, triggerId | cancelled |
SkillPostCastEvent | player, skillId, triggerId | 无 (不含 HandlerList 之外的字段) |
SkillPreUpgradeEvent | player, skillId, currentLevel, targetLevel, maxLevel | cancelled, successRate |
SkillUpgradeEvent | player, skillId, fromLevel, toLevel, successRate, success, downgraded | 无 |
PlayerSkillSlotChangeEvent | player, slotIndex, skillId, triggerId, action | cancelled |
PlayerSkillSlotChangeEvent.Action 枚举取值: EQUIP (装配技能), UNEQUIP (清空槽位), BIND_TRIGGER (绑定触发器). 字段随动作变化: UNEQUIP 时 skillId 为原先绑定的技能 id, triggerId 仅在 BIND_TRIGGER 时非空
边界说明
SkillPostCastEvent只含 player, skillId, triggerId 三个字段, 且恒不 CancellableSkillPreUpgradeEvent在扣费之前发布, 取消它不会产生已扣费用SkillUpgradeEvent在等级 (或失败惩罚) 已经应用之后发布, 监听器只能观察, 不能改变结果- Script action 与外部技能来源 provider 是扩展执行点, 注册本身不触发这些事件; 只有实际进入中央 cast/upgrade/slot service 的操作才发布这些事件
- 事件由插件同步调用, 监听器不得在其中执行阻塞操作或访问其他实体的 Bukkit 状态