me/ 路径与通道分配(pathfinding)

覆盖范围

appeng.me.pathfinding 包,5 个 .java 文件。

实测:find me/pathfinding -name '*.java' | wc -l = 5。

逐类职责

文件 行号 职责
IPathItem.java 18 接口。可参与路径计算的对象。由本包定义(不是 api/),实现者有 GridNode、GridConnection
PathingCalculation.java 48 核心算法。一次全网通道分配:算控制器、算各面预算、传播通道数、收尾
ControllerValidator.java 18 IGridVisitor。在遍历中寻找朝向正确的控制器节点,产出 ControllerFace
ChannelFinalizer.java 19 IGridConnectionVisitor。收尾遍历,把临时 ad hoc 通道转成正式通道
AdHocChannelUpdater.java 19 IGridConnectionVisitor。临时(ad hoc)通道的即时分配/回收

本包在 brief 里的定位澄清

brief 猜测的维度里「Channel」单列。在本源码树中,没有 me/channel/ 包。 通道相关代码分散在三处:

位置 内容
me/pathfinding/ 分配算法(5 个文件,本维度)
me/helpers/ChannelPowerSrc.java:18 通道能量来源(见 helpers)
me/cache/PathGridCache.java 通道需求状态(见 PathGridCache)
me/GridConnection.java:123-179 通道计数的存储点

「Security」「Controller」「Crafting CPU」同理,也都不是 me/ 下的独立包:

brief 猜测维度 真实位置
Security me/cache/SecurityCache.java:37 + me/storage/SecurityInventory.java:31;API 在 api/networking/security/
Controller 方块与渲染在 tile/networking/TileController.java、block/networking/BlockController.java;me/ 里只有 me/pathfinding/ControllerValidator.java:18
Crafting CPU me/cluster/implementations/CraftingCPUCluster.java:138(多方块,见 cluster)
P2P me/cache/P2PCache.java:33(见 P2PCache);part 在 parts/p2p/
DSU me/ 下完全没有。全部在 integration/modules/DSU.java + integration/abstraction/IDSU.java + integration/modules/helpers/MFRDSUHandler.java
Grid / Storage / Network ✅ 本包与 me/grid-core/、me/storage/

唯一可引用的数值

PathingCalculation.java:50:

private static final int CONTROLLER_FACE_CHANNELS = 32;

每个控制器朝向面 32 通道预算。这是本维度唯一的硬编码通道数值, 其余全由 AEConfig 与节点需求动态算出。

me/ 下不存在其它通道上限常量 —— 所谓「一个控制器支持 N 个通道」之类的 数字在源码中没有定义。

IPathItem 契约(IPathItem.java:18-)

源码里有明确的两段式注释:

/* USED BY AD HOC PATHING */          setAdHocChannels(int)
/* USED BY CONTROLLER PATHING */     getControllerRoute() / setControllerRoute(IPathItem)
                                   getPossibleOptions() / incrementChannelCount(int)

即两套并行的通道机制:ad hoc(临时、即时)与 controller(正式、预算制)。 AdHocChannelUpdater 与 ChannelFinalizer 各自负责一条。

两个 visitor 的区别

类 类型 接口方法 作用
AdHocChannelUpdater IGridConnectionVisitor visitNode(:28)、visitConnection(:35) 临时通道:构造器拿 int used(:23),逐节点写回
ChannelFinalizer IGridConnectionVisitor visitNode(:22)、visitConnection(:29) 收尾:GridConnection.finalizeChannels()(me/GridConnection.java:179)

ControllerValidator 是第三种:IGridVisitor,只有 visitNode(:39), 配 isValid()(:63)与 getFound()(:71)。

触发链

GridConnection 构造成功
  └─ p.repath()                      me/GridConnection.java:261
       └─ PathGridCache.repath()     me/cache/PathGridCache.java:352
            └─ PathingCalculation    me/pathfinding/PathingCalculation.java:48
                 ├─ ControllerValidator  找控制器 + 朝向面
                 ├─ AdHocChannelUpdater  临时通道
                 └─ ChannelFinalizer     收尾

PathingCalculation 的两个公开结果: getChannelsInUse()(:327)与 getChannelsByBlocks()(:331)。

内部哨兵 SUBTREE_END = new Object()(:265)用于迭代式 DFS 的栈底标记; ControllerFace(:247)是包私有静态类,承载「控制器 + 朝向面」。

相关条目