Doc ID: SIRC-102

MMOItems 事件 API 知识文档

MMOItems 提供了丰富的事件系统,允许开发者监听和处理各种物品相关的操作。本文档详细介绍了所有可用的事件类及其使用方法。

Overview

MMOItems 事件 API 文档

概述

MMOItems 提供了丰富的事件系统,允许开发者监听和处理各种物品相关的操作。本文档详细介绍了所有可用的事件类及其使用方法。

事件类目录

基础事件类

PlayerDataEvent

: net.Indyuce.mmoitems.api.event
继承: PlayerEvent, Cancellable
描述: 所有玩家相关事件的基类,包含玩家数据。

方法 返回类型 描述
getPlayerData() PlayerData 获取玩家数据
isCancelled() boolean 检查事件是否被取消
setCancelled(boolean) void 设置事件取消状态

物品构建相关事件

GenerateLoreEvent

: net.Indyuce.mmoitems.api.event
继承: Event
状态: 已弃用 – 将在未来版本移除,建议使用脚本替代
描述: 当生成物品Lore时触发。

方法 返回类型 描述
getItem() MMOItem 获取正在生成Lore的MMOItem
getBuilder() LoreBuilder 获取用于构建Lore的LoreBuilder
getLore() List<String> 获取占位符解析前的Lore列表
getParsedLore() List<String> 获取占位符解析后的Lore列表
setFinalLore(List<String>) void 设置物品的最终Lore

ItemBuildEvent

: net.Indyuce.mmoitems.api.event
继承: Event
状态: 已弃用 – 将在未来版本移除,建议使用脚本替代
描述: 当构建物品时触发。

方法 返回类型 描述
getItemStack() ItemStack 获取物品堆栈
setItemStack(ItemStack) ItemBuildEvent 设置物品堆栈

物品重铸事件

MMOItemReforgeEvent

: net.Indyuce.mmoitems.api.event
继承: Event, Cancellable
描述: 当物品正在被重铸时触发。

方法 返回类型 描述
getReforger() MMOItemReforger 获取重铸器实例
getOptions() ReforgeOptions 获取重铸选项
getPlayer() Player 获取玩家(可能为null)
getType() Type 获取物品类型
getTypeName() String 获取物品类型名称
getID() String 获取物品ID
getOldMMOItem() LiveMMOItem 获取旧的MMOItem
getNewMMOItem() MMOItem 获取新的MMOItem

MMOItemReforgeFinishEvent

: net.Indyuce.mmoitems.api.event
继承: Event, Cancellable
描述: 当物品重铸完成时触发。

方法 返回类型 描述
getReforger() MMOItemReforger 获取重铸器实例
getOptions() ReforgeOptions 获取重铸选项
getFinishedItem() ItemStack 获取完成的重铸物品
setFinishedItem(ItemStack) void 设置完成的重铸物品

物品掉落事件

ItemDropEvent

: net.Indyuce.mmoitems.api.event
继承: Event, Cancellable
描述: 当物品掉落时触发。

方法 返回类型 描述
getDrops() List<ItemStack> 获取掉落物品列表
getCause() DropCause 获取掉落原因
getWhoDropped() LivingEntity 获取掉落者
getMinedBlock() Block 获取挖掘的方块(仅当原因为NORMAL_BLOCK时)
getKilledEntity() Entity 获取被杀的实体(仅当原因为NORMAL_MONSTER时)
getKilledMythicMobName() String 获取被杀的神话怪物名称

DropCause枚举:

  • NORMAL_BLOCK: 从普通方块掉落
  • NORMAL_MONSTER: 从普通怪物掉落
  • MYTHIC_MOB: 从神话怪物掉落(已弃用)
  • CUSTOM_BLOCK: 从自定义方块掉落

合成站事件

PlayerUseCraftingStationEvent

: net.Indyuce.mmoitems.api.event
继承: PlayerDataEvent
描述: 当玩家使用合成站时触发。

方法 返回类型 描述
getStation() CraftingStation 获取合成站
hasRecipeInfo() boolean 检查是否有配方信息
getRecipeInfo() CheckedRecipe 获取配方信息
hasResult() boolean 检查是否有结果物品
getResult() ItemStack 获取结果物品
getRecipe() Recipe 获取配方
getInteraction() StationAction 获取交互类型

StationAction枚举:

  • UPGRADE_RECIPE: 使用升级配方
  • INTERACT_WITH_RECIPE: 与非即时配方交互
  • INSTANT_RECIPE: 使用即时配方
  • CRAFTING_QUEUE: 从合成队列领取物品
  • CANCEL_QUEUE: 取消队列中的物品

物品交互事件

ApplyGemStoneEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家尝试应用宝石到物品上时触发。

方法 返回类型 描述
getGemStone() VolatileMMOItem 获取宝石
getTargetItem() MMOItem 获取目标物品
getResult() GemStone.ResultType 获取结果类型
setResult(GemStone.ResultType) void 设置结果类型

ApplySoulboundEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家尝试给物品绑定灵魂时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getTargetItem() NBTItem 获取目标物品

BreakSoulboundEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家尝试解除物品的灵魂绑定时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getTargetItem() NBTItem 获取目标物品

ConsumableConsumedEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家消耗消耗品时触发。

