Smashing Rock
粉碎石物品,投掷后破坏范围内的方块。
基本属性
| 属性 | 值 |
|---|---|
| 父类 | BaseItem |
| 注册名 | chisel:smashingrock |
| 本地化名 | smashingRock(ItemSmashingRock.java:13) |
| 最大堆叠 | 64(未调用 setMaxStackSize,取 Item 默认值) |
| 耐久 | 无(未调用 setMaxDamage) |
| 使用方式 | 右键投掷 |
已订正(注册名取错来源):原文"注册名 |
smashingRock"——错误。smashingRock是setUnlocalizedName("smashingRock")设的本地化名 (ItemSmashingRock.java:13),不是注册名。真正的注册名是chisel:smashingrock,来自GameRegistry.registerItem(smashingrock, "smashingrock")(Features.java:3612)。证据:Features.java:3612、ItemSmashingRock.java:13。
功能
onItemRightClick 行为:
- 消耗 1 个物品(非创造模式)
- 播放 “random.bow” 音效
- 生成 EntitySmashingRock 实体
投掷实体
EntitySmashingRock (EntityThrowable):
onImpact触发 smash 效果- 半径 5 格,衰减 3
- 破坏目标面方向的方块
smash 行为
已订正(语义写反 —— 本条目最严重的错误):原文称 “
smash(world, x, y, z):破坏指定坐标的方块 / 影响范围内低硬度方块 / 播放破坏音效”。smash()根本不破坏方块,也不检查硬度,更不播放音效。 它是一个方块转化(降级)函数,源码里没有world.setBlockToAir、 没有Block.getBlockFromItem、没有硬度判断。实际逻辑(
EntitySmashingRock.java:79-93)是一条固定降级链:
原方块 变成 minecraft:stoneminecraft:cobblestoneminecraft:stonebrickmeta 0minecraft:stonebrickmeta 2minecraft:cobblestoneminecraft:gravelminecraft:gravelminecraft:sand其他任何方块 完全不变(提前 return) 末行是硬证据:
if (resBlock.equals(block) && resMeta == meta) return;(EntitySmashingRock.java:92)——不匹配的方块原样保留, 所以它绝不可能"破坏"方块。因此正确的描述是:粉碎石命中范围内把石头类方块逐级风化崩解成沙, 对其他方块无效。分类页"破坏周围方块"的描述同样错误,已一并订正。
音效
- 投掷:
random.bow,音量0.5F,音调0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)——音调是随机值(ItemSmashingRock.java:24-25) - 命中:
chisel:squash,音量 1.0f,音调 1.0f,仅客户端播放 (EntitySmashingRock.java:53)
已订正:原文称 smash “播放破坏音效”——音效由
onImpact在客户端播放, 不在smash()里。已分开说明。