跳到正文
烈焰甘蔗Wiki

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 / 网络注册名。原文未给注册名,此处明确标注。

行为

  1. 初始状态:lightningState = 2;boltLivingTime = rand.nextInt(3) + 1(即 1-3)(:19-22)
  2. 更新(onUpdate,:25-56):
    • 每 tick lightningState--
    • 若 lightningState < 0:
      • boltLivingTime == 0 → setDead() 死亡
      • 否则若 lightningState < -rand.nextInt(10):boltLivingTime--、lightningState = 1、重置 boltVertex
  3. 生火(:38-49):仅服务端,且要求 doChunksNearChunkExist(..., 10) 为真时,在闪电所在格放置 Blocks.fire
  4. 客户端: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 个效果)
浏览全部模组