Appearance
猎人实体
文档版本:基于 2026-06-01 代码分析
面向对象:开发者 | 本文档描述猎人实体的AI配置和渲染技术细节。
概述
逃走中MOD包含两种自定义猎人实体:A型猎人(RfmHunterEntity,可抓捕逃走者)和 B型通报猎人(RfmAnnounceHunterEntity,仅通报不攻击)。两者均继承自 Minecraft 的 Zombie 类,使用自定义 Slim 玩家模型渲染,共享破门 AI(NfaBreakDoorGoal),具有免疫伤害、不可推动、永不下线等特性。
核心概念
两种猎人对比
| 特性 | A型(RfmHunterEntity) | B型(RfmAnnounceHunterEntity) |
|---|---|---|
| 攻击能力 | 有(doHurtTarget调用抓捕逻辑) | 无(doHurtTarget返回false) |
| AI目标 | canBeHunted() 过滤 | canBeAnnounced() 过滤 |
| 通报功能 | 无 | 8格内每500ms发射烟花 |
| 全局冷却 | 抓捕后10秒 | 无 |
| 纹理 | rfm_hunter_cc.png | rfm_hunter_bb.png |
| NBT键 | RfmHunterActive | RfmHunterBActive |
| 生成方式 | 指令/系统逻辑 | 神秘道具/指令 |
架构设计
AI Goal 配置
mermaid
graph TD
subgraph A型["RfmHunterEntity AI"]
A1["优先级1: NfaBreakDoorGoal"]
A2["优先级2: ZombieAttackGoal(速度1.0)"]
A3["优先级6: MoveThroughVillageGoal"]
A4["优先级7: WaterAvoidingRandomStrollGoal"]
AT1["Target1: HurtByTargetGoal"]
AT2["Target2: NearestAttackableTargetGoal(canBeHunted)"]
end
subgraph B型["RfmAnnounceHunterEntity AI"]
B1["优先级1: NfaBreakDoorGoal"]
B2["优先级7: WaterAvoidingRandomStrollGoal"]
BT1["Target1: HurtByTargetGoal"]
BT2["Target2: NearestAttackableTargetGoal(canBeAnnounced)"]
end
A1 --> A2 --> A3 --> A4
AT1 --> AT2
B1 --> B2
BT1 --> BT2关键文件
| 文件 | 说明 |
|---|---|
com/chenxi/chenxi_rfm/common/entity/RfmHunterEntity.java | A型猎人实体 |
com/chenxi/chenxi_rfm/common/entity/RfmAnnounceHunterEntity.java | B型通报猎人实体 |
com/chenxi/chenxi_rfm/common/entity/goal/NfaBreakDoorGoal.java | 自定义破门 AI(100tick=5秒) |
com/chenxi/chenxi_rfm/client/model/entity/RfmHunterSlimModel.java | Slim 玩家模型(64x64纹理) |
com/chenxi/chenxi_rfm/client/render/entity/RfmHunterEntityRenderer.java | A型渲染器 |
com/chenxi/chenxi_rfm/client/render/entity/RfmAnnounceHunterEntityRenderer.java | B型渲染器 |
com/chenxi/chenxi_rfm/common/registry/ModEntityTypes.java | 实体类型注册 |
关键流程
NfaBreakDoorGoal(破门 AI)
- 检测导航路径前方是否有关闭的
DoorBlock - 检查是否有替代路径绕过门
- 无替代路径 → 开始破坏(100 tick = 5 秒)
- 破坏期间播放破坏动画和敲击音效
- 完成后
removeBlock移除门的上半和下半
实体属性
| 属性 | 值 | 说明 |
|---|---|---|
| FOLLOW_RANGE | 64.0 | 极远的索敌范围 |
| MOVEMENT_SPEED | 0.28 | 略快于普通僵尸(0.23) |
| 伤害免疫 | hurt() 返回 false | 完全免疫所有伤害 |
| 推动免疫 | isPushable() 返回 false | 不可被推动 |
| 自然消失 | removeWhenFarAway() 返回 false | 永不自动消失 |
| 和平模式 | shouldDespawnInPeaceful() 返回 false | 和平模式不消失 |
| 音效 | 全部返回 null | 完全静音 |
| 阳光敏感 | isSunSensitive() 返回 false | 白天不燃烧 |
渲染
- 模型:
RfmHunterSlimModel(继承PlayerModel,slim 臂) - 盔甲层:
HumanoidArmorLayer(inner + outer slim 盔甲) - 阴影半径:0.5F
- 无 ear/cloak 部件
注意事项
- 两个实体共享相同的 Slim 模型,仅纹理不同
- A 型猎人的攻击不造成伤害,而是触发抓捕逻辑
- 猎人实体需
setChunkForced(true)保证区块加载 - B 型猎人的烟花通报仅在距离 ≤ 8 格时触发
- 实体管理器每 tick 遍历并重新寻的