Tiny Bird(微小鸟)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:Tiny Bird TwilightForestMod.java:522-526
实体 ID 常量 idMobTinyBird = 194 TwilightForestMod.java:1097
蛋色 主 0x33aadd / 副 0x1188ee TwilightForestMod.java:525-526
注册形式 TFCreatures.registerTFCreature → 追踪 80 / 更新 3 TFCreatures.java:23、TwilightForestMod.java:522
类 twilightforest.entity.passive.EntityTFTinyBird(349 行) entity/passive/EntityTFTinyBird.java:26
父类 twilightforest.entity.passive.EntityTFBird → net.minecraft.entity.passive.EntityAnimal 同上 :26、entity/passive/EntityTFBird.java:8
体型 setSize(0.5F, 0.9F) EntityTFTinyBird.java:45
所属结构 不属于任何结构,仅在暮色森林基础群系刷怪表,权重 15、4~8 只 biomes/TFBiomeBase.java:121

数值

属性 值 来源
maxHealth 1.0 EntityTFTinyBird.java:77
movementSpeed 0.20000001192092896 同上 :78
getRenderSizeModifier 0.3F 同上 :161
颜色类型 构造时 rand.nextInt(4),对应 4 张渲染贴图 同上 :59、client/renderer/entity/RenderTFTinyBird.java:30-37
寻路权重 leaves 200.0F 同上 :180-182
寻路权重 wood 15.0F 同上 :183-185
寻路权重 grass 9.0F 同上 :186-188
其它方块寻路权重 getLightBrightness - 0.5F 同上 :190
起飞概率(站着时) rand.nextInt(200) == 0 同上 :224
降落概率(飞行中) rand.nextInt(10) == 0 同上 :280
飞行目标盒 水平 ±6 格、垂直 −2 ~ +4 格 同上 :263-266
飞行时垂直阻尼 motionY *= 0.6 同上 :213
惊飞掉落冷却 20 000 ms 同上 :30、:239
DataWatcher 索引 DATA_BIRDTYPE = 16、DATA_BIRDFLAGS = 17 同上 :28-29、:67-68
追踪距离 / 更新频率 80 / 3 TFCreatures.java:23

继承:坠落伤害免疫 —— 父类 EntityTFBird.fall(float) 方法体为空 (EntityTFBird.java:71-72),可从任意高度落下。 attackDamage:本类无 attackDamage 设置,也无任何攻击 AI,不列。

AI 行为 / 特殊机制

任务表(:52-56):0 EntityAITFBirdFly;1 EntityAITempt(1.0F, Items.wheat_seeds, true); 2 EntityAIWander(1.0F);3 EntityAIWatchClosest(EntityPlayer, 6F);4 EntityAILookIdle。

飞行是自写的:EntityAITFBirdFly 只是触发器,真正的飞行逻辑在覆写的 updateAITasks() 里(:218-293)—— 停栖时按 1/200 概率起飞;飞行时以 1/30 概率或 接近目标(距离平方 < 4.0)时重选 currentFlightTarget,再按 (signum(d) × 系数 - motion) × 0.1 三轴收敛(:258-278)。飞行中每 tick motionY *= 0.6 使其趋于水平(:212-214)。

会被吓飞:isSpooked() —— hurtTime > 0,或 4 格内玩家手持的不是 wheat_seeds (空手也算吓跑)(:298-303)。被吓飞时 motionY = 0.4 并播放音效 1015(:233-237)。

⚠️ 本体的惊飞掉落是 null:getSpookedDrop() 直接 return null(:344-348), 所以 Tiny Bird 被吓飞什么也不掉。只有子类 EntityTFRaven 覆写为 20% 概率掉 1 个 TFItems.feather(entity/passive/EntityTFRaven.java:110-112)。 20 秒冷却用 System.currentTimeMillis() 而非游戏时间,源码注释说明是为了防止 读档刷新掉落(EntityTFTinyBird.java:38、:239-245)。

颜色持久化:NBT 键 BirdType(:109-122),渲染端 0 = 麻雀、1 = 蓝知更鸟、 2 = 北美红雀、3 = 苍头白斑鹀(RenderTFTinyBird.java:30-37)。

完全不可推动:canBePushed() 返回 false,collideWithEntity(Entity) 与 func_85033_bc() 都覆写为空方法体(:332-341)—— 不会被推挤、也不会推动别人。 canDespawn() 返回 false,永不消失(:167-170)。

落点判定:isLandableBlock 要求非空气,且是树叶或顶面实心方块(:305-316)。

声音:TwilightForest:mob.tinybird.chirp / mob.tinybird.hurt / 死亡声复用 mob.tinybird.hurt(:132-154)。

成就:暮色森林维度内被玩家击杀触发 twilightHunter(:196-203)。

子类:EntityTFRaven extends EntityTFTinyBird,已单独注册为独立的实体 (TwilightForestMod.java:540),不计入本条目。

相关条目