CraftingGridCache(appeng.me.cache.CraftingGridCache)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/cache/CraftingGridCache.java |
| 类声明行号 | 107 |
| 实现接口 | appeng.api.networking.ICraftingGrid |
| 注册 | core/Registration.java:551(键 ICraftingGrid.class) |
| 构造器 | :156 |
职责
加工可用性索引。两张核心表:
- 「有哪些加工方案可以产出某个东西」——
addCraftingOption(:426)写入 - 「加工方案 → 关联的 CPU cluster」——
updateCPUClusters(:383)写入
静态暂停开关(本 cache 对全局的副作用)
| 方法 | 行号 |
|---|---|
pauseRebuilds() |
277 |
unpauseRebuilds() |
281 |
这两个是 static 的。唯一调用方是 Grid.postEvent:
// me/Grid.java:195-197
CraftingGridCache.pauseRebuilds();
final MENetworkEvent ret = this.eventBus.postEvent(this, ev);
CraftingGridCache.unpauseRebuilds();
也就是说 任何网格事件派发期间,自动装配索引重建都被冻结。
注意 Grid.postEventTo(Grid.java:202)没有这对调用 ——
定向派发不冻结。
索引重建
| 方法 | 行号 | 说明 |
|---|---|---|
updatePatterns() |
292 | 主入口,protected |
setPatternsFromCraftingMethods() |
339 | 扫 ICraftingMethod |
setMockPatternsFromMethods() |
331 | 造 mock 方案(调试用) |
afterCacheConstruction(MENetworkPostCacheConstruction) |
161 | 首次构建 |
产物侧:setEmitable(IAEItemStack)(:438)与
setEmitable(IAEStack<?>)(:443)——两个重载,泛型版是本移植版新增。
CPU cluster 索引
| 方法 | 行号 |
|---|---|
updateCPUClusters() |
383 |
updateCPUClusters(MENetworkCraftingCpuChange) |
416 |
updateCPUClusters(MENetworkCraftingPatternChange) |
421 |
addLink(CraftingLink) |
402 |
getInputOnlyPattern(UUID) |
379 |
对应的实体在 cluster 总览:
CraftingCPUCluster(me/cluster/implementations/CraftingCPUCluster.java:138)。
持久化
populateGridStorage(:270)有实现 —— 加工方案要跨存档。
与方块维度的关系
- 加工单元方块 →
block-crafting-unit→TileCraftingUnit - 加工监控方块 → 方块加工监控
- 加工 CPU(多方块)→ cluster 总览