Skip to content

事件 API

EmakiStrengthen 对外公开 Bukkit 事件,外部插件可以监听这些事件来拦截、改写或记录强化流程。事件类位于 emaki.jiuwu.craft.strengthen.api.event 包,使用标准 HandlerList 样板。

事件触发时机可取消可改写
StrengthenPreAttemptEvent成功判定与扣费之前setSuccessRate
StrengthenAttemptEvent强化尝试完全结束之后只读
StrengthenTransferEvent目标物品重建之前setTransferredStar

StrengthenPreAttemptEvent

在预览并通过条件检查后、成功判定前、扣费前触发。

事件特性

  • 可取消(Cancellable):取消后不判定、不重建、不扣费。
  • 可改写成功率(setSuccessRate),单位为百分比 0-100。
  • 在主线程触发;异步路径会跳过事件。

方法列表

方法返回值说明
getPlayer()Player执行尝试的玩家。
getTargetItem()ItemStack被强化物品,可能为 null。
getRecipeId()String强化配方 id,可能为 null。
getCurrentStar()int尝试前星级。
getTargetStar()int成功目标星级。
getSuccessRate()double用于判定的成功率(0-100)。
setSuccessRate(double)void改写成功率。
isCancelled()boolean是否已取消。
setCancelled(boolean)void取消或恢复事件。

监听示例

java
@EventHandler
public void onStrengthenPreAttempt(StrengthenPreAttemptEvent event) {
    // 高星强化降低成功率
    if (event.getTargetStar() >= 10) {
        event.setSuccessRate(event.getSuccessRate() * 0.5);
    }
}

StrengthenAttemptEvent

在一次强化尝试完全结束后触发。成功、失败判定、早期失败(不合格、条件未满足、重建或扣费失败)都会触发;此时物品已重建、费用已扣。

事件特性

  • 不可取消,仅用于通知。

方法列表

方法返回值说明
getPlayer()Player执行尝试的玩家。
getResult()AttemptResult完全解析的尝试结果(emaki.jiuwu.craft.strengthen.model.AttemptResult)。
isSuccess()boolean是否成功。

StrengthenTransferEvent

在算出可转移星数后、目标物品重建之前触发。

事件特性

  • 可取消(Cancellable):取消后不重建目标物品。
  • 可改写转移星数(setTransferredStar)。EmakiStrengthen 会重新校验(截断到目标配方最大星),值小于等于 0 会中止转移。
  • 在主线程触发;异步路径会跳过事件。

方法列表

方法返回值说明
getPlayer()Player执行转移的玩家。
getSource()ItemStack星数来源物品。
getTarget()ItemStack接收星数的目标物品。
getTargetRecipeId()String目标物品的强化配方 id。
getSourceStar()int来源物品当前星数。
getDecayRate()double转移衰减率。
getTransferredStar()int将转移的星数(除非改写或取消)。
setTransferredStar(int)void改写转移星数;重新校验后截断到目标配方最大星,值小于等于 0 中止转移。
isCancelled()boolean是否已取消。
setCancelled(boolean)void取消或恢复事件。

监听示例

java
@EventHandler
public void onStrengthenTransfer(StrengthenTransferEvent event) {
    // 转移星数额外 +1(会被目标配方上限截断)
    event.setTransferredStar(event.getTransferredStar() + 1);
}

注意事项

  • StrengthenAttemptEvent.getResult() 返回的 AttemptResult 位于 emaki.jiuwu.craft.strengthen.model 包,通过 result.success() 判定成败。
  • StrengthenTransferEvent 改写的转移星数会被 EmakiStrengthen 重新校验并截断,不会突破目标配方上限。