Skip to content

事件 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());
    }
}