事件接口
以下是本项目中定义的 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 受伤事件,可以修改伤害值、阻止伤害,或执行其他响应逻辑(如无敌状态、反弹伤害等)。