-
Notifications
You must be signed in to change notification settings - Fork 2
Architecture_CN
本节列出 GTSWN 模组的核心元信息,便于快速核对版本与依赖。
| 字段 | 值 |
|---|---|
| modId | gtswn |
| modName | GTSimpleWirelessNetwork |
| 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 的运行环境。
GTSWN 使用 Forge 的 SimpleNetworkWrapper 进行网络通信,通道名为 "gtswn"。注册入口 GTSWNPacketHandler.register() 在 CommonProxy.preInit 阶段调用。
| 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 |
| 字段 | 类型 | 说明 |
|---|---|---|
| ownerUUID | String | 玩家 UUID |
用途: 客户端请求指定玩家 UUID 的无线电网 EU 余额,HUD 每 100t 发送一次。
| 字段 | 类型 | 说明 |
|---|---|---|
| euStr | String | EU 余额(BigInteger.toString()) |
用途: 服务端响应,调用 WirelessMonitorHUD.receiveSyncedEU(euStr)。
线程安全: 1.7.10 的 SimpleChannelHandlerWrapper 在 Netty 网络线程调用 onMessage,必须切回主线程执行游戏逻辑。
| 字段 | 类型 | 说明 |
|---|---|---|
| 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
| 字段 | 类型 | 说明 |
|---|---|---|
| panelX, panelY, panelZ | int | 信息屏方块坐标 |
| actionType | byte | 操作类型(见下表) |
| tabIndex | int | 标签页索引 |
| stackData | NBTTagCompound | 物品/流体数据 |
actionType 表:
| actionType | 行为 |
|---|---|
| 0 | 切换标签页 |
| 1 | 走势图绑定物品 |
| 2 | 走势图绑定流体 |
| 3 | 监控列表切换物品 |
| 4 | 监控列表切换流体 |
| 5 | 清除走势图绑定 |
| 6 | 清除 AE 实时监控全部 |
| 字段 | 类型 | 说明 |
|---|---|---|
| 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 |
EUDataSet 用于存储无线电网 EU 历史采样数据,是走势图计算的核心数据结构。
| 常量 | 值 | 说明 |
|---|---|---|
| CAPACITY | 61 | 固定容量(0s 首检 + 60 次 100t 检测 = 300s) |
| LONG_SILENT_THRESHOLD_TICKS | 6000L | 长期静默阈值(300s) |
| 方法签名 | 用途 |
|---|---|
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 反序列化 |
measurementHistory: {
count: <int>,
m0: { tick, value(string) },
m1: { ... },
...
m{count-1}: { ... },
longTermSilent: <boolean>
}
GTSWN 使用两个 WorldSavedData 子类进行数据持久化,均存储在 world.perWorldStorage。
| 属性 | 值 |
|---|---|
| DATA_NAME | "gtswn_ae_monitor_data" |
| 存储位置 | world.perWorldStorage |
| 数据结构 | Map<String, AEMonitorDataSet> dataSets |
| key 格式 |
dimensionId:x:y:z(坐标字符串) |
| 粒度 | 每个网络信息屏方块独立维护一份 AE 监视数据 |
| 属性 | 值 |
|---|---|
| DATA_NAME | "gtswn_network_info_data" |
| 存储位置 | world.perWorldStorage |
| 数据结构 | Map<String, NetworkInfoDataSet> dataSets |
| key 格式 | 玩家 ownerUUID.toString()
|
| 粒度 | 同一玩家的所有网络信息屏共享同一份数据集 |
注意: 早期版本为每屏独立 datasetId,现改为 ownerUUID,旧数据反序列化时直接丢弃。
GTSWN 的 MetaTileEntity ID 采用公式化分配,避免与其他模组冲突。
最终 ID = BASE (14600) + Config.metaIdOffset (配置偏移) + relativeId (枚举内相对 ID)
| 常量 | 值 |
|---|---|
MetaTileEntityID.BASE |
14600 |
| 枚举名 | relativeId | 最终 ID(默认偏移=0) | 说明 |
|---|---|---|---|
WIRELESS_ENERGY_MONITOR |
0 | 14600 | LV 等级无线能量监视器 |
目前仅 1 个 MTE ID。Config.metaIdOffset 范围 [-5000, 5000],用于避免与其他模组 ID 冲突。
GTSWN 使用 Gradle Kotlin DSL + GTNH Convention 插件(com.gtnewhorizons.gtnhconvention)构建。
构建产物位于 build/libs/ 目录:
| 文件名 | 说明 |
|---|---|
gtswn-<version>.jar |
主 jar(发布版,Java 8 字节码) |
gtswn-<version>-dev.jar |
开发 jar(含源码与调试信息) |
gtswn-<version>-sources.jar |
源码 jar |
| 配置项 | 值 | 说明 |
|---|---|---|
enableModernJavaSyntax |
jvmDowngrader |
用 Java 17 语法编写,降级到 Java 8 字节码 |
gtnh.modules.gitVersion |
false | 禁用 gitVersion 模块 |
generateGradleTokenClass |
com.miaokatze.gtswn.Tags |
生成版本 token 类 |