Cloud in a Bottle
云瓶物品,投掷后在目标位置生成云方块。
基本属性
| 属性 | 值 |
|---|---|
| 父类 | BaseItem |
| 注册名 | chisel:cloudinabottle |
| 本地化名 | cloudBottle(ItemCloudInABottle.java:13) |
| 最大堆叠 | 64(未调用 setMaxStackSize,取 Item 默认值) |
| 耐久 | 无(未调用 setMaxDamage) |
| 使用方式 | 右键投掷 |
已订正(注册名取错来源):原文"注册名 |
cloudBottle"——错误。cloudBottle是setUnlocalizedName("cloudBottle")设的本地化名 (ItemCloudInABottle.java:13),不是注册名。真正的注册名是chisel:cloudinabottle,来自GameRegistry.registerItem(itemCloudInABottle, "cloudinabottle")(Features.java:746)。证据:Features.java:746、ItemCloudInABottle.java:13。
功能
onItemRightClick 行为:
- 消耗 1 个物品(非创造模式)
- 播放 “random.bow” 音效
- 生成 EntityCloudInABottle 实体
投掷实体
EntityCloudInABottle (EntityThrowable):
- 碰撞时调用
generate(world, rand, x, y, z, 40) - 生成 40 个云方块
- 使用随机扩散算法分布
云生成算法
- 9 个方向向量定义扩散模式
- 循环生成方块直到达到数量或无法生成
音效
- 投掷:
random.bow,音量0.5F,音调0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)——音调是随机值,不是固定 0.4F 偏移(ItemCloudInABottle.java:24-25)
粒子效果
命中时服务端调用 worldObj.playAuxSFX(2002, x, y, z, 2) 播放粒子特效
(EntityCloudInABottle.java:50-51)。
注意
onImpact开头有if (worldObj.isRemote) return;(EntityCloudInABottle.java:28),故坐标修正、云生成、粒子全部在服务端执行, 客户端直接返回。