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— 可通行节点判定
相关条目
- Guardian Spawn Egg - 本实体的刷怪蛋
- Ocean Monument - 本实体的生成场所
- Prismarine Shard - 唯一掉落物