Mini Ghast(迷你幽灵)

事实基准:/Users/evlos/a/mirror/twilightforest(minecraftVersion = 1.7.10)逐行读源码。

基本信息

属性 值 来源
注册实体名 TwilightForest:Mini Ghast TwilightForestMod.java:628-633
英文显示名 Carminite Ghastling(entity.TwilightForest.Mini Ghast.name) assets/twilightforest/lang/en_US.lang:601
实体 ID 常量 idMobMiniGhast = 214 TwilightForestMod.java:1116
蛋色 主 0xbcbcbc / 副 0xa74343 TwilightForestMod.java:632-633
类 twilightforest.entity.EntityTFMiniGhast(155 行) entity/EntityTFMiniGhast.java:14
父类 twilightforest.entity.EntityTFTowerGhast → net.minecraft.entity.monster.EntityGhast entity/EntityTFTowerGhast.java:18
体型 setSize(1.1F, 1.5F)(父类 4.0×6.0) EntityTFMiniGhast.java:20
所属结构 黑暗高塔(TFFeature ID 14),权重 10、1~4 只 TFFeature.java:175

注册名 Mini Ghast 与游戏内显示名 Carminite Ghastling 不一致。 召唤用前者,界面上显示后者。兄弟类 Tower Ghast 同理 (entity.TwilightForest.Tower Ghast.name=Carminite Ghastguard, lang/en_US.lang:602)。中文显示名为 迷你幽灵(lang/zh_CN.lang:601), 也就是说中英文显示名互相不对应。

数值

属性 值 来源
maxHealth(普通) 10 EntityTFMiniGhast.java:43
maxHealth(Boss 随从 isMinion) 6 同上
父类 maxHealth 30(已被本类覆写,不生效) EntityTFTowerGhast.java:63
仇恨半径 aggroRange 16.0F(父类 64.0F) EntityTFMiniGhast.java:23
凝视半径 stareRange 8.0F(父类 32.0F) EntityTFMiniGhast.java:24
游荡幅度 wanderFactor 4.0F(父类 16.0F) EntityTFMiniGhast.java:26
单区块上限 16(父类 8) EntityTFMiniGhast.java:33-35
声音音量 0.5F(父类,本类未覆写) EntityTFTowerGhast.java:69-71
说话间隔 160 tick(父类,本类未覆写) EntityTFTowerGhast.java:76-78
movementSpeed / attackDamage 源码中未设置 —— 检索方式:EntityTFMiniGhast.java 全文无 movementSpeed / attackDamage,EntityTFTowerGhast.java 亦无,沿用 EntityGhast 链上的父类默认 —

AI 行为 / 特殊机制

Boss 随从模式(EntityTFMiniGhast.java:123-128):makeBossMinion() 把 wanderFactor 压到 0.005F(几乎原地不动)、isMinion = true、并回满血。 NBT 键 isMinion 在 writeEntityToNBT / readEntityFromNBT 间持久化 (:141-153),读档时自动重放该模式。

随从不掉落:dropFewItems 被 if (!this.isMinion) 包住(:134-138)。

随从不受光照限制:isValidLightLevel() 在 isMinion 时恒 true(:95-98)。

攻击判定(shouldAttackPlayer,:71-89)三段式,与末影人同类逻辑: ① 玩家头戴南瓜 ⇒ 不打;② 距离 ≤ 3.5 且互相可见 ⇒ 打; ③ 否则算玩家视线向量与「幽灵→玩家眼睛」向量的点积, 大于 1.0 - 0.025 / 距离 才打。

火焰弹:使用父类 spitFireball()(EntityTFTowerGhast.java:289-311), 生成的是原版 EntityLargeFireball,不是暮色森林自有投射物; 从体心 + 视线方向 0.5 格处生成,播放音效 1007(蓄力)/ 1008(发射)。 每次发射后有 1/6 概率主动解除攻击(:308-310)。

塔内束缚(checkForTowerHome,EntityTFTowerGhast.java:421-448): 若不在黑暗高塔区域内则 detachHome() 并 entityAge += 5(快速老化直至死亡); 在塔内则把家设到塔中心 y + 128、半径 64。

「被陷阱困住」:setInTrap() 把 inTrapCounter 设为 10, 期间直接 return,不索敌不攻击(EntityTFTowerGhast.java:150-155、:470-472)。

老化:onLivingUpdate 在亮度 > 0.5 时 entityAge += 2(EntityTFTowerGhast.java:119-121), 并有 50% 概率生成一个 reddust 粒子(:123-132)。

死代码:

  • EntityTFMiniGhast.java:49-63 与 EntityTFTowerGhast.java:90-104 两处按 aggroStatus 切换贴图的 switch 块整段被注释掉,是 1.6 时代遗留的 this.texture = ... 写法。
  • EntityTFTowerGhast.java:52-55 注释掉的 getMaxHealth() { return 30; } 覆写。
  • EntityTFMiniGhast.java:21 注释掉的 towerghast.png 贴图赋值。

相关条目