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。
相关条目
- Manager - 创建这些连接的方块
- Cable Relay - 可被连接的中转站
- Cable Output -
EMITTER匹配类 - Cable Input -
RECEIVER匹配类