Skip to content

Architecture_CN

MIAOKATZE edited this page Jul 12, 2026 · 2 revisions

架构与接口

1. 模组元信息

本节列出 GTSWN 模组的核心元信息,便于快速核对版本与依赖。

字段
modId gtswn
modName GTSimpleWirelessNetwork
版本 1.5.13
Minecraft 1.7.10
Forge 10.13.4.1614
Java 17 → 8(jvmDowngrader 降级)
核心依赖 GT5U 5.09.54.20、AE2 rv3-beta-1000、GTNHLib 0.11.23、StructureLib 1.4.42、ModularUI 1.3.4、ModularUI2 2.3.79
可选依赖 Baubles-Expanded(compileOnly)
modGroup com.miaokatze.gtswn

Java 降级说明: 项目使用 Java 17 语法编写源码,通过 jvmDowngrader 插件降级为 Java 8 字节码,以兼容 Minecraft 1.7.10 的运行环境。

2. 网络包协议

GTSWN 使用 Forge 的 SimpleNetworkWrapper 进行网络通信,通道名为 "gtswn"。注册入口 GTSWNPacketHandler.register()CommonProxy.preInit 阶段调用。

2.1 discriminator 分配表

discriminator 包类 方向 Side
0 PacketRequestWirelessEU C→S 请求 EU SERVER
1 PacketResponseWirelessEU S→C 响应 EU CLIENT
2 PacketUpdateNetworkInfoPanelConfig C→S 信息屏配置 SERVER
3 PacketUpdateAETabState C→S AE 标签页+监视列表 SERVER
4 PacketSyncAEMonitorData S→C AE 监控数据同步 CLIENT

2.2 Packet 0: PacketRequestWirelessEU

字段 类型 说明
ownerUUID String 玩家 UUID

用途: 客户端请求指定玩家 UUID 的无线电网 EU 余额,HUD 每 100t 发送一次。

2.3 Packet 1: PacketResponseWirelessEU

字段 类型 说明
euStr String EU 余额(BigInteger.toString())

用途: 服务端响应,调用 WirelessMonitorHUD.receiveSyncedEU(euStr)

线程安全: 1.7.10 的 SimpleChannelHandlerWrapper 在 Netty 网络线程调用 onMessage,必须切回主线程执行游戏逻辑。

2.4 Packet 2: PacketUpdateNetworkInfoPanelConfig

字段 类型 说明
x, y, z int 信息屏方块坐标
action int 操作类型(见下表)
chartConfig String 图表配置 JSON

action 常量表:

常量 说明
ACTION_CHART_CONFIG -1 常规 EU 图表配置
ACTION_AE_CHART_CONFIG -2 AE 图表配置
ACTION_AE_MONITOR_FONT_SIZE_MINUS 30 AE 监视器字号减小
ACTION_AE_MONITOR_FONT_SIZE_PLUS 31 AE 监视器字号增大
ACTION_AE_MONITOR_BOLD_TOGGLE 32 AE 监视器加粗切换
ACTION_AE_MONITOR_RENDER_MODE_TOGGLE 33 AE 监视器渲染模式切换
ACTION_AE_MONITOR_ICON_SIZE_MINUS 34 AE 监视器图标尺寸减小
ACTION_AE_MONITOR_ICON_SIZE_PLUS 35 AE 监视器图标尺寸增大
action >= 0 ≥0 调用 panel.applyConfigAction(action)

距离校验: ≤64D

2.5 Packet 3: PacketUpdateAETabState

字段 类型 说明
panelX, panelY, panelZ int 信息屏方块坐标
actionType byte 操作类型(见下表)
tabIndex int 标签页索引
stackData NBTTagCompound 物品/流体数据

actionType 表:

actionType 行为
0 切换标签页
1 走势图绑定物品
2 走势图绑定流体
3 监控列表切换物品
4 监控列表切换流体
5 清除走势图绑定
6 清除 AE 实时监控全部

2.6 Packet 4: PacketSyncAEMonitorData

字段 类型 说明
x, y, z int 信息屏方块坐标
chartKey String 走势图键
chartSamples List 走势图采样列表
monitorLatest Map<String, AEMonitorSample> 监控最新值
monitorAvg300s Map<String, Double> 300s 平均值

