网络可视化工具

基本信息

属性 值
注册名 ae2stuff:Visualiser
英文名 Network Visualisation Tool
中文名 网络可视化工具
实现 net.bdew.ae2stuff.items.visualiser.ItemVisualiser(SimpleItem + ItemLocationStore)
最大堆叠 1(ItemVisualiser.scala:36)
侧别 仅客户端渲染,服务端只负责发数据
创造标签 itemGroup.bdew.ae2stuff

功能

把 AE2 网格以第一人称全息叠加的形式画在世界上:每个网格节点一个方框,每条 IGridConnection 一条线,线宽正比于占用频道数。它是排查「频道不够 / 某节点 missing」类 AE2 问题的调试工具。

绑定

右键任意实现 IGridHost 的方块,把坐标与维度写入 NBT(ItemVisualiser.scala:50-62),聊天提示「可视化网络位于 x,y,z」。NBT 键为 loc + dim + mode(mode 无则默认 FULL,ItemVisualiser.scala:67-72)。

刷新机制

onUpdate(ItemVisualiser.scala:93-192)每 tick 调 VisualiserPlayerTracker.needToUpdate,节流条件为「坐标与维度未变 且 距上次更新不足 100 tick」(items/visualiser/VisualiserPlayerTracker.scala:40)。

即:每 5 秒刷新一次,或重新绑定 / 换维度时立即刷新。玩家登出、换维度、重生时清表(VisualiserPlayerTracker.scala:52-61),服务器停止时整体清空(AE2Stuff.scala:113)。

跨维度时直接跳过(ItemVisualiser.scala:112)。

显示模式

枚举 VisualisationModes 共 8 个模式(items/visualiser/data.scala:95-98),按 NODES_ONE_CHANNEL 分成两组渲染:

模式 渲染节点 渲染连线 英文名
FULL 是 是 Show Everything
NODES 是 否 Show Nodes
CHANNELS 否 是 Show Channels
NO_NUM 是 是 Show Channels and Nodes
NODES_ONE_CHANNEL 是 是 Show Nodes and one Channel
ONE_CHANNEL 否 是 Show one Channel
P2P 否 是 Show P2P Links
PROXY 是(仅代理节点) 是(仅代理连线) Show Crafting Input Proxy Links

renderNodesModes(5 个)与 renderLinksModes(7 个)定义在 VisualiserOverlayRender.scala:392-407。NODES / NO_NUM 会过滤掉 PROXY 标记的节点与连线。

模式通过客户端发 MsgVisualisationMode 切换,服务端只在玩家手持本物品时接受(ItemVisualiser.scala:79-91)。

节点与连线标记

VNodeFlags = DENSE / MISSING / PROXY,VLinkFlags = DENSE / COMPRESSED / PROXY(data.scala:16-22)。判定规则:

  • MISSING:!node.meetsChannelRequirements()
  • 节点 DENSE:node.hasFlag(GridFlags.DENSE_CAPACITY)
  • 连线 DENSE:两端都有 DENSE_CAPACITY
  • 连线 COMPRESSED:两端都有 CANNOT_CARRY_COMPRESSED

只收集 block.isWorldAccessible && block.getLocation.isInWorld(world) 的节点(ItemVisualiser.scala:125)。

GregTech 集成

若 Loader.isModLoaded("gregtech_nh") 为真(AE2Stuff.scala:79),工具会额外遍历网格中的 MTEHatchCraftingInputME 节点,把它们的代理仓(getProxyHatches → getBaseMetaTileEntity)画成额外的 PROXY 节点,并与母节点画一条 0 频道的 PROXY 连线(ItemVisualiser.scala:155-182)。依赖 gregtech,非必需。

序列化

VisualisationData implements Externalizable,VERSION = 1(data.scala:91-93)。版本不匹配只 logWarn 并丢弃整包(data.scala:39-42)——客户端/服务端版本不一致时工具静默不显示。

节点写 3 个 int + 1 个 byte 位掩码;连线写 2 个 int 索引 + 1 个 int 频道数 + 1 个 byte(data.scala:69-88)。

配方

3×3(recipes.cfg:42-58),P = M:calcProcessor,A = OD:itemIlluminatedPanel(EnderIO),F = M:purifiedFluixCrystal:

P A P
F F F

相关配置

  • visualiserWidthDense:高密度缆连线宽度,默认 1.0,范围 0.1–32.0
  • visualiserWidthNormal:普通缆连线宽度,默认 1.0,范围 0.1–8.0

见 客户端配置。

已知缺陷:中文模式名

ItemVisualiser.scala:85 用 "ae2stuff.visualiser.mode." + mode.toString.toLowerCase 拼键,NO_NUM → no_num。但 lang/zh_CN.lang:46 写的是 ae2stuff.visualiser.mode.nonum(少一个下划线),中文环境下该模式显示原始键名。

此外 nodes_one_channel、one_channel、proxy 三个模式在 zh_CN.lang 中完全没有条目(en_US.lang:72-75 有)。