Steve’s Factory Manager
Git commit:
d746b59| 源码:/Users/evlos/a/mirror/Steve-s-Factory-Manager/(175 个 java 文件) modid(@Mod实测):StevesFactoryManager— StevesFactoryManager.java:19 目标版本:Minecraft 1.7.10(cpw.mods.fml+setBlockName/setHardness(F)等 1.7 API)
Steve’s Factory Manager(简称 SFM)是一个纯物流编程模组:用一个 Manager 方块承载变量与流程组件, 通过"电缆"方块组成的网络找到周围任意可连接的 TileEntity(容器 / 流体罐 / 红石节点 / 告示牌等),再在 GUI 中编排取放逻辑。
⚠️ 本版本没有多方块机器
175 个 java 文件中不存在 multiblock / BlockController / formation 结构类,也没有任何工作方块。
所有 12 个方块都是单方块。所谓"Cable Cluster"是一个方块内聚合多个组件元素(TileEntityCluster 把
每个 element 的坐标直接设成自身坐标),不是多格结构 —— 见 Cable Cluster。
方块(12 个,全部已覆盖)
核心组件
- Manager - 工厂管理器,中央编程方块,硬度 2.0
传输电缆
- Cable - 工厂线缆,硬度 0.4,唯一能导通网络的基础方块
- Cable Relay - 物品/流体中转站(普通 + 高级)
- Cable Cluster - 集线器,硬度 2.0,单方块组件聚合
红石组件
- Cable Input - 红石信号接收器
- Cable Output - 红石信号发射器,强度 0-15
- Cable BUD - 方块更新检测器
工具组件
- Cable Breaker - 方块交互器
- Cable Intake - 物品阀门(普通 + 快速)
装饰/功能组件
- Cable Camouflages - 伪装方块,3 种伪装类型
- Cable Sign - 告示牌更新器
- Cable Creative - 创造物品供应器,无合成配方
除 Cable 与高级 Cable Cluster 外,其余 10 个方块都不能导通电缆——多个类头有明确注释 (BlockCableRelay.java:12、BlockCableOutput.java:15、BlockCableBreaker.java:20、BlockCableIntake.java:6、BlockCableSign.java:18)。
物品
本 mod GameRegistry.registerItem 调用数为 0,没有任何独立注册物品。
4 个方块使用了自定义 ItemBlock 子类(随 registerBlock 一起注册,均 setMaxDamage(0)、堆叠 64):
| ItemBlock | 绑定方块 | 变体 |
|---|---|---|
ItemRelay |
Cable Relay | meta 0 / 8(setMaxDamage(0),ItemRelay.java:14) |
ItemCluster |
Cable Cluster | meta 0 / 8,NBT 携带组件列表(ItemCluster.java:23-24) |
ItemIntake |
Cable Intake | meta 0 / 8(ItemIntake.java:14) |
ItemCamouflage |
Cable Camouflages | meta 0/1/2(ItemCamouflage.java:14) |
非物品条目
- ConnectionBlock - 不是注册物品,是被
IContainerSelection描述的普通 Java 类,保留在item/仅因历史链接
GUI(2 个)
GuiHandler(GuiHandler.java:10-37)只对实现 ITileEntityInterface 的 TileEntity 响应,且全部走 GUI ID 0:
| GUI | Container | 打开方式 |
|---|---|---|
GuiManager |
ContainerManager |
右键 Manager(BlockManager.java:43) |
GuiRelay |
ContainerRelay |
右键高级 Cable Relay(BlockCableRelay.java:51) |
系统架构
TileEntity 层次(11 个注册,ModBlocks.java:100-185)
TileEntityManager- 主控制器(ITileEntityInterface,有 GUI)TileEntityCluster- 组件聚合体(内部持有多个TileEntityClusterElement)TileEntityClusterElement- 可入簇组件基类TileEntityRelay(IInventory,ISidedInventory,IFluidHandler,ITileEntityInterface,IWrenchable)TileEntityIntake(IInventory)TileEntityCamouflageTileEntityOutput(IRedstoneNode)TileEntityInput(IRedstoneNode,ISystemListener,ITriggerNode)TileEntityBUD(ISystemListener,ITriggerNode)TileEntityBreaker(IInventory,IPacketBlock)TileEntityCreative(IInventory,IFluidHandler)TileEntitySignUpdater
关键常量
| 常量 | 值 | 证据 |
|---|---|---|
MAX_CABLE_LENGTH |
128 | TileEntityManager.java:244 |
MAX_CONNECTED_INVENTORIES |
1023 | TileEntityManager.java:246 |
MAX_COMPONENT_AMOUNT |
511 | TileEntityManager.java:245 |
MAX_CHAIN_LENGTH(Relay) |
512 | TileEntityRelay.java:47 |
NBT_CURRENT_PROTOCOL_VERSION |
12 | ModBlocks.java:14 |
连接类型(ConnectionBlockType)
| 类型 | 匹配类 |
|---|---|
| INVENTORY | IInventory |
| TANK | IFluidHandler |
| EMITTER | TileEntityOutput |
| RECEIVER | TileEntityInput |
| NODE | IRedstoneNode(group;同时命中 EMITTER/RECEIVER) |
| BUD | TileEntityBUD |
| CAMOUFLAGE | TileEntityCamouflage |
| SIGN | TileEntitySignUpdater |
跨 mod 依赖
| 依赖 | 方式 | 用途 | 证据 |
|---|---|---|---|
| IC2 | @Optional 软依赖 |
IWrenchable 扳手旋转/移除 |
TileEntityRelay.java:28,31,45 |
| StevesAddons | Loader.isModLoaded |
接管 ConnectionBlockType.isInstance()、tooltip 修正、BlockCableCluster.createNewTileEntity |
Compat.java:7;ConnectionBlock.java:35,78;BlockCableCluster.java:128 |
| WAILA | IMC register |
拓扑 tooltip provider | StevesFactoryManager.java:59;waila/Provider.java |
| NEI | 运行时检测 | GuiAntiNEI 抑制 NEI 覆盖 |
interfaces/GuiAntiNEI.java |
| DreamCraft | Loader.isModLoaded |
装了就跳过全部 vanilla 配方 | ModBlocks.java:190,295 |