AENetworkProxy(appeng.me.helpers.AENetworkProxy)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/helpers/AENetworkProxy.java |
| 类声明行号 | 48 |
| 实现接口 | appeng.api.networking.IGridBlock |
| 构造器 | :63,四参数 (IGridProxyable te, String nbtName, ItemStack visual, boolean inWorld) |
| 子类 | AENetworkProxyMultiblock.java:25 |
职责
IGridBlock 的唯一内置实现,是方块类机器接入 ME 网络的门面。
me/ 不认识 TileEntity。GridNode 只认识 IGridBlock。
AENetworkProxy 就是这两者之间那层适配。
宿主契约
宿主 tile 实现 IGridProxyable(me/helpers/IGridProxyable.java:16):
| 方法 | 行号 |
|---|---|
getProxy() |
18 |
getLocation() |
20 → DimensionalCoord |
gridChanged() |
22 |
gridChanged() 的调用方是 Grid.add()(me/Grid.java:183)——
节点接入网格后立刻回调宿主,让 tile 缓存自己的网引用。
内部状态
| 字段 | 行号 | 含义 |
|---|---|---|
gp |
50 | 宿主 |
worldNode |
51 | 是否在世界中(inWorld 参数) |
nbtName |
52 | 存档分段名,注释原文 // name |
myColor |
53 | AEColor.Transparent 起始 |
data |
54 | 反序列化暂存,注释原文 // input |
myRepInstance |
55 | 视觉表示(ItemStack) |
isReady |
56 | |
node |
57 | IGridNode —— 与网格的真正连接点 |
validSides |
58 | 初始 EnumSet.allOf(ForgeDirection.class)(:69) |
flags |
59 | EnumSet.noneOf(GridFlags.class) |
idleDraw |
60 | 默认 1.0 |
owner |
61 | EntityPlayer |
对外方法
| 方法 | 行号 | 说明 |
|---|---|---|
setVisualRepresentation(ItemStack) |
72 | |
writeToNBT(NBTTagCompound) |
76 | |
setValidSides(EnumSet<ForgeDirection>) |
82 | |
validate() |
89 | 重新校验连接 |
onChunkUnload() |
95 | 区块卸载 |
invalidate() |
100 | 永久失效 |
onReady() |
108 | |
getNode() |
121 | |
readFromNBT(NBTTagCompound) |
131 |
三个「快捷」方法与 GridAccessException
| 方法 | 行号 | 返回 | 失败条件 |
|---|---|---|---|
getPath() |
145 | IPathingGrid |
网为 null 或 IPathingGrid cache 为 null |
getGrid() |
163 | IGrid |
node 为 null 或 node.getGrid() 为 null |
getTick() |
174 | ITickManager |
同上,外加 ITickManager cache 为 null |
三个都 throws GridAccessException(me/GridAccessException.java:15),
源码里带注释 short cut!(:158)。
⚠️ getGrid() 的两个 null 语义不同 —— 节点没建 vs 节点建了但没连上网 ——
却抛同一个异常,调用方无法区分。getPath() / getTick() 更进一步,
还把「cache 没注册」也折叠进同一异常。
nbtName 与 GridNode 的 NBT 约定
本类与 GridNode 的 NBT 方法都接受 String name:
| 侧 | 方法 | 行号 |
|---|---|---|
| 本类 | readFromNBT / writeToNBT |
131 / 76 |
GridNode |
loadFromNBT / saveToNBT |
me/GridNode.java:307 / :322 |
说明网格数据按「宿主给的名字」分段存取,而不是固定布局。
子类
AENetworkProxyMultiblock(AENetworkProxyMultiblock.java:25)
额外 implements IGridMultiblock,暴露
getMultiblockNodes()(:33)→ Iterator<IGridNode>。
供多方块宿主方块使用(多方块几何见
me/cluster 总览)。
与既有维度的关系
| 关系 | 说明 |
|---|---|
→ tile 维度 |
上网方块几乎都经本类 |
→ cable-part 维度 |
part 走自己的 proxy 体系,本类是方块侧门面 |
| → me/grid-core | 内部 IGridNode(字段 :57)是接入点 |
| → P2P 接口 part | 经 AENetworkProxyMultiblock 上报多方块节点 |