Firefly(萤火虫)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:Firefly TwilightForestMod.java:622-627
实体 ID 常量 idMobFirefly = 213 TwilightForestMod.java:1115
蛋色 主 0xa4d316 / 副 0xbaee02(主色与 Naga 蛋相同) TwilightForestMod.java:626-627
类 twilightforest.entity.passive.EntityTFMobileFirefly(185 行) entity/passive/EntityTFMobileFirefly.java:13
父类 net.minecraft.entity.passive.EntityAmbientCreature 同上 :13
体型 setSize(0.5F, 0.5F) EntityTFMobileFirefly.java:23
所属结构 不属于任何结构 —— 位于洞穴生物刷怪表(spawnableCaveCreatureList),权重 10、8~8 只 biomes/TFBiomeBase.java:138

「Firefly」在本模组里是实体;tile.TFFirefly.name=Firefly(lang/en_US.lang:104) 是火萤石方块,两者同名但不是同一个东西。另有 Firefly Jar(萤火虫罐) 方块作为装饰与光源。

数值

属性 值 来源
maxHealth 6.0 EntityTFMobileFirefly.java:74
垂直速度每 tick 衰减 motionY *= 0.6 EntityTFMobileFirefly.java:92
飞行插值速度 speed 0.05 EntityTFMobileFirefly.java:117
水平插值上限 signum * 0.5 EntityTFMobileFirefly.java:118、:120
垂直插值上限 signum * 0.7,且速度是水平的 2 倍 EntityTFMobileFirefly.java:119
前移量 moveForward 0.5F EntityTFMobileFirefly.java:123
游荡目标重选概率 rand.nextInt(30) == 0(1/30 每 tick) EntityTFMobileFirefly.java:105
游荡目标盒 自身周围 7×6×7,Y 偏移 −2~+4 EntityTFMobileFirefly.java:108-111
目标失效判定 目标格非空气,或 posY < 1 EntityTFMobileFirefly.java:99-103
刷怪高度上限 minY >= 63 直接拒绝 EntityTFMobileFirefly.java:164-165
刷怪方块光上限 <= rand.nextInt(4) EntityTFMobileFirefly.java:170-172
声音音量 0.1F EntityTFMobileFirefly.java:31
movementSpeed / attackDamage 源码中未设置 —— 检索方式:本类 applyEntityAttributes 只动 maxHealth(:71-75),沿用 EntityAmbientCreature / EntityBat 链上的父类默认 —

AI 行为 / 特殊机制

手写飞行 AI(EntityTFMobileFirefly.java:95-125):本类没有用任何 EntityAI* 任务,而是在 updateAITasks 里自己维护 currentFlightTarget(一个 ChunkCoordinates)。目标失效即重选; 距离目标平方 < 4.0 也提前重选(:105-107)。用 Math.signum 做 分段线性插值驱向目标,并按 atan2(motionZ, motionX) 反算朝向(:121-124)。 注意:currentFlightTarget 初始化为 null(:19),且从不写入 NBT, 所以读档后第一 tick 会重新选点。

重力豁免:onUpdate 每 tick 把 motionY 乘 0.6(:92)压制下沉; fall 与 updateFallState 都被覆写为空方法(:139-147)—— 不产生任何坠落伤害、不更新 fallDistance。

碰撞与触发器:canBePushed() 返回 false(:62-64)、 collideWithEntity 空实现(:66)、canTriggerWalking() 返回 false(:132-134)、 doesEntityNotTriggerPressurePlate() 返回 true(:153-155)—— 既不推挤其他生物,也不触发压力板 / 绊线 / 破坏农作物。

发光:getGlowBrightness() 返回 sin(ticksExisted / 7.0) + 1F(:182-184), 客户端 getBrightnessForRender 恒返回满亮度 15728880(:176-180)。

声音:getSoundPitch 在父类基础上再乘 0.95(:37-40), 受伤 / 死亡复用蝙蝠音效 mob.bat.hurt / mob.bat.death(:45-57)。

无掉落覆写:本类没有 getDropItem / dropFewItems, 死亡掉落完全由 EntityAmbientCreature 链决定,本源码内无法核实具体物品。

相关条目