Skip to content

事件 API

EmakiAttribute 对外公开 Bukkit 事件,外部插件可以监听这些事件来拦截或改写关键流程。事件类由公开 API 模块 EmakiAttributeApi 提供,位于 emaki.jiuwu.craft.attribute.api 包,使用标准 HandlerList 样板。

事件触发时机可取消可改写
EmakiAttributeDamageEvent属性伤害计算完成、应用到目标之前setFinalDamage
PlayerResourceConsumeEvent自定义资源被消费之前setAmount

EmakiAttributeDamageEvent 的完整说明见 伤害事件 API。本页说明资源消费事件。

PlayerResourceConsumeEvent

在自定义资源(如法力、怒气等由 EmakiAttribute 管理的资源)被实际扣除之前触发。可用于拦截消费、改写消费量,或基于资源状态做联动。

事件特性

  • 可取消(Cancellable):取消后消费调用返回 false,资源不被扣除。
  • 可改写消费量(setAmount):事件结束后会按当前余额重新校验,若改写后的量超过余额则中止消费。
  • 在主线程触发;异步路径会跳过事件。

方法列表

方法返回值说明
getPlayer()Player被消费资源的玩家。
getResourceId()String资源 id。
getCurrentValue()double消费前的当前值。
getCurrentMax()double当前上限。
getAmount()double将被消费的量(除非改写或取消)。
setAmount(double)void改写消费量;事件后按余额重新校验。
isCancelled()boolean是否已取消。
setCancelled(boolean)void取消或恢复事件。

监听示例

java
@EventHandler
public void onResourceConsume(PlayerResourceConsumeEvent event) {
    // 法力消费减半
    if (event.getResourceId().equals("mana")) {
        event.setAmount(event.getAmount() * 0.5);
    }

    // 余额不足时直接拦截
    if (event.getCurrentValue() < event.getAmount()) {
        event.setCancelled(true);
    }
}

注意事项

  • 改写后的消费量超过当前余额时,EmakiAttribute 会中止本次消费。
  • 取消事件后,发起消费的调用返回 false,调用方应据此处理失败分支。
  • 不要在监听器里做耗时操作;事件运行在主线程上。