Guardian

基本信息

属性 值
注册名 VillageNames:Guardian(Reference.MOB_GUARDIAN_VN,utility/Reference.java)
显示名 Guardian(en_US.lang:117)
类 astrotibs.villagenames.prismarine.entity.monster.EntityGuardian
注册处 VillageNames.java:585(EntityRegistry.registerModEntity)
注册条件 GeneralConfig.addOceanMonuments == true
追踪 ID 0(entityIDs 从 0 起始自增)
追踪范围 64
更新频率 3
可生成刷怪蛋 是(registerModEntity 最后一参为 true)

功能

Guardian(守卫者)是 1.8 海洋更新的水下敌对生物移植版,由本 mod 在 Ocean Monument 中生成。

⚠️ 源码中 EntityElderGuardian 类并不存在。Reference.ELDER_GUARDIAN_CLASS(utility/Reference.java)指向的 astrotibs.villagenames.prismarine.guardian.entity.monster.EntityElderGuardian 是一个伪造的类路径——注释写明这是为了让命名系统在前 1.11 版本中区分老年变体而硬编码的(1.11 之前老年守卫者与普通守卫者是同一个类,只靠一个 Elder 标志区分)。find . -name 'EntityElderGuardian.java' 无匹配。

因此老年守卫者是同一个 EntityGuardian 类 + Elder:1 标志,而非独立注册实体。调试用生成指令见 VillageNames.java:78:summon Guardian ~ ~ ~ {Elder:1}。

数值

普通变体

属性 值 来源
最大生命值 30.0 prismarine/guardian/entity/monster/EntityGuardian.java:94
攻击伤害 6.0 :92
移动速度 0.5 :93
追踪范围 16.0 :93
经验值 10 :70
碰撞箱 0.85 × 0.85(setSize(0.85F, 0.85F)) :69
实体大小 1 格宽 派生自碰撞箱

老年变体(Elder:1)

老年状态由 setElder(boolean) 覆写属性(prismarine/guardian/entity/monster/EntityGuardian.java:171-184):

属性 值 相对普通
最大生命值 80.0 2.67×
攻击伤害 8.0 +2.0
移动速度 0.30000001192092896 更慢(普通 0.5)
碰撞箱 1.9975 × 1.9975(约 2 格) 2.35×
游荡概率 wander.setExecutionChance(400) 高频游荡
持久化 开启(func_110163_bv(),等价 1.8 的 enablePersistence()) 老年不会消失

同时老年状态会通过 dataWatcher 标志位 4 同步(setSyncedFlag(4, elder),:173),使客户端可据此切换尖刺动画(clientSideSpikesAnimation = 1.0F,:189)。

掉落

dropFewItems 掉落 Prismarine Shard,数量为:

int num_prismarine_shards = this.rand.nextInt(3) + this.rand.nextInt(looting + 1);

(prismarine/guardian/entity/monster/EntityGuardian.java:679-680)

时运 掉落范围
0 0~2 个(可能为 0)
3 0~5 个

⚠️ 该式可得到 0,且 if (num_prismarine_shards > 0) 才掉落(:680)。源码注释提到本方法复刻 1.8 的 addRandomDrop()(:718)。

掉落物本体通过 prismarineItem 变量取得(可被其他 mod 的海晶物品替换),而非硬编码。

AI 行为

构造函数注册的任务(prismarine/guardian/entity/monster/EntityGuardian.java:67-85):

优先级 任务
4 AIGuardianAttack(守卫者攻击)
5 EntityAIMoveTowardsRestriction(1.0D)(限制区移动)
7 EntityAIWanderExtender(1.0D, 80)(游荡,mutex 3)
8 EntityAIWatchClosest(EntityPlayer, 8.0F)
8 EntityAIWatchClosest(EntityGuardian, 12.0F, 0.01F)
9 EntityAILookIdle

目标选择(targetTasks):优先级 1,EntityAINearestAttackableTarget(EntityLivingBase, 10, true, false, GuardianTargetSelector),即 10 格内以 EntityLivingBase 为目标。

游泳寻路

守卫者使用专用的水下寻路,而非原版陆地方寻路(prismarine/guardian/entity/pathfinding/ 目录):

  • PathNavigateSwimmer — 水下导航器
  • PathFinderSwimmer / PathSwimmer / PathEntitySwimmer / PathPointSwimmer — 寻路实现
  • NodeProcessor / SwimNodeProcessor — 可通行节点判定

相关条目