tfmoonwormshot(月光蠕虫弹)

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

基本信息

属性 值 来源
注册实体名 TwilightForest:tfmoonwormshot(全小写无空格,内部名) TwilightForestMod.java:825-832
实体 ID 常量 idVehicleSpawnMoonwormShot = 7 TwilightForestMod.java:185
注册形式 EntityRegistry.registerModEntity 直调,不经 TFCreatures TwilightForestMod.java:825
追踪距离 / 更新频率 / 速度同步 150 / 3 / true TwilightForestMod.java:830-832
刷怪蛋 无 直调注册不进 TFCreatures.entityEggs
类 twilightforest.entity.EntityTFMoonwormShot(144 行) entity/EntityTFMoonwormShot.java:17
父类 net.minecraft.entity.projectile.EntityThrowable 同上 :17
渲染 RenderTFMoonwormShot(自写渲染器) client/TFClientProxy.java:315
发射者 月光蠕虫女王物品 item/ItemTFMoonwormQueen.java:133
所属结构 不属于任何结构,由玩家使用 TwilightForest:moonwormQueen 主动发射 ItemTFMoonwormQueen.java:133

注册名 tfmoonwormshot 是 mod-spawn 内部名,没有语言文件条目 (lang/en_US.lang 中检索不到该键),所以在游戏里看不到它的名字。 同族的还有 tfnaturebolt、tflichbolt、tftwilightwandbolt、tftomebolt、 tfhydramortar、tflichbomb、tfslimeblob、tfcharmeffect。

数值

属性 值 来源
初速 func_40077_c 0.5F EntityTFMoonwormShot.java:37-39
重力 getGravityVelocity 0.03F EntityTFMoonwormShot.java:96-98
碰撞边界 getCollisionBorderSize 1.0F EntityTFMoonwormShot.java:88-90
实体伤害 0(onImpact 里显式传 0) EntityTFMoonwormShot.java:125
命中方块 调用 TFItems.moonwormQueen.onItemUse(...) 生成月光蠕虫 EntityTFMoonwormShot.java:107-117
命中粒子 blockcrack_<moonworm>_0 × 8,速度全 0 EntityTFMoonwormShot.java:128-137
亮度 getBrightness 恒 1.0F;渲染亮度 15728880 EntityTFMoonwormShot.java:52-60
maxHealth / 伤害 / 速度属性 不适用 —— EntityThrowable 系无 applyEntityAttributes;本类全文无属性设置 —

AI 行为 / 特殊机制

本体零 AI:没有 AI 任务、没有生命值、没有碰撞体积以外的交互; 唯一的逻辑是 onUpdate 调 makeTrail()(:41-46)与 onImpact。

可被玩家攻击与反射:canBeCollidedWith() 返回 true(:79-82), getCollisionBorderSize() 提到 1.0F(比默认 0.0 大得多,prime() 反射机制 依赖它)—— 源码注释明写「需要这样设置玩家才能攻击并反射这发弹」(:84-86)。

命中处理(onImpact,:100-142):

  • 命中方块(MovingObjectType.BLOCK)且在服务端 ⇒ 调用 TFItems.moonwormQueen.onItemUse(null, (EntityPlayer) getThrower(), ...) 把弹着点当作玩家右键使用月光蠕虫女王,在墙上/地上种出月光蠕虫(:105-117)。 ⚠️ getThrower() 被无检查强转成 EntityPlayer —— 若发射者不是玩家会抛 ClassCastException;实践中该弹只由 ItemTFMoonwormQueen(玩家触发)发射。
  • 命中实体 ⇒ 造成 0 点 causeThrownDamage(:124-126)。本弹不伤人。
  • 无论命中什么都撒 8 个月光蠕虫方块碎屑粒子,然后服务端 setDead()(:128-141)。

死代码:makeTrail()(:62-74)整个方法体被注释掉, 方法保留空壳,方法上的 javadoc 也相应为空 —— 飞行途中没有任何拖尾粒子, 只有撞击瞬间的 8 粒方块碎屑。另外三个构造函数里各有一行 // TODO Auto-generated constructor stub(:21、:26、:31)未清理。

客户端分支是空的:onImpact 的 else 分支(worldObj.isRemote 为真时) 只有一句注释 // particles(:118-121)—— 客户端不做任何事。

相关条目