事件 API
Item 当前有五个公开事件;源码中不存在 ItemUpdateEvent 或 EquipmentSkillTriggerEvent。事件包为 emaki.jiuwu.craft.item.api.event。
| 事件 | 触发时机 | 线程 | Cancellable | 可修改字段 | 取消/结果效果 | runtime 路径 |
|---|---|---|---|---|---|---|
EmakiItemCreateEvent | factory 已构建 stack、返回调用方前 | global-region owner thread | 是 | result,必须非 null | 取消丢弃结果;公开 create 返回 CANCELLED | 进入 EmakiItemFactory 且当前拥有 global region 的创建路径 |
ItemRepairEvent | 修复校验后、扣费和恢复耐久前 | 玩家 owner thread | 是 | restoreAmount | 取消不扣费、不修复;<=0 也抑制修复 | 材料与经济修复 service,包括公开 repair() 的经济路径 |
ItemSetBonusChangeEvent | active set count 实际改变后 | 玩家 owner thread | 否 | 无 | post 通知,不可回滚 | 装备套装刷新,每个变化 set id 一次 |
ItemStateChangeEvent | item state 变更已提交后 | 执行该次变更的 owner thread | 否 | 无 | post 通知,不可回滚 | state() 的 set/add/remove 提交路径 |
ItemStateThresholdEvent | 数值 item state 变更跨过已配置阈值后 | 执行该次变更的 owner thread | 否 | 无 | post 通知,不可回滚 | 提交并完成 once 阈值重置记账之后,每跨过一个阈值一次 |
当前 factory 创建事件的 player 为 null。若不拥有 global region,runtime 会跳过创建事件并仍返回分离构建结果,因此它不是所有 ItemStack 创建的完整审计流。Migration 和普通 refresh 没有独立公开事件。ItemSetBonusChangeEvent 是 post 事件,不能取消。
ItemStateChangeEvent 暴露 getItem()(克隆件)、getMutation()、getHolder()(无已知持有者时为 null)以及从 mutation 转发的 getKey()、getOldValue()、getNewValue()、getDelta()。
ItemStateThresholdEvent 暴露 getItem()、getHolder()、getKey()、getOldValue()、getNewValue()、getThreshold()、getThresholdId()、getDirection()(UP/DOWN)、isOnce() 与 isRearmed()。它只覆盖配置了阈值的数值字段(INTEGER、LONG、DOUBLE);向上跨越按阈值升序、向下跨越按降序各派发一次。被拒绝或未改变的变更、保留的 meta. 元数据键、BOOLEAN 与 STRING 字段、未配置阈值的数值字段、新旧值处于同一侧、仍处于 latch 状态的 once 阈值,以及重建保留原样回写的状态都不会派发。