网络可视化工具
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | 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.0visualiserWidthNormal:普通缆连线宽度,默认 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 有)。