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 处理碰撞:
- 获取碰撞坐标 (x, y, z)
- 根据碰撞面 (sideHit) 调整目标坐标
- 调用
generate(world, rand, x, y, z, 40)生成云 - 播放粒子特效 (AuxSFX 2002)
- 设置实体为 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)。