Skip to content

事件 API

Item 当前有五个公开事件;源码中不存在 ItemUpdateEventEquipmentSkillTriggerEvent。事件包为 emaki.jiuwu.craft.item.api.event

事件触发时机线程Cancellable可修改字段取消/结果效果runtime 路径
EmakiItemCreateEventfactory 已构建 stack、返回调用方前global-region owner threadresult,必须非 null取消丢弃结果;公开 create 返回 CANCELLED进入 EmakiItemFactory 且当前拥有 global region 的创建路径
ItemRepairEvent修复校验后、扣费和恢复耐久前玩家 owner threadrestoreAmount取消不扣费、不修复;<=0 也抑制修复材料与经济修复 service,包括公开 repair() 的经济路径
ItemSetBonusChangeEventactive set count 实际改变后玩家 owner threadpost 通知,不可回滚装备套装刷新,每个变化 set id 一次
ItemStateChangeEventitem state 变更已提交后执行该次变更的 owner threadpost 通知,不可回滚state()set/add/remove 提交路径
ItemStateThresholdEvent数值 item state 变更跨过已配置阈值后执行该次变更的 owner threadpost 通知,不可回滚提交并完成 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()。它只覆盖配置了阈值的数值字段(INTEGERLONGDOUBLE);向上跨越按阈值升序、向下跨越按降序各派发一次。被拒绝或未改变的变更、保留的 meta. 元数据键、BOOLEANSTRING 字段、未配置阈值的数值字段、新旧值处于同一侧、仍处于 latch 状态的 once 阈值,以及重建保留原样回写的状态都不会派发。