CraftingGridCache(appeng.me.cache.CraftingGridCache)

基本信息

属性 值
源码 appeng/me/cache/CraftingGridCache.java
类声明行号 107
实现接口 appeng.api.networking.ICraftingGrid
注册 core/Registration.java:551(键 ICraftingGrid.class)
构造器 :156

职责

加工可用性索引。两张核心表:

  1. 「有哪些加工方案可以产出某个东西」——addCraftingOption(:426)写入
  2. 「加工方案 → 关联的 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)有实现 —— 加工方案要跨存档。

与方块维度的关系

相关条目