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-103func_149692_a(int i) { return i; }:metadata 原样传递。BlockPamSink.java:109-114func_149666_a向创造模式标签页加入全部 4 个形态。ItemPamSink.java:18-20func_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 |
源码缺陷
- 3/4 的形态不可达。
BlockPamSink加载了 4 套贴图、注册了 4 个创造模式物品形态、写了 4 个 lang 名,却从未设置 metadata。形态 1/2/3 在正常游玩中无法放置出来。这是资产与逻辑不匹配(疑似从 1.12.2 版本移植时丢失了放置逻辑,或反编译时未暴露调用方)。 - 多方块 / 控制器 / 可否旋转:源码未定义。
相关条目
订正记录
- 本条目为新增。旧 wiki 把 Sink 的 4 个形态以及「Brick Well」拆成多个独立方块条目(其中
well为幻影)。本条目按源码合并为 1 个方块 + 4 个 metadata 形态,并明确标注形态 1–3 不可达。