-
Notifications
You must be signed in to change notification settings - Fork 2
Network Info Panel_CN
网络信息屏是 GTSWN 的多方块显示面板,由主屏与拓展屏组成,可拼接成 任意矩形尺寸 的连续屏幕。可视化无线电网能量趋势,支持 8 个嵌套时间窗口:5 分钟 / 1 小时 / 8 小时 / 24 小时 / 7 天 / 1 月(28 天)/ 3 月(84 天)/ 1 年(336 天)。
- 多方块显示面板,主屏 + 拓展屏可拼接成任意矩形尺寸
- 8 时间窗口:5m / 1h / 8h / 24h / 7d / 1M / 3M / 1Y(自然比例流入计数链 12→8→3→7→4→3→4)
- 采用 Fritsch-Carlson 单调三次 Hermite 样条曲线 平滑渲染
- 支持按玩家 UUID 跨多屏数据共享
- 3 个标签页:EU 网络 / AE 走势图 / AE 实时监控
- 可配置屏幕背景色、走势线平滑度、显示模式等
- 数据集持久化,方块破坏不立即丢失
在工作台中按十字结构合成(中心为无线能量监视器):
| 槽位 | 第 1 列 | 第 2 列 | 第 3 列 |
|---|---|---|---|
| 第 1 行 | LV 传感器 | 玻璃 | LV 传感器 |
| 第 2 行 | 玻璃 | 无线能量监视器 | 玻璃 |
| 第 3 行 | LV 传感器 | 玻璃 | LV 传感器 |
材料清单:LV 传感器 ×4 + 玻璃 ×4 + 无线能量监视器 ×1
在工作台中按十字结构合成(中心为电脑屏幕覆盖板):
| 槽位 | 第 1 列 | 第 2 列 | 第 3 列 |
|---|---|---|---|
| 第 1 行 | LV 接收器 | 玻璃 | LV 接收器 |
| 第 2 行 | 玻璃 | 电脑屏幕覆盖板 | 玻璃 |
| 第 3 行 | LV 接收器 | 玻璃 | LV 接收器 |
材料清单:LV 接收器 ×4 + 玻璃 ×4 + 电脑屏幕覆盖板 ×1(输出 2 个拓展屏)
**玻璃通配符:**配方使用
Blocks.glass的 meta=32767 通配符,接受 普通玻璃与染色玻璃。
网络信息屏支持 8 个时间窗口,每个窗口均为 61 点 FIFO:
| 窗口 | 样品点数 | 采样间隔 | 总时长 | 说明 |
|---|---|---|---|---|
| 5 分钟 | 61 | 100 ticks(5 秒) | 300 秒 | 原始采样 |
| 1 小时 | 61 | 1200 ticks(60 秒) | 3600 秒 | 由 5m 均值流入 |
| 8 小时 | 61 | 9600 ticks(480 秒) | 28800 秒 | 由 1h 均值流入 |
| 24 小时 | 61 | 28800 ticks(1440 秒) | 86400 秒 | 由 8h 均值流入 |
| 7 天 | 61 | 201600 ticks(10080 秒) | 604800 秒 | 由 24h 均值流入 |
| 1 月(28 天) | 61 | 806400 ticks(40320 秒) | 2419200 秒 | 由 7d 均值流入 |
| 3 月(84 天) | 61 | 2419200 ticks(120960 秒) | 7257600 秒 | 由 1M 均值流入 |
| 1 年(336 天) | 61 | 9676800 ticks(483840 秒) | 29030400 秒 | 由 3M 均值流入 |
**注意:**1h / 8h / 24h / 7d / 1M / 3M / 1Y 窗口通过 流入计数链 触发,并非独立采样。每个窗口的样品点取自上一级窗口的最近 N 点均值。
8 个时间窗口通过嵌套计数链触发,比例不固定,由相邻窗口的时长比自然推导。每一级窗口的样本由上一级窗口的均值计算得出:
- **5m → 1h:**每 12 个 5m 样本触发 1 个 1h 样本(3600s / 300s = 12)
- **1h → 8h:**每 8 个 1h 样本触发 1 个 8h 样本(28800s / 3600s = 8)
- **8h → 24h:**每 3 个 8h 样本触发 1 个 24h 样本(86400s / 28800s = 3)
- **24h → 7d:**每 7 个 24h 样本触发 1 个 7d 样本(604800s / 86400s = 7)
- **7d → 1M:**每 4 个 7d 样本触发 1 个 1M 样本(2419200s / 604800s = 4,1M=28d)
- **1M → 3M:**每 3 个 1M 样本触发 1 个 3M 样本(7257600s / 2419200s = 3,3M=84d)
- **3M → 1Y:**每 4 个 3M 样本触发 1 个 1Y 样本(29030400s / 7257600s = 4,1Y=336d≈11 个月)
计数链比例为 12 → 8 → 3 → 7 → 4 → 3 → 4(5m → 1h → 8h → 24h → 7d → 1M → 3M → 1Y)。
自然比例含义: 每个窗口的"流入触发点数"等于相邻两窗口的时长比,使数据从短窗口自然流入长窗口;比例不统一为单一数值,而是按时长比推导。所有窗口均为 61 点 FIFO,满了删除旧的,无需手动清理。eut/rate 字段在流入时取均值,eu/timeMs/tick 取瞬时值。
第 12 个 5m 点同时进入 5m 集和 1h 集(5m 集不跳过任何采样点,保持 61 个连续 5s 点)。这保证了 5m 集的连续性,同时通过计数链自动驱动更长时间窗口的采样。
走势线采用 Fritsch-Carlson 单调三次 Hermite 样条:
-
算法:
monotoneCubicPath方法实现 Fritsch-Carlson 单调三次 Hermite 样条 - **单调性:**保持单调性、避免过冲
- **端点处理:**首尾导数自然,不做 [0,1] 硬截断
- **平滑度参数:**0-12
| smoothing 值 | 段数 | 说明 |
|---|---|---|
| 0 | 1 段 | 线性(无平滑) |
| 1-12 | smoothing × 2 + 2 段(4-26 段) | 平滑曲线,段数随平滑度增加 |
信息屏支持 3 种显示模式:
| 模式值 | 名称 | 显示示例 |
|---|---|---|
| 0 | 常规计数 | 1,234,567 |
| 1 | 科学计数 | 1.23E6 |
| 2 | 千位计数 | 1.23K |
**千位模式细节:**主显示调用点采用 2 位小数(如 1.23K、999.00);坐标轴 Y 轴刻度标签保持无小数(如 1K),避免轴标签过长;负数格式统一为前缀负号(-1.23K)。科学计数模式下小值(< 10000.0)自动 fallback 为常规显示。
v1.5.17 起默认值为 1(科学计数)。 旧存档若已显式保存 displayMode,则按存档值;新建/未保存的屏幕默认科学计数。
数据集绑定到 玩家 UUID,同一玩家的所有信息屏共享同一份数据:
- **UUID 绑定:**数据集以 ownerUUID 为 key 存储于 WorldSavedData
- **多屏一致:**多个屏幕显示相同数据
-
采样锁:
tryAcquireSampleLock全局采样锁防止重复采样 - **反写保证:**采样完成后用
dataSet.newest()反写 cachedEu/cachedEut,保证多屏数据一致
**注意:**AE 监控数据按方块坐标(
dimensionId:x:y:z)隔离,与 EU 数据集(按 ownerUUID)解耦。每个信息屏独立维护自己的 AE 监控数据。
| 参数 | 数值 | 说明 |
|---|---|---|
| GUI 尺寸 | 430 × 285 像素 | 配置界面窗口大小 |
| 采样间隔 | 100 ticks(5 秒) | SAMPLE_INTERVAL_TICKS |
| gap 检测 | 200 ticks | MAX_CONTINUOUS_GAP_TICKS(断点判定) |
| 数据集容量 | 61 | 每窗口 FIFO 容量 |
| 拓展屏检测范围 | 16 格 | rebuildNearbyScreens 扫描半径 |
| WorldSavedData | gtswn_network_info_data | EU 数据持久化名 |
| AE WorldSavedData | gtswn_ae_monitor_data | AE 监控数据持久化名 |
网络信息屏的所有配置项(含默认值与范围):
| 配置项 | 类型 / 默认值 | 范围 | 说明 |
|---|---|---|---|
| trendLineSmoothing | int = 2 | 0-12 | 样条平滑度 |
| trendLineThickness | int = 3 | - | 走势线宽度(glLineWidth) |
| displayMode | int = 1 | 0-2 | 显示模式(0=常规 / 1=科学 / 2=千位),v1.5.17 起默认 1 |
| chartBorderThickness | int = 3 | 1-8 | 图表边框宽度 |
| chartBackgroundColor | String = "" | - | 图表背景色(空=不绘制背景填充) |
| screenBackgroundColor | String | - | 屏幕背景色(空=不绘制背景填充) |
| briefRatio | int = 28 | 10-80 | 简报字体比例(getBriefFontScale()=briefRatio/20.0);v1.5.17 起 AE 走势图复用此字段控制简报字号 |
| trackingWindow | int | 0-7 | 时间窗口(0=5m / 1=1h / 2=8h / 3=24h / 4=7d / 5=1M / 6=3M / 7=1Y) |
| showBriefEnergy | boolean | - | 简报能量开关 |
| showBriefStatus | boolean | - | 简报状态开关 |
| showChartEnergy | boolean | - | 图表能量开关 |
| showChartStatus | boolean | - | 图表状态开关 |
| energyAxisMin / Max | String | - | 能量 Y 轴范围(空=自动,含 10% padding) |
| eutAxisMin / Max | String | - | EU/t Y 轴范围(空=自动,含 10% padding) |
拓展屏可自动附着到相邻主屏,拼接成任意矩形尺寸的连续屏幕:
-
最大子矩形检测:
findLargestFilledRect()找含 core 的最大全填充子矩形 - **自动附着:**拓展屏放置时自动检测相邻主屏并加入其屏幕组
- **连接状态贴图:**16 种连接状态贴图
screen_connected_0.png ~ screen_connected_15.png,根据相邻方块自动选择 - **L/U 形外围 detach:**非矩形外围拓展屏会被自动脱离
- **breakBlock 触发重建:**破坏任意屏幕方块时,相邻屏幕重新检测拼接
-
EU 数据:
gtswn_network_info_data(perWorldStorage),Map<ownerUUID, NetworkInfoDataSet> -
AE 监控数据:
gtswn_ae_monitor_data(perWorldStorage),Map<coordinateKey, AEMonitorDataSet>
主屏 TileEntity 持久化以下内容:
- UI 配置(displayMode、trackingWindow、各可见性开关、轴范围、平滑度等)
- ownerUUID(拥有者 UUID)
- lastSampleTick(上次采样 tick)
- eutDataSet(局部 EU/t 计算数据集)
- screen(多方块屏几何信息)
- syncData(同步数据)
- AE 相关字段(currentTab、chartItem、chartFluid、monitoredItems、monitoredFluids、lastAESampleTick)
破坏方块时,物品保留以下数据供重新放置时恢复:
- ownerUUID + ownerName
- lastSampleTick(EU 采样时间戳)
- lastAESampleTick(AE 采样时间戳)
- eutMeasurementHistory(EU/t 测量历史)
- chartConfig(图表配置)
信息屏 GUI 顶部有 3 个标签页按钮(ID 100/101/102),切换不同显示模式:
| 标签页 | 名称 | 内容 |
|---|---|---|
| 标签页 1 | EU 网络 | EU 走势图与简报(5m/1h/8h/24h 时间窗口切换、走势线、坐标轴、简报区,详见 04 模块) |
| 标签页 2 | AE 走势图 | 绑定 AE 物品/流体,双 Y 轴趋势图(详见 05 模块) |
| 标签页 3 | AE 实时监控 | 多物品 AE 监控列表,300s 均值(详见 06 模块) |
手持物品右键信息屏可快速配置:
- EU 标签页 + 任意物品:打开 GUI(原逻辑)
- AE 走势图标签页 + 含流体容器:绑定流体
- AE 走势图标签页 + 普通物品:绑定物品
- AE 实时监控标签页 + 含流体容器:添加/移除流体监视
- AE 实时监控标签页 + 普通物品:添加/移除物品监视