EntityBeeLightning
包: binnie.extrabees.genetics.effect
继承: net.minecraft.entity.effect.EntityLightningBolt
注册名: 无(不通过 EntityRegistry 注册,见下)
功能
EntityBeeLightning(binnie/extrabees/genetics/effect/EntityBeeLightning.java:12)是蜜蜂基因突变等位基因 LIGHTNING 的世界效果实现。
⚠️ 已订正(语义写反 + 触发条件错误):原文称「代表当蜜蜂被闪电击中时产生的视觉效果和生物效应」「当蜜蜂(Bee)被闪电击中时生成此实体」。完全说反了。源码事实:
- 本实体不是蜜蜂身上的效果,而是
IAlleleBeeEffect(蜜蜂基因的「效果」等位基因)作用于世界方块时产生的天气效果。- 触发点在
binnie/extrabees/genetics/effect/ExtraBeesEffect.java:case LIGHTNING: // :215-217,枚举常量在 :47 onLightingEffect(world, x, y, z); break; ... private void onLightingEffect(World world, int x, int y, int z) { // :290 if (world.rand.nextInt(100) < 1 && world.canBlockSeeTheSky(x, y, z) && world instanceof WorldServer) { world.addWeatherEffect(new EntityBeeLightning(world, x, y, z)); } }- 即:1% 概率(
rand.nextInt(100) < 1)、该方块必须能看见天空、仅服务端才会生成。原文完全没提这三个条件。- 也不存在「蜜蜂被闪电击中」这条代码路径。
⚠️ 已订正(未注册):全 Binnie 源码没有任何
registerEntity调用(grep registerEntity binnie/无结果)。本类直接new后经world.addWeatherEffect(...)加入世界,作为普通天气实体存在,因此没有 entity ID / 网络注册名。原文未给注册名,此处明确标注。
行为
- 初始状态:
lightningState = 2;boltLivingTime = rand.nextInt(3) + 1(即 1-3)(:19-22) - 更新(
onUpdate,:25-56):- 每 tick
lightningState-- - 若
lightningState < 0:boltLivingTime == 0→setDead()死亡- 否则若
lightningState < -rand.nextInt(10):boltLivingTime--、lightningState = 1、重置boltVertex
- 每 tick
- 生火(
:38-49):仅服务端,且要求doChunksNearChunkExist(..., 10)为真时,在闪电所在格放置Blocks.fire - 客户端:
worldObj.lastLightningBolt = 2(:58-60)
⚠️ 已订正(更新逻辑描述):原文第 3 条写「当
lightningState < 0且boltLivingTime > 0时」,与源码的if (boltLivingTime == 0) setDead(); else if (...)分支结构不符(源码判断的是等于 0 就死,不是「> 0 才继续」)。已按实际分支重写。
碰撞检测
⚠️ 已订正(范围算错,且原文算式自相矛盾):原文写「边长 6 + 2×3 = 6 的立方体区域(offset = 3.0)」——
6 + 2×3 = 12而非 6,原文自己的算式就不成立,且形状不是立方体。
源码(:61-70)offset = 3.0,AABB 为:
x: posX - 3.0 .. posX + 3.0 → 宽 6.0
z: posZ - 3.0 .. posZ + 3.0 → 深 6.0
y: posY - 3.0 .. posY + 6.0 + 3.0 → 高 12.0
即 6 × 12 × 6(X × Y × Z)——Y 轴向上多出 6 格的柱体(这是原版 EntityLightningBolt 判定地面受击的形状)。区域内每个实体调用 entity.onStruckByLightning(this)(:71-72),且该逻辑仅在 lightningState >= 0 时执行(服务端分支,lightningState 初值 2,故头 3 tick 有效)。
源码引用
binnie/extrabees/genetics/effect/EntityBeeLightning.java- 触发点:
binnie/extrabees/genetics/effect/ExtraBeesEffect.java:215-217, 290-295 - 等位基因枚举:
ExtraBeesEffect.java:42-68(常量LIGHTNING在:47,共 25 个效果)