Charm Effect(护符特效实体)

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

基本信息

属性 值 来源
注册名 TwilightForest:tfcharmeffect TwilightForestMod.java:843
实体 ID 常量 idVehicleSpawnCharmEffect = 9 TwilightForestMod.java:187
注册形式 EntityRegistry.registerModEntity 直调(无刷怪蛋) TwilightForestMod.java:841-848
跟踪距离 / 更新频率 80 / 3 TwilightForestMod.java:846-847
类 twilightforest.entity.EntityTFCharmEffect(222 行) entity/EntityTFCharmEffect.java:16
父类 net.minecraft.entity.item.EntityItem EntityTFCharmEffect.java:16
体型 setSize(0.25F, 0.25F) EntityTFCharmEffect.java:33
生成方 TFEventListener(护符生效时) TFEventListener.java:441-451, 705-715

继承 EntityItem(掉落物实体)是为了复用物品渲染与 iconcrack_ 粒子 —— 但本类把所有「掉落物」行为都禁掉了(见下)。

数值

属性 值 来源
环绕半径 DISTANCE 1.0 格 EntityTFCharmEffect.java:20
存活时长 ticksExisted > 200(约 10 秒)后自毁 EntityTFCharmEffect.java:119-121
环绕角速度 ticksExisted / 5.0 + offset(弧度) EntityTFCharmEffect.java:88
上下浮动 sin(ticksExisted / 3.0 + offset) / 8 EntityTFCharmEffect.java:105
每 tick 粒子数 3 个 iconcrack_<物品ID> EntityTFCharmEffect.java:110-116
粒子散布范围 各轴 ±0.125 格 EntityTFCharmEffect.java:111-113
DataWatcher 键 DATA_ITEMID = 16、DATA_OWNER = 17 EntityTFCharmEffect.java:18-19

特殊机制

环绕所有者

onUpdate(EntityTFCharmEffect.java:69-122)每 tick 把实体挪到所有者 (orbiting,玩家)眼睛高度 -0.5 的位置,再按环绕角偏移 1 格。 所有者名字存在 DataWatcher 的 DATA_OWNER(字符串),用 worldObj.getPlayerEntityByName 反查(EntityTFCharmEffect.java:144-154)。 所有者死亡或找不到时立即自毁(第 119 行)。

全部掉落物行为被禁用

覆写 行为 来源
onCollideWithPlayer 空实现 —— 玩家捡不起来 EntityTFCharmEffect.java:185-187
combineItems 恒 false —— 不与地上的物品堆叠 EntityTFCharmEffect.java:193-196
handleWaterMovement 恒 false —— 不受水影响 EntityTFCharmEffect.java:201-204
dealFireDamage 空实现 —— 不会被烧毁 EntityTFCharmEffect.java:210-212
attackEntityFrom 恒 false —— 完全无敌 EntityTFCharmEffect.java:217-220

NBT 读写疑似颠倒

readEntityFromNBT 与 writeEntityToNBT 的实现互为镜像但方向反了 (EntityTFCharmEffect.java:169-180):readEntityFromNBT 调用的 getOwnerName() / getItemID() 在读取前仍是默认值(空串 / 0), 然后把默认值写回传入的 compound;writeEntityToNBT 则在 super.writeEntityToNBT 之前用 compound 的值覆写 DataWatcher。 两者的赋值方向与常规写法相反 —— 记录此事实,运行时后果未核实 (源码树内无法验证:需要实际存档 + 实体加载)。

相关条目