Skip to content

Wireless Energy Monitor_CN

MIAOKATZE edited this page Jul 12, 2026 · 2 revisions

无线能量监视器

1. 方块简介

无线能量监视器是一台 LV 等级的单方块机器,实时显示无线电网能量状态(每 5 秒采样一次)。它是一台纯信息设备,不消耗也不产生能量,仅用于电网监控与红石逻辑输出。

无线能量监视器方块外观
  • 等级:LV(Tier 1,外壳贴图 MACHINE_CASINGS[1])
  • 纯信息设备:不消耗也不产生能量
  • 实时显示电网容量、平均 EU/t、实时 EU/t
  • 具备高级红石控制(5 模式 + 3 锚定模式)
  • 支持连接 Nuclear Control 2 工业信息屏
  • 正面贴图动态切换:根据红石输出叠加 ON/OFF 贴图
  • 禁用物品栏:纯展示设备,无物品交互

2. 合成配方

在工作台中按以下 3×3 矩阵合成无线能量监视器:

槽位 第 1 列 第 2 列 第 3 列
第 1 行 LV 接收器 钢板 LV 接收器
第 2 行 LV 接收器 LV 机械外壳 LV 接收器
第 3 行 钢螺丝 钢板 钢螺丝
材料 数量 来源
LV 接收器 (Sensor_LV) 4 GT 工作台合成
钢板 (plateSteel) 2 GT 板材成型
LV 机械外壳 (Hull_LV) 1 GT 工作台合成
钢螺丝 (screwSteel) 2 GT 螺丝成型

3. GUI 详解

无线能量监视器 GUI 界面

**GUI 尺寸:**346 × 181 像素。GUI 基于 ModularUI 2 框架,采用 Flow 列布局,共 10 行(含标题行),从上到下依次排列:

行号 内容 控件类型
1 标题行(显示模式切换按钮) 文本 + ButtonWidget
2 模式文本(当前显示模式说明) 纯文本
3 电网容量 + 锚定模式 1 切换按钮 文本 + ButtonWidget
4 电网状态 + 锚定模式 2 切换按钮 文本 + ButtonWidget
5 实时电网状态 + 锚定模式 3 切换按钮 文本 + ButtonWidget
6 红石模式 + 切换按钮 文本 + ButtonWidget
7 红石输出状态 纯文本
8 红石模式说明 纯文本
9 参数 1 输入框 + 4 个调整按钮 ScientificTextFieldWidget + 4 ButtonWidget
10 参数 2 输入框 + 4 个调整按钮 ScientificTextFieldWidget + 4 ButtonWidget

参数输入框

参数 1 / 参数 2 输入框尺寸为 200 × 17 像素,使用 ScientificTextFieldWidget(继承 TextFieldWidget)。在科学计数模式下,失焦后自动格式化为 1.5E6 形式;用户可输入 1E61.5E5 等科学计数法字符串(由 EvalEx 解析),或输入常规数值(失焦后自动转换)。实际值以 long 存储于 LongSyncValue,科学计数法仅用于显示。

4 个调整按钮

每个参数行右侧有 4 个调整按钮,动态步长基于参数最高位:

按钮 符号 行为
减最高位 - 从参数最高位减 1
加最高位 + 从参数最高位加 1
乘 10 × 参数 ×10
除 10 ÷ 参数 ÷10

4. 显示模式

监视器支持 3 种显示模式,通过 GUI 标题行按钮切换:

模式值 名称 显示示例
0 常规计数 1,234,567 EU
1 科学计数 1.23×10^6 EU
2 千位计数 1.23M EU

精度差异:ScientificTextFieldWidget 的科学计数用 3 位小数(%.3f,如 1.234×10^6),用于输入框内部数值格式化(保留更高精度便于用户编辑);FormatUtil.formatScientific 用 2 位小数(%.2f,如 1.23×10^6),用于 GUI 显示文本。

5. 锚定模式

锚定模式决定红石判定基于哪个数值。可通过 GUI 中 3 个切换按钮(电网容量 / 电网状态 / 实时电网状态行)切换,setAnchorMode 钳制到 [0, 2]

模式值 锚定对象 数据类型 取值方式
0 电网电量 BigInteger WirelessNetworkManager.getUserEU(UUID) 直接读取
1 平均 EU/t double → long Math.round(euPerTick) 四舍五入(300s 窗口首末两点斜率)
2 实时 EU/t double → long Math.round(realtimeEuPerTick) 四舍五入(最近 2 个样本斜率)

**说明:**红石判定基于锚定值。切换锚定模式可让红石以电网容量或 EU/t 状态为指标,适用于不同场景(如"电量低于阈值时报警" vs "EU/t 长期负值时报警")。

6. 红石控制

监视器支持 5 种红石输出模式,通过 GUI 红石模式按钮切换。输出强度为 15(满强)或 0,红石检测间隔 2 ticks(0.1 秒),独立时间戳 lastRedstoneCheckTick,保证红石快速响应。

模式值 名称 行为
0 关闭 不输出红石信号
1 高电平 锚定值 > 参数 1 时输出 15
2 低电平 锚定值 < 参数 1 时输出 15
3 正向滞后 锚定值 > 参数 1 时输出 15;必须 < 参数 2 才取消输出
4 反向滞后 锚定值 < 参数 2 时输出 15;必须 > 参数 1 才取消输出
  • 参数 1 / 参数 2 允许为负数
  • 输出通过 getGeneralRS(ForgeDirection) 实现,allowGeneralRedstoneOutput 返回 true
  • 状态变化时调用 setOutputRedstoneSignal 更新 6 面 + notifyBlocksOfNeighborChange 通知周围
  • 滞后模式(3/4)共享同一滞后状态机:getGeneralRSupdateRedstoneOutput 使用一致逻辑

