跳到正文
烈焰甘蔗Wiki

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)。

相关条目

浏览全部模组