事件 API
EmakiAccessory 在 emaki.jiuwu.craft.accessory.api.event 包发布一个 Bukkit 事件。
AccessorySetBonusChangeEvent
java
public final class AccessorySetBonusChangeEvent extends Event不可取消。事件触发时套装加成已经折算进属性与技能贡献,监听器只是收到通知。
| 成员 | 类型 | 说明 |
|---|---|---|
getPlayer() | Player | 套装状态发生变化的玩家。 |
getSetId() | String | 饰品套装 id。 |
getOldPieceCount() | int | 变化前的已装备件数。 |
getNewPieceCount() | int | 变化后的已装备件数。 |
getTotalPieces() | int | 该套装声明的成员总数。 |
getActiveThresholds() | List<Integer> | 当前生效的各档所需件数。 |
getActiveThresholds() 返回不可变列表。由于阈值是累加的,戴够 3 件时该列表同时包含 2 和 3。
边沿触发
饰品贡献快照在每次 GUI 变更、数据加载和 reload 后都会重算,但本事件只在某个套装的已装备件数真正发生变化时触发。件数没变的重算不会产生事件。
线程
在该玩家的实体 owner 线程触发。
孤儿槽的影响
孤儿饰品永不计入件数。因此从 parts.yml 里移除一个部位会降低这里报告的件数,并触发一次件数下降的事件。
多页的影响
件数只统计生效页。切换生效页会让两边的件数一起变化,因此可能连续触发多个套装的事件;玩家失去生效页权限时该页贡献按 0 计算,同样触发件数下降。
事件本身不带页信息。需要知道是哪一页时,用 EmakiAccessoryApi.catalog().enabledPage(playerId) 查询。
与 EmakiItem 装备套装的关系
饰品套装只统计饰品槽内的物品,永不与 EmakiItem 的装备套装混算。同一件物品同时属于两边套装时,两边各自独立计数、各自触发自己的事件。
示例
java
@EventHandler
public void onSetChange(AccessorySetBonusChangeEvent event) {
if (event.getNewPieceCount() == event.getTotalPieces()) {
event.getPlayer().sendMessage("饰品套装已集齐:" + event.getSetId());
}
}