7. 关键参数表

参数 数值 说明
采样间隔 100 ticks(5 秒) UI 显示与 EU/t 计算频率
窗口时长 300 秒 61 点 FIFO(1 首检 + 60 次间隔检测)
红石检测间隔 2 ticks(0.1 秒) 独立时间戳,保证快速响应
重载延迟 600 ticks(30 秒) 长时重载后的红石缓冲期
BigDecimal 精度 6 位小数,HALF_UP EU/t 斜率计算的精确除法
数据集容量 61 EUDataSet.CAPACITY 常量
长期静默阈值 6000 ticks(300 秒) LONG_SILENT_THRESHOLD_TICKS

8. 电网状态显示

电网状态显示采用四分支逻辑(与便携 HUD 共享):

条件 显示文本 颜色
dataSet.size() < 2 暂无变化 / 计算中 默认色
eut == 0(首末两点 EU 完全相等) 0 EU/t(静默) 灰色 §7
0 < eut < 1
eut >= 1

长期静默

当电网静默(所有采样值相同)持续 ≥ 300 秒时:

  • 状态标签从"静默"切换为"长期静默"(颜色变为深灰 §8)
  • 数据集压缩为 2 个数据点(首末),节省内存
  • longTermSilent NBT 标志持久化
  • 下次采样若数值不同,保留末位点作为新数据集起点(size=2,立即可计算 eut)

重载计算中

redstoneReloadDelay > 0(长时卸载重载后的 30 秒红石延迟期)时,电网状态显示"重载计算中 - 红石逻辑维持"(红色 §c),优先级高于正常计算结果。此期间红石逻辑维持不变,避免误切换。

9. 实时 EU/t 计算

监视器同时计算两种 EU/t:

类型 计算方法 样本范围 特点
平均 EU/t EUDataSet.calculateEUT() 首末两点(300s 窗口) 反映长期趋势,稳定
实时 EU/t EUDataSet.calculateRecentEUT() 最近 2 个样本(5s) 反映瞬时变化,灵敏

两者均基于斜率法 (newest.value - oldest.value) / (newest.tick - oldest.tick),使用 BigDecimal 精确除法(6 位小数,HALF_UP),避免 BigInteger 转 double 的大数精度损失。

GT 功率等级显示

EU/t 会转换为 GT 风格的功率等级显示,格式为 XA TIER,例如 2A HV(2 安培 高压)。系统自动升档使电流 ≤ 4A:

ULV(8) / LV(32) / MV(128) / HV(512) / EV(2048) / IV(8192) /
LuV(32768) / ZPM(131072) / UV(524288) / UHV(2097152) / ... / MAX(2147483647)

10. NC2 工业信息屏集成

MTEWirelessEnergyMonitor 实现了 Nuclear Control 2 的 IMetricsExporter 接口,可作为 NC2 传感器卡的信息源:

  • getInfoData():返回 4 条信息:
    1. 标题(监视器名称)
    2. 当前能量(电网容量)
    3. 平均 EU/t 状态
    4. 实时 EU/t 状态
  • reportMetrics():支持跨维度监测,NC2 信息屏可远程读取监视器数据
  • 可作为 NC2 工业信息屏的传感器卡信息源

11. 重载机制

监视器针对短时与长时重载采用不同策略,确保红石输出与数据连续性:

短时重载(≤ 10 秒)

  • 数据集保留,计算直接续传
  • 斜率误差 ≤ 3.3%(可接受)
  • 无红石缓冲

长时重载(> 10 秒)

  • 数据集清空,触发冷启动
  • 启用 30 秒红石缓冲(redstoneReloadDelay = 600 ticks)维持红石输出
  • 延迟期内跳过 updateRedstoneOutput,依赖 mSidedRedstone[] 持久化持续输出缓存信号
  • 延迟期结束后恢复正常计算与红石判定

**gap 检测:**onPostTick 开头(dataSet.isEmpty() 短路之前)执行:lastCheckTick > 0 && gap > 200L(>10 秒)触发长时重载分支。

12. NBT 持久化

监视器所有关键状态均持久化到 NBT,退出重进后从 NBT 恢复:

类型 含义
displayMode int 显示模式(0=常规,1=科学,2=千位)
ownerUUID String 拥有者玩家 UUID
euPerTick double 平均 EU/t 计算状态
measurementHistory Compound 测量历史(EUDataSet 序列化,含 count + m{i}(tick + value) + longTermSilent)
redstoneMode int 红石模式(0-4)
anchorMode int 锚定模式(0=电网电量,1=平均 EU/t,2=实时 EU/t)
param1Value String 参数 1(BigInteger 字符串)
param2Value String 参数 2(BigInteger 字符串)
redstoneOutput boolean 红石输出状态
lastRedstoneCheckTick long 红石检测独立时间戳
lastCheckTick long UI / EU/t 检测时间戳
realtimeEuPerTick double 实时 EU/t 计算状态
longTermSilent byte 长期静默标志(嵌入 measurementHistory Compound)

**加载行为:**加载时 redstoneOutput 会根据当前电网能量与参数重新计算(采用滞后逻辑:加载时视为未输出状态,首次 updateRedstoneOutput 重新计算),并触发 issueTextureUpdate 刷新贴图。

Clone this wiki locally