MBCalculator(appeng.me.cluster.MBCalculator)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cluster/MBCalculator.java |
| 类声明行号 | 21 |
| 类型 | public abstract class |
| 构造器 | :25,单参 IAEMultiBlock t(保存「起点方块」) |
| 子类 | 3 个(CraftingCPUCalculator / QuantumCalculator / SpatialPylonCalculator) |
职责
多方块几何的模板方法基类。它把「找包围盒 → 校验 → 建/复用 cluster → 回写 tile」这套流程写死一次,三个子类只填判据。
唯一的具体流程
calculateMultiblock(World world, WorldCoord loc)(:29-102)。
这是本类唯一带实现的公开方法(除 matchesExistingCluster)。
抽象方法清单
| 方法 | 行号 | 子类实现(3 个都有) |
|---|---|---|
checkMultiblockScale(WorldCoord min, WorldCoord max) |
104 | CPU :39 / 量子 :37 / 空间柱 :33 |
createCluster(World, WorldCoord min, WorldCoord max) |
124 | CPU :52 / 量子 :52 / 空间柱 :40 |
verifyInternalStructure(World, min, max) |
130 | CPU :57 / 量子 :57 / 空间柱 :53 |
disconnect() |
135 | CPU :88 / 量子 :88 / 空间柱 :71 |
updateTiles(IAECluster, World, min, max) |
145 | CPU :93 / 量子 :93 / 空间柱 :76 |
isValidTile(TileEntity) |
153 | CPU :123 / 量子 :125 / 空间柱 :91 |
非抽象但可覆写的方法
matchesExistingCluster(IAECluster, WorldCoord, WorldCoord)(:126)是
protected 具体方法。只有 SpatialPylonCalculator 覆写了它
(SpatialPylonCalculator.java:47)。
三个子类的判据一览
| 子类 | isValidTile 判据 |
createCluster 产出 |
|---|---|---|
CraftingCPUCalculator |
te instanceof TileCraftingTile |
CraftingCPUCluster(:52) |
QuantumCalculator |
te instanceof TileQuantumBridge |
QuantumCluster(:52) |
SpatialPylonCalculator |
te instanceof TileSpatialPylon |
SpatialPylonCluster(:40) |
生命周期
MBCalculator 不是 IGridCache,没有 5 个网格钩子。
它的生命周期由方块放置 / 破坏事件驱动(IAEMultiBlock 起点方块),
与网格的 tick 无关。
与既有维度的关系
三个子类的 isValidTile 分别锚定三个 tile 类型,
这些 tile 的方块条目见 cluster 总览 的关系表。