跳到正文
烈焰甘蔗Wiki

Sink(水槽,含 4 种形态)

事实基准:harvestcraft-1.3.14-GTNH.jar(MC 1.7.10 / Forge 10.13.4.1614)CFR 0.152 反编译源码。

基本信息

属性 值 来源
注册名 harvestcraft:sink BlockRegistry.java:643
方块类 BlockPamSink extends Block BlockPamSink.java:25-26
方块物品类 ItemPamSink extends ItemBlock ItemPamSink.java:10-11
字段 BlockRegistry.pamSink BlockRegistry.java:57
构造 new BlockPamSink() BlockRegistry.java:452
显示名 tile.sink.name = Sink en_US.lang:37
硬度 1.0f BlockRegistry.java:452
TileEntity 无(继承 Block) —
GUI 无,不打开任何界面 —
多方块 否,源码未定义任何多方块结构 —
朝向 不支持,不设 metadata BlockPamSink.java(无 func_149689_a)

⚠ 这是 1 个方块 + 4 个 metadata 形态,不是 4 个方块

BlockPamSink 用 metadata 0–3 区分 4 种外观,各自有独立方块物品名(ItemPamSink.func_77667_c 返回 "sink_" + meta,ItemPamSink.java:22-24):

metadata 显示名 lang 键 来源
0 Water Barrel sink_0.name en_US.lang:38
1 Stone Basin sink_1.name en_US.lang:39
2 Clay Jug sink_2.name en_US.lang:40
3 Brick Well sink_3.name en_US.lang:41

「Brick Well(砖井)」不是独立的方块,而是 harvestcraft:sink 的 metadata 3。这是旧版 wiki 把 well 当成单独条目却查无此方块的原因——该条目是幻影。en_US.lang 中也不存在 tile.well.* 之类的方块名键。

  • BlockPamSink.java:40-51 逐个加载 12 张贴图:sinkside_0..3、sinktop_0..3、sinkbottom_0..3。
  • BlockPamSink.java:101-103 func_149692_a(int i) { return i; }:metadata 原样传递。
  • BlockPamSink.java:109-114 func_149666_a 向创造模式标签页加入全部 4 个形态。
  • ItemPamSink.java:18-20 func_77647_b(int) { return p_77647_1_; }:物品损伤值与 metadata 同值(4 种形态各占一个"耐久"位)。

重要后果

BlockPamSink 没有任何设置 metadata 的代码(无 func_149689_a / onBlockPlaced,grep 为空)。因此:

  • 世界中正常放置的 Sink 永远是 metadata 0(Water Barrel)。
  • 形态 1/2/3 只能通过创造模式物品栏、指令或 NBT 编辑获得。

右键行为(全部在 BlockPamSink.func_149727_a,:67-99)

按顺序判定:

条件 行为 行
world.isRemote 直接返回 true(纯客户端短路) :68-70
玩家主手空 返回 true :72-74
手持 Items.field_151133_ar 数量 −1,返还 Items.field_151131_as(局部变量名 waterBucket,:76);背包满则掉在方块上方 :75-83
手持 Items.field_151069_bo 数量 −1,返还 Items.field_151068_bn(局部变量名 waterBottle,:85) :84-92
手持 ItemArmor 且 getArmorMaterial() == ItemArmor.ArmorMaterial.CLOTH 调 func_82815_c 修复耐久,返回 true :93-97
  • 前两组物品的 SRG 名未反混淆,本仓库无 MCP 映射故不断言其原版名;但反编译器保留下来的局部变量名 waterBucket / waterBottle 与「桶→水桶」「瓶→水瓶」的语义自洽。
  • 第三组是唯一有明确原版名的分支:ItemArmor.ArmorMaterial.CLOTH 是可见的 MCP 枚举 —— 水槽可修复布甲(getArmorMaterial() 明确可见)。
  • 每次成功转换后调用 containerInventory/func_75142_b 播放音效并 return true(阻止方块破坏)。

其它覆写:func_149745_a(Random) → 恒返回 1(BlockPamSink.java:105-107)。

交互

触发 行为 来源
右键 见上表 4 条分支 BlockPamSink.java:67-99
破坏 掉落 Item.func_150898_a(BlockRegistry.pamSink) BlockRegistry.java:643

源码缺陷

  1. 3/4 的形态不可达。BlockPamSink 加载了 4 套贴图、注册了 4 个创造模式物品形态、写了 4 个 lang 名,却从未设置 metadata。形态 1/2/3 在正常游玩中无法放置出来。这是资产与逻辑不匹配(疑似从 1.12.2 版本移植时丢失了放置逻辑,或反编译时未暴露调用方)。
  2. 多方块 / 控制器 / 可否旋转:源码未定义。

相关条目

订正记录

  • 本条目为新增。旧 wiki 把 Sink 的 4 个形态以及「Brick Well」拆成多个独立方块条目(其中 well 为幻影)。本条目按源码合并为 1 个方块 + 4 个 metadata 形态,并明确标注形态 1–3 不可达。
浏览全部模组