Cable BUD(方块更新检测器)
基本信息
| 属性 | 值 |
|---|---|
| modid | StevesFactoryManager |
| FML 注册键 | StevesFactoryManager:BlockCableBUDName(CABLE_BUD_NAME_TAG,ModBlocks.java:47,149) |
| 未本地化名 | sfm.BlockCableBUD(BlockCableBUD.java:20) |
| 显示名 | 方块更新检测器 / Block Detector |
| TileEntity | TileEntityBUD(BlockCableBUD.java:26) |
| 方块类 | BlockCableBUD extends BlockContainer(BlockCableBUD.java:14) |
| 硬度 | 1.2(setHardness(1.2F),BlockCableBUD.java:21) |
| 爆炸抗性 | 10.0 — 源码未设置,Block 默认值 |
| 接口 | ISystemListener, ITriggerNode(TileEntityBUD.java:12) |
| 监测方向 | 6 |
功能
BUD 在相邻方块发生变化时被唤醒,把 6 个面的方块快照暴露给 Manager 里的 BUD 条件组件判断。
快照编码:data[i] = (blockId << 4) | (metadata & 15)(TileEntityBUD.java:50-63),即每面只存 方块 id + 4 bit metadata;不存方块状态(state)、NBT 或方块内部数据。oldData 仅为上一次快照,触发后 makeOld() 覆盖(TileEntityBUD.java:65-67)。
唤醒链路:BlockCableBUD.onNeighborBlockChange → bud.onTrigger() → updateData() → 遍历 managerList 调 triggerBUD(this) → makeOld()(BlockCableBUD.java:36-41;TileEntityBUD.java:30-38)。
摆放要求
- 可在任何位置放置,不记录朝向
- 只能被动响应方块更新;自身无 GUI(
onBlockActivated未覆写)
数值
| 参数 | 值 | 证据 |
|---|---|---|
| 监测面数 | 6 | TileEntityBUD.java:15-16,53-61 |
| 每面快照 | blockId(高位) + meta 低 4 bit | TileEntityBUD.java:59-60 |
| NBT 协议版本 | 12 | ModBlocks.java:14 |
交互
| 触发 | 行为 |
|---|---|
| 左键 | 无特殊行为 |
| 右键 | 无特殊行为 |
| 相邻方块更新 | 重算快照并通知全部已连 Manager |
合成配方
无序:工厂线缆 + 3 个下界石英(ModBlocks.java:243-248)
审计订正
- 语义写反(严重):原文「当相邻方块的元数据、方块类型或方块状态发生改变时,会触发
onTrigger()」「当检测到变化时通知所有连接的 Manager」→ 错误。onNeighborBlockChange对任何邻居方块变化无条件调onTrigger(),onTrigger()也无条件通知managerList全部 Manager,源码中不存在任何 old/new 差异比较(BlockCableBUD.java:36-41;TileEntityBUD.java:30-38)。差异判断在 Manager 的 GUI 条件组件侧。 - 编造机制:「通过监听
ON_NEIGHBOR_BLOCK_CHANGED事件」→ 源码里没有这个名字。实际是覆写onNeighborBlockChange(BlockCableBUD.java:36)。ClusterMethodRegistration枚举里也没有该值。 - 编造机制:「记录每个方向的当前数据和历史数据,当检测到变化时通知」→ 记录属实(
data/oldData),用途错,已改写为"供 GUI 条件比较"。 - 编造用途:「常用于检测活塞伸长/缩回、压力板踩踏、按钮触发」→ 活塞类成立(换方块);压力板与按钮不会改变方块本身,不触发
onNeighborBlockChange,源码中无对应处理。已删除该断言(无法核实)。 - 遗漏机制:原文未写"每面只存 blockId + 4 bit metadata"这一硬限制(TileEntityBUD.java:59-60)——这决定了它检测不到同方块同 metadata 内部的 NBT/状态变化。已补。
- modid / 注册名错:原文
stevesfactorymanager:blockCableBUD→StevesFactoryManager;传入实参CABLE_BUD_NAME_TAG = "BlockCableBUDName"(ModBlocks.java:47,149)。
相关条目
- Cable Input - 红石接收
- Connection Block - 连接抽象(非注册物品)