Questing Ram(谜题羊)
事实基准:
/Users/evlos/a/mirror/twilightforest(minecraftVersion = 1.7.10)逐行读源码。
基本信息
| 属性 | 值 | 来源 |
|---|---|---|
| 注册实体名 | TwilightForest:Questing Ram |
TwilightForestMod.java:545-548 |
| 实体 ID 常量 | idMobQuestRam = 198 |
TwilightForestMod.java:1101 |
| 蛋色 | 无 | 走 3 参数重载 TFCreatures.java:44-50,不写 entityEggs |
| 刷怪蛋 | 无 | 同上 |
| 类 | twilightforest.entity.passive.EntityTFQuestRam(382 行) |
entity/passive/EntityTFQuestRam.java:31 |
| 父类 | net.minecraft.entity.passive.EntityAnimal(不是 EntitySheep) |
EntityTFQuestRam.java:31 |
| 体型 | setSize(1.25F, 2.9F) |
EntityTFQuestRam.java:38 |
| 所属结构 | 试炼林 / Quest Grove(TFFeature ID 9) |
structures/ComponentTFQuestGrove.java:96 |
走的是
registerTFCreature(Class, String, int)三参数重载,该重载不写entityEggs(TFCreatures.java:44-50),所以没有刷怪蛋, 只能靠试炼林结构生成。同批走三参数重载的还有 Lich Minion、Upper Goblin Knight、 Loyal Zombie。
数值
| 属性 | 值 | 来源 |
|---|---|---|
maxHealth |
70.0 | EntityTFQuestRam.java:63 |
movementSpeed |
0.23000000417232513 | EntityTFQuestRam.java:64 |
| 染色上限 | 16 种颜色 | EntityTFQuestRam.java:314 |
| 完成阈值 | countColorsSet() > 15(即 16 种全齐) |
EntityTFQuestRam.java:118、:210 |
| 领地半径 | setHomeArea(..., 13) |
EntityTFQuestRam.java:112 |
| 领地铁块采样间隔 | 70 + rand.nextInt(50) tick |
EntityTFQuestRam.java:96 |
| 声音音量 | 5.0F(极大) | EntityTFQuestRam.java:335-337 |
| 惊吓逃跑速度 | 1.38F | EntityTFQuestRam.java:43 |
canDespawn() |
恒 false —— 永不消失 |
EntityTFQuestRam.java:85-88 |
attackDamage |
被动生物,源码中未设置,沿用 EntityAnimal 链上的父类默认 |
— |
AI 行为 / 特殊机制
染色任务:手持未染过该色的羊毛右键即可为它上色
(interact,:161-187)。isColorPresent / setColorPresent 用一个
int 的第 0~15 位做位掩码,存于 dataWatcher 索引 16;
是否已发过奖励存于索引 17(:67-72)。成功染色时
animateAddColor(damage, 50) 生成 50 个对应羊毛颜色的 mobSpell 粒子并
播放羊叫(:169-170、:289-305)。创造模式玩家不消耗羊毛(:172-178)。
完成奖励(rewardQuest,:129-141):集齐 16 色后
① 各掉 1 个钻石块、铁块、绿宝石块、金块、青金石块;
② 掉 1 个 TFItems.crumbleHorn;
③ 掉 1 个 trophy,元数据 8(new ItemStack(TFItems.trophy, 1, 8))。
奖励只发一次(setRewarded(true),:120),Rewarded 与 ColorFlags
都写进 NBT(:218-233)。
成就:16 格范围内的玩家全部获得 twilightQuestRam
(成就名「Consumate Baaahs」,rewardNearbyPlayers,:146-156;
lang/en_US.lang:665-666)。
自带采食 AI:优先级 3 EntityAITFEatLoose(吃地上的掉落羊毛)、
优先级 4 EntityAITFFindLoose(捡掉落羊毛),都指向 Blocks.wool
(:45-46)—— 所以地上有散落的羊毛时它会自己走过去吃。
未奖励时的炫彩:每 tick 若已集齐但未发奖,就随机挑一个颜色撒 5 个
mobSpell 粒子(checkAndAnimateColors,:209-213)。
回不了家就游荡:updateAITick 周期性检查最近的 TFFeature,
不是 questGrove 就 detachHome()(:98-115)——
被带离试炼林后不再固守,但也因为 canDespawn() == false 而永不消失。
死代码:
EntityTFQuestRam.java:48注释掉的// this.tasks.addTask(4, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));—— 本类不注视玩家。EntityTFQuestRam.java:167-168、:180-182注释掉的bucketMilk交换分支与调试输出。EntityTFQuestRam.java:197-202整段注释掉的onLivingUpdate粒子代码。EntityTFQuestRam.java:23-24、:114、:262-265多处注释掉的调试输出。- 三个未实现的
createChild返回null(:52-55)—— 不能繁殖。
相关条目
- Crumble Horn(粉碎号角) - 完成任务的奖励之一
- Trophy(暮色森林奖杯) - 完成任务掉落,元数据 8