跳到正文
烈焰甘蔗Wiki

ConnectionBlock(连接抽象 · 不是已注册的物品或方块)

[!WARNING] 本条目原先声称注册名为 stevesfactorymanager:blockConnection、是一个"方块物品"——这是幻觉,源码里不存在这个注册。 ConnectionBlock 是 vswe.stevesfactory.blocks 包下的一个普通 Java 类,实现 IContainerSelection, 既没有 ItemStack、没有注册名、没有 metadata、也不能放进背包或放���世界里。 之所以仍保留本条目,是因为该类真实存在且是理解 Manager 连接系统的关键;保留位置 item/ 是为了不破坏既有链接, 但它不是 item 维度的注册物品。

基本信息

属性 值
类全名 vswe.stevesfactory.blocks.ConnectionBlock(ConnectionBlock.java:19)
实现接口 IContainerSelection
注册名 无 —— 从未注册
物品 / 方块形态 无,不是 ItemBlock,不继承 Block
是否与 StevesAddons 有关 无关。StevesAddons 只在 Compat.HAS_ADDONS 时接管 ConnectionBlockType.isInstance() 与 tooltip 修正(ConnectionBlock.java:35、78)
创建位置 TileEntityManager.addInventory()(TileEntityManager.java:346)

功能

Manager 的 BFS 每扫到一个 TileEntity 就 new 一个 ConnectionBlock 包装它(TileEntityManager.java:345-367), 用它来承载:这个 TileEntity 是什么类型(可同时命中多个 ConnectionBlockType)、它的连接 id、以及它离 Manager 多少跳电缆。

getSizeInventory() 之类的物品语义它一个都没有。

字段

字段 含义 证据
tileEntity 被包装的 TileEntity ConnectionBlock.java:21,56-58
types 命中的 ConnectionBlockType 集合(EnumSet) ConnectionBlock.java:22,28,32-34
id 连接 id,variables.length + inventories.size() ConnectionBlock.java:23,60-67;TileEntityManager.java:357
cableDistance 从 Manager 算起的电缆跳数(BFS depth) ConnectionBlock.java:24,26-30,109-111

方法

| 方法 | 实际行为 | 来源 | |------|----------| | addType(type) | 向 EnumSet 加一个类型 | ConnectionBlock.java:32-34 | | isOfType(type) | 见下方特殊规则 | ConnectionBlock.java:42-44 | | isOfType(types, type) | type == null → 命中一切;NODE 且集合含 RECEIVER 或 EMITTER → 也命中 | ConnectionBlock.java:36-40 | | isOfAnyType(types) | 对传入集合逐项试 isOfType,任一命中即真 | ConnectionBlock.java:46-54 | | getDistance(manager) | 欧氏直线距离四舍五入,不是跳数 | ConnectionBlock.java:100-107 | | getCableDistance() | 电缆跳数 | ConnectionBlock.java:109-111 | | getDescription(gui) | 名称 + 变量列表(SHIFT) + XYZ + 直线距离 + 电缆跳数 | ConnectionBlock.java:74-98 | | draw(gui, x, y) | gui.drawBlock(tileEntity, x, y) 画目标方块图示 | ConnectionBlock.java:69-72 | | isVariable() | 恒 false | ConnectionBlock.java:118-121 | | isPartOfVariable(v) | 是否属于某变量的组件菜单选中集合 | ConnectionBlock.java:140-144 |

连接类型(ConnectionBlockType,ConnectionBlockType.java:12-21)

枚举 匹配类 是否 group
INVENTORY IInventory 否
TANK IFluidHandler 否
EMITTER TileEntityOutput 否
RECEIVER TileEntityInput 否
NODE IRedstoneNode 是
BUD TileEntityBUD 否
CAMOUFLAGE TileEntityCamouflage 否
SIGN TileEntitySignUpdater 否

isGroup() 为 true 的只有 NODE(ConnectionBlockType.java:18,44-46),它用于 GUI 里把 EMITTER/RECEIVER/BUD 归到"红石节点"一组显示。

审计订正

  • 注册名凭空编造:原文「注册名 stevesfactorymanager:blockConnection」「物品类型 Block(方块物品)」「变体数量 1(通过 metadata 区分不同连接类型)」→ 三项全错。全仓 grep -rn "blockConnection" 无任何结果;GameRegistry.registerItem 零调用;ModBlocks.init() 的 12 次 registerBlock 里没有它(ModBlocks.java:99-185)。它既非方块也非物品。
  • 元数据说法编造:ConnectionBlock 全文无 meta 字段也无 metadata 概念。"变体数量 1 通过 metadata 区分"无出处。
  • modid 错:原文 stevesfactorymanager → 实为 StevesFactoryManager。
  • 与 SFM Drive 无关:已明确标注。本条目与 StevesAddons 的 SFM Drive 无任何关系;Compat.HAS_ADDONS = Loader.isModLoaded("StevesAddons")(Compat.java:7)只影响类型判定与 tooltip,不构成注册。
  • getDistance 语义纠正:原文写「getDistance(manager) - 计算到 Manager 的电缆距离」→ 错。它算的是 Math.sqrt 欧氏距离取整(ConnectionBlock.java:100-107);电缆跳数是另一个字段 cableDistance(ConnectionBlock.java:109-111)。
  • 漏写 NODE 的并集语义:原文类型表把 8 个类型并列,暗示互相独立。实际 isOfType 中 NODE 命中 EMITTER 或 RECEIVER 即返回 true(ConnectionBlock.java:38-39),且 type == null 命中一切(ConnectionBlock.java:37)。
  • 补正:原文未写 isOfAnyType / isPartOfVariable / getName / getCableDistance,未写 isVariable() 恒 false(ConnectionBlock.java:118-121),未写创建点 TileEntityManager.java:346 与 id 赋值 TileEntityManager.java:357。

相关条目

浏览全部模组