GUI Screens

基本信息

属性 值
GUI 枚举 gcewing.sg.guis.SGGui(guis/SGGui.java:9-15),5 个值
容器注册 SGCraft.registerContainers(SGCraft.java:327-331)+ OC 一条(compat/oc/OCIntegration.java:68-70)
界面注册 SGCraftClient.registerScreens(SGCraftClient.java:28-33)+ OC 一条(compat/oc/OCIntegration.java:72-75)
GUI 处理器 NetworkRegistry.INSTANCE.registerGuiHandler(this, proxy)(BaseMod.java:149)
资源域 贴图在 assets/sgcraft/textures/gui/,即资源域 sgcraft(非注册域 gcewing_sg)

功能

SGGui 用枚举序号作为 GUI id,addContainer(id.ordinal(), cls) / addScreen(id.ordinal(), cls) 直接用 ordinal(BaseMod.java:405、BaseModClient.java:130),因此枚举顺序即协议 id,插入新值会破坏存档兼容性。

5 个枚举值中只有 4 个有界面类;SGGui.OCInterface(序号 4)的界面由 OC 子系统在运行期追加。

数值

枚举 序号 容器 界面 尺寸 触发方块
SGBase 0 SGBaseContainer SGBaseScreen 256 × 208 Stargate Base
SGController 1 无独立容器 DHDScreen 自定义 Stargate Controller 上半
DHDFuel 2 DHDFuelContainer DHDFuelScreen 256 × 208 同上,下半
PowerUnit 3 PowerContainer PowerScreen 128 × 64 能量单元
OCInterface 4 OCInterfaceContainer OCInterfaceScreen 176 × 125 OC 星门接口

PowerUnit 的枚举值带注释 /* IC2 */(guis/SGGui.java:13),但它同时服务 IC2 与 RF 两个方块——RF 分支没有单开枚举值。

交互

SGBase —— 星门地址界面

  • 打开时计算本门地址并自动写入系统剪贴板(guis/SGBaseScreen.java:41)。
  • 背景贴图 textures/gui/sg_gui.png,地址符号用 symbols48.png 绘制在 y=22(guis/SGBaseScreen.java:51、:55)。
  • 标题与格式化地址分别画在 y=8 与 y=72(guis/SGBaseScreen.java:57-58)。
  • 容器 256×208,5 个伪装槽单列排在 (48, 104)(guis/containers/SGBaseContainer.java:28、:35),每槽限 1 个(guis/containers/slots/CamouflageSlot.java:13-15)。
  • 操作通过 Packet Channel 的 ConnectOrDisconnect 发送。
  • doesGuiPauseGame() 返回 false——单人游戏下开门不会暂停(guis/SGBaseScreen.java:45-47)。

DHDFuel —— 控制器燃料界面

  • 4 个燃料槽排成 2 列 2 行,起始 (174, 84)(guis/containers/DHDFuelContainer.java:20-22、:44-49)。
  • 燃料槽由 FuelSlot 限制为只接受硅岩(guis/containers/slots/FuelSlot.java:15-17)。
  • 右侧能量条:宽 16、高 34,位于 (214, 84),填充高度 = 34 * energyInBuffer / DHDTE.maxEnergyBuffer(guis/screens/DHDFuelScreen.java:26-31、:59-61)。
  • 输入地址通过 EnteredAddress 消息发给服务端(packets/SGChannel.java:55-61)。

PowerUnit —— 能量单元界面

128×64,贴图 power_gui.png(guis/screens/PowerScreen.java:48-49),显示能量条与 Max %s 文本(guis/screens/PowerScreen.java:61)。容器不加任何槽(guis/containers/PowerContainer.java:30-33)。

OCInterface —— OC 星门接口界面

176×125,贴图 gui/oc_sg_interface_gui.png(compat/oc/OCInterfaceScreen.java:24),1 个网卡槽位于 (8, 17)(compat/oc/OCInterfaceContainer.java:22-23、:31),只接受 OC 网卡(compat/oc/UpgradeSlot.java:14-16)。

无 GUI 的方块

CC 星门接口 没有 GUI:SGGui 无对应枚举值,CCIntegration 也不覆写 registerContainers / registerScreens。其 BaseBlock.onBlockActivated 查 getGuiId(te.getClass()) 得到 -1 后返回 false(blocks/base/BaseBlock.java:424-435),因此右键无反应。这是模组的既定设计(CC 走外设 API,不需 GUI),不是缺陷。

本地化缺口

zh_CN.lang 有 31 个键,en_US.lang 有 33 个(后者最后一行无换行符,故 wc -l 显示 32)。中文文件缺少最后两个键:

缺失键 英文值
gui.gcewing_sg:baseScreen.title Stargate Address(en_US.lang 第 32 条)
gui.gcewing_sg:baseScreen.camo Base Camouflage(en_US.lang 第 33 条)

比对方式:grep 两个 lang 文件的 key= 前缀后求差集,extra in zh_CN 为空,即中文侧是纯缺失、没有拼错的键。

即星门地址界面的标题与伪装标签在简体中文环境下会直接显示英文键名。

相关条目