CraftingNetworkDiagnostics(appeng.me.diagnostics.CraftingNetworkDiagnostics)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/diagnostics/CraftingNetworkDiagnostics.java |
| 类声明行号 | 17 |
| 类型 | public final class |
| 内部类 | DiagnosticStats(:199,private static final class) |
| 是否缓存 | 否 —— 不是 IGridCache |
职责
按产物维度记录加工产出统计:产出了多少、观测了多久、采样多少次。 供客户端排序 / 搜索展示。
数据结构
Map<IAEStack<?>, DiagnosticStats> —— key 是产物栈,value 是统计量。
DiagnosticStats(:199)至少提供:
| 方法 | 被调用处 | 含义 |
|---|---|---|
getTotalProduced() |
CraftingNetworkDiagnostics.java:129 |
累计产出 |
getElapsedObservedTicks() |
:130 |
观测时长(tick) |
getSampleCount() |
:131 |
采样数 |
写入路径
| 方法 | 行号 | 说明 |
|---|---|---|
recordSample(IAEStack<?> output, CraftingDiagnosticSessionId sessionId, ...) |
36 | 记一次产出 |
completeSession(CraftingDiagnosticSessionId sessionId) |
55 | 结束会话,结算时长 |
nextSessionId() |
23 | 分配新会话 ID |
getSessionCounter() / setSessionCounter(long) |
28 / 32 | 计数器读写 |
会话 ID 的语义与边界见 me/diagnostics 总览(of(0) 返回 null)。
读取路径
| 方法 | 行号 | 说明 |
|---|---|---|
createRows(String search, DiagnosticSortMode sortMode, boolean ascending) |
98 | 排序 + 搜索 → List<DiagnosticRowView> |
isEmpty() |
90 | |
getRevision() |
94 | 单调修订号 |
createRows 的三级 tiebreak(:110-122)保证排序确定性:
主键 → 显示名(忽略大小写)→ hashCode。
⚠️ 搜索是 getDisplayName().toLowerCase().contains(...)(:105)——
子串匹配,不支持通配符 / 正则 / 分词。
清除路径
| 方法 | 行号 |
|---|---|
clear() |
70 |
clear(IAEStack<?> output) |
79 |
持久化
| 方法 | 行号 | 说明 |
|---|---|---|
writeToNBT() |
136 → NBTTagList |
|
readFromNBT(NBTTagList, boolean merge) |
147 | merge = true 时与现有数据合并(不是覆盖) |
配合 CraftingDiagnosticSessionId 的
fromNBT(:18,先试 TAG_LONG 再试 TAG_STRING)往返。
生命周期钩子
无。不是 IGridCache,不由 Grid 直接调用。
它被 CraftingGridCache 间接使用,
或由 CPU 侧主动提交样本。