事件 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 重新校验并截断,不会突破目标配方上限。