方法 返回类型 描述
getMMOItem() VolatileMMOItem 获取MMOItem
getUseItem() Consumable 获取使用的消耗品
isConsume() Boolean 检查是否消耗(可能为null)
isConsume(boolean) boolean 检查是否消耗(带默认值)
setConsume(Boolean) void 设置是否消耗

DeconstructItemEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家分解物品时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getDeconstructedItem() NBTItem 获取被分解的物品
getLoot() List<ItemStack> 获取战利品列表

IdentifyItemEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家鉴定物品时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getUnidentifiedItem() NBTItem 获取未鉴定的物品

RepairItemEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家修复物品时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getTargetItem() NBTItem 获取目标物品
getRepaired() int 获取修复的耐久度
setRepaired(int) void 设置修复的耐久度

UpgradeItemEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家升级物品时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getTargetItem() MMOItem 获取目标物品
getConsumableData() UpgradeData 获取消耗品的升级数据
getTargetData() UpgradeData 获取目标物品的升级数据

UnsocketGemStoneEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent
描述: 当玩家移除宝石时触发。

方法 返回类型 描述
getConsumable() VolatileMMOItem 获取消耗品
getTargetItem() MMOItem 获取目标物品

耐久度相关事件

CustomDurabilityDamage

: net.Indyuce.mmoitems.api.event.item
继承: Event, Cancellable
描述: 当自定义耐久度物品受损时触发。

方法 返回类型 描述
getItem() CustomDurabilityItem 获取物品
getDurabilityDecrease() int 获取耐久度减少值

ItemCustomRepairEvent

: net.Indyuce.mmoitems.api.event.item
继承: Event, Cancellable
描述: 当自定义耐久度物品被修复时触发。

方法 返回类型 描述
hasPlayer() boolean 检查是否有玩家
getPlayer() Player 获取玩家
getDurabilityIncrease() int 获取耐久度增加值
getSourceItem() CustomDurabilityItem 获取源物品

武器使用事件

SpecialWeaponAttackEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent, Cancellable
描述: 当玩家使用特殊武器攻击时触发。

方法 返回类型 描述
getWeapon() Weapon 获取武器
getTarget() LivingEntity 获取目标

UntargetedWeaponUseEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent, Cancellable
描述: 当玩家使用无目标武器时触发。

方法 返回类型 描述
getWeapon() Weapon 获取武器

物品装备事件

ItemEquipEvent

: net.Indyuce.mmoitems.api.event.item
继承: PlayerDataEvent, Cancellable
描述: 当玩家装备物品时触发。

方法 返回类型 描述
getItem() ItemStack 获取物品

其他事件

BouncingCrackBlockBreakEvent

: net.Indyuce.mmoitems.api.event
继承: BlockBreakEvent
描述: 当弹跳裂痕方块被破坏时触发。

CraftMMOItemEvent

: net.Indyuce.mmoitems.api.event
继承: PlayerDataEvent
状态: 已弃用 – 不再使用
描述: 当合成MMOItem时触发。

MMOItemsReloadEvent

: net.Indyuce.mmoitems.api.event
继承: Event
描述: 当MMOItems重载时触发。

RefreshInventoryEvent

: net.Indyuce.mmoitems.api.event
继承: Event
状态: 已弃用 – 请使用ItemEquipEventItemUnequipEvent
描述: 当刷新玩家库存时触发。

使用示例

监听物品掉落事件

@EventHandler
public void onItemDrop(ItemDropEvent event) {
    if (event.getCause() == ItemDropEvent.DropCause.NORMAL_BLOCK) {
        // 处理普通方块掉落
        Block block = event.getMinedBlock();
        // ... 其他逻辑
    }
}

监听物品重铸事件

@EventHandler
public void onReforge(MMOItemReforgeEvent event) {
    if (event.getTypeName().equals("SWORD")) {
        // 只处理剑类物品
        event.setCancelled(true); // 取消重铸
    }
}

监听宝石应用事件

@EventHandler
public void onGemApply(ApplyGemStoneEvent event) {
    if (event.getResult() == GemStone.ResultType.SUCCESS) {
        // 宝石应用成功
        Player player = event.getPlayer();
        // ... 发送消息或其他逻辑
    }
}

监听特殊武器攻击

@EventHandler
public void onSpecialAttack(SpecialWeaponAttackEvent event) {
    Weapon weapon = event.getWeapon();
    LivingEntity target = event.getTarget();
    
    // 检查武器类型
    if (weapon.getType().equals("STAFF")) {
        // 处理法杖攻击
    }
}

注意事项

  1. 弃用事件: 标记为@Deprecated的事件将在未来版本中移除,建议尽快迁移到替代方案
  2. 异步支持: 部分事件可能不支持异步,请查看事件文档说明
  3. 取消事件: 实现Cancellable接口的事件可以被取消,取消后将阻止默认行为
  4. 线程安全: 确保事件处理器是线程安全的,特别是当事件可能从异步上下文触发时

最佳实践

  1. 检查事件类型: 在处理事件前,先检查事件的具体类型和属性
  2. 及时取消: 如果决定取消事件,尽早调用setCancelled(true)
  3. 避免阻塞: 事件处理器应快速执行,避免长时间阻塞
  4. 错误处理: 妥善处理可能出现的异常,避免影响其他插件

版本兼容性

请根据使用的MMOItems版本参考对应的事件API文档。不同版本之间的事件API可能有差异,建议在升级前测试事件处理器的兼容性。