跳到正文
烈焰甘蔗Wiki

Cloud in a Bottle Entity

云瓶投掷实体,继承自 EntityThrowable。

基本属性

属性 值
父类 EntityThrowable
注册名 chisel.CloudInABottle(Features.java:745)
物品来源 ItemCloudInABottle
随机生成器 Random rand 字段(EntityCloudInABottle.java:14)
追踪距离 / 更新频率 40 / 1(Features.java:745)
可被追踪 true

碰撞行为

onImpact 处理碰撞:

  1. 获取碰撞坐标 (x, y, z)
  2. 根据碰撞面 (sideHit) 调整目标坐标
  3. 调用 generate(world, rand, x, y, z, 40) 生成云
  4. 播放粒子特效 (AuxSFX 2002)
  5. 设置实体为 dead

云生成算法

generate(world, random, gx, gy, gz, numberOfBlocks)(EntityCloudInABottle.java:56-95):

  • 定义 9 个方向槽位 X[9] / Y[9] / Z[9],均初始化为落点(:57-64)
  • 外层 while (count < numberOfBlocks) 循环,内层遍历 9 个方向 (:65-70)——原文"9 个方向向量"正确
  • 每方向位移:dx = dir % 3 - 1、dz = dir / 3 - 1,跳过 (0,0) (:71-74),再叠加随机抖动 random.nextInt(3) - 1
  • 生成的方块是 chisel:cloud(:87),原文只说"云方块",已补注册名
  • 落点条件:目标格必须是空气,且曼哈顿距离 < 4 + random.nextInt(2) (:80-86)

已订正:原文"循环生成方块,最多 numberOfBlocks 个 / 随机扩散分布"方向正确, 但未说明方块为 chisel:cloud、也未说明只在空气格生成—— 这两点决定了实际可用范围(不能覆盖实体方块)。已补齐。

另:onImpact 开头 if (worldObj.isRemote) return;(:28), 坐标修正、云生成、playAuxSFX 全部只在服务端执行。

生成方式

ItemCloudInABottle.onItemRightClick 中通过 world.spawnEntityInWorld(new EntityCloudInABottle(world, player)) 在服务端生成 (ItemCloudInABottle.java:28-30)。

浏览全部模组