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)—— 客户端不做任何事。
相关条目
- Moonworm(月光蠕虫) - 命中时生成的方块,本弹的粒子贴图来源
- Moonworm Queen(月光蠕虫女王) - 唯一的发射来源