AEMonitorSample 字段:

字段 类型
timeMs long
tick long
amount long
rate double

3. EUDataSet 数据集

EUDataSet 用于存储无线电网 EU 历史采样数据,是走势图计算的核心数据结构。

3.1 常量

常量 说明
CAPACITY 61 固定容量(0s 首检 + 60 次 100t 检测 = 300s)
LONG_SILENT_THRESHOLD_TICKS 6000L 长期静默阈值(300s)

3.2 公开方法表

方法签名 用途
void add(BigInteger value, long tick) 添加新测量值(FIFO)
boolean isAllSameValue() 检测静默状态
boolean isLongTermSilent() 返回长期静默状态
Measurement getNewest() 获取最新测量点
Measurement getOldest() 获取最旧测量点
int size() 当前数据量(0~CAPACITY)
boolean isFull() 是否已满
boolean isEmpty() 是否为空
void clear() 清空并重置 longTermSilent
double calculateEUT() 计算 EU/t(首末两点斜率,BigDecimal 精确除法 6 位小数 HALF_UP)
double calculateRecentEUT() 计算实时 EU/t(最近 2 个样本)
void saveToNBT(NBTTagCompound, String) 序列化到 NBT
void loadFromNBT(NBTTagCompound, String) 从 NBT 反序列化

3.3 NBT 格式

measurementHistory: {
  count: <int>,
  m0: { tick, value(string) },
  m1: { ... },
  ...
  m{count-1}: { ... },
  longTermSilent: <boolean>
}

4. WorldSavedData 持久化

GTSWN 使用两个 WorldSavedData 子类进行数据持久化,均存储在 world.perWorldStorage

4.1 AEMonitorDataStore

属性
DATA_NAME "gtswn_ae_monitor_data"
存储位置 world.perWorldStorage
数据结构 Map<String, AEMonitorDataSet> dataSets
key 格式 dimensionId:x:y:z(坐标字符串)
粒度 每个网络信息屏方块独立维护一份 AE 监视数据

4.2 NetworkInfoDataStore

属性
DATA_NAME "gtswn_network_info_data"
存储位置 world.perWorldStorage
数据结构 Map<String, NetworkInfoDataSet> dataSets
key 格式 玩家 ownerUUID.toString()
粒度 同一玩家的所有网络信息屏共享同一份数据集

注意: 早期版本为每屏独立 datasetId,现改为 ownerUUID,旧数据反序列化时直接丢弃。

5. MTE ID 分配

GTSWN 的 MetaTileEntity ID 采用公式化分配,避免与其他模组冲突。

5.1 ID 公式

最终 ID = BASE (14600) + Config.metaIdOffset (配置偏移) + relativeId (枚举内相对 ID)

5.2 BASE 常量

常量
MetaTileEntityID.BASE 14600

5.3 枚举表

枚举名 relativeId 最终 ID(默认偏移=0) 说明
WIRELESS_ENERGY_MONITOR 0 14600 LV 等级无线能量监视器

目前仅 1 个 MTE ID。Config.metaIdOffset 范围 [-5000, 5000],用于避免与其他模组 ID 冲突。

6. 构建产物

GTSWN 使用 Gradle Kotlin DSL + GTNH Convention 插件(com.gtnewhorizons.gtnhconvention)构建。

6.1 jar 文件清单

构建产物位于 build/libs/ 目录:

文件名 说明
gtswn-1.5.13.jar 主 jar(发布版,Java 8 字节码)
gtswn-1.5.13-dev.jar 开发 jar(含源码与调试信息)
gtswn-1.5.13-sources.jar 源码 jar

6.2 构建配置关键项

配置项 说明
enableModernJavaSyntax jvmDowngrader 用 Java 17 语法编写,降级到 Java 8 字节码
RELEASE_VERSION 1.5.13 强制版本号(优先于 git 派生)
gtnh.modules.gitVersion false 禁用 gitVersion 模块
generateGradleTokenClass com.miaokatze.gtswn.Tags 生成版本 token 类

Clone this wiki locally