跳到正文
烈焰甘蔗Wiki

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. 消耗 1 个物品(非创造模式)
  2. 播放 “random.bow” 音效
  3. 生成 EntitySmashingRock 实体

投掷实体

EntitySmashingRock (EntityThrowable):

  • onImpact 触发 smash 效果
  • 半径 5 格,衰减 3
  • 破坏目标面方向的方块

smash 行为

已订正(语义写反 —— 本条目最严重的错误):原文称 “smash(world, x, y, z):破坏指定坐标的方块 / 影响范围内低硬度方块 / 播放破坏音效”。 smash() 根本不破坏方块,也不检查硬度,更不播放音效。 它是一个方块转化(降级)函数,源码里没有 world.setBlockToAir、 没有 Block.getBlockFromItem、没有硬度判断。

实际逻辑(EntitySmashingRock.java:79-93)是一条固定降级链:

原方块 变成
minecraft:stone minecraft:cobblestone
minecraft:stonebrick meta 0 minecraft:stonebrick meta 2
minecraft:cobblestone minecraft:gravel
minecraft:gravel minecraft: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() 里。已分开说明。

浏览全部模组