事件接口
以下是本项目中定义的 NPC 事件(NpcEvent) 的详细说明,包括每种事件的用途和触发条件。
总结
事件名称 | 触发条件 | 是否可取消 | 典型用途 |
---|---|---|---|
CreateEvent | NPC 创建 | 否 | 初始化、日志记录 |
JoinEvent | NPC 加入世界 | 否 | 加载数据、绑定行为 |
DeathEvent | NPC 死亡 | 是 | 自定义死亡逻辑、防止死亡 |
InteractEvent | 玩家与 NPC 交互 | 是 | 对话、任务触发、UI 打开 |
DamageEvent | NPC 受到伤害 | 是 | 控制伤害、无敌机制、反弹伤害 |
TickEvent | 每个游戏 Tick | 否 | 定期更新、AI 行为、状态维护 |
这些事件提供了一个完整的 NPC 生命周期监听机制,开发者可以通过监听并处理这些事件来实现复杂的 NPC 行为逻辑和互动功能。
NpcEvent.CreateEvent
触发时机
当一个 NPC 被创建时。
用途
用于监听 NPC 创建事件。可以在此事件中添加初始化逻辑或日志记录。
字段
NpcEvent.JoinEvent
触发时机
当一个 NPC 加入到服务器世界中时。
用途
用于监听 NPC 进入世界的事件,例如加载 NPC 数据、注册额外行为等。
字段
- entity: 加入世界的 NPC 实体。
- view: 对应的 NpcView 对象。
- level: 当前所在的服务器世界对象 (ServerLevel)。
NpcEvent.DeathEvent
触发时机
当一个 NPC 死亡时(受到伤害导致生命值归零)。
用途
用于监听 NPC 死亡事件,可以取消死亡逻辑,或者执行自定义死亡行为(如掉落物品、播放音效等)。
字段
- entity: 死亡的 NPC 实体。
- view: 对应的 NpcView 对象。
- source: 导致死亡的伤害来源(DamageSource)。
特性
实现了 ICancellableEvent 接口,可被取消:
- 如果事件被取消,则不会真正死亡,并恢复实体生命值至 1.0F。
NpcEvent.InteractEvent
触发时机
当玩家与 NPC 交互时(如右键点击)。
用途
用于监听玩家与 NPC 的交互操作,例如打开对话框、触发任务等。
字段
该事件默认会阻止原版交互行为(通过
event.setCanceled(true)
),防止玩家误操作原版实体行为。
NpcEvent.DamageEvent
触发时机
当 NPC 受到伤害时。
用途
用于监听 NPC 受伤事件,可以修改伤害值、阻止伤害,或执行其他响应逻辑(如无敌状态、反弹伤害等)。
字段
- entity: 受伤的 NPC 实体。
- view: 对应的 NpcView 对象。
- source: 造成伤害的来源(DamageSource)。
- amount: 初始伤害值(可修改)。
- container: 包含伤害处理细节的对象(如是否忽略护甲等)。
特性
实现了 ICancellableEvent 接口,可被取消:
- 如果事件被取消,则不产生实际伤害。
- 同时允许通过 setAmount(float amount) 修改最终伤害值。
NpcEvent.TickEvent
触发时机
每个游戏 Tick(即每一刻游戏时间)都会触发一次。
用途
用于监听 NPC 的持续行为更新,比如 AI 行为控制、定时逻辑、状态检查等。
字段
该事件适合用来实现周期性任务或状态更新,例如自动巡逻、定时对话、血量恢复等。