Container GUI System
基本信息
| 属性 | 值 |
|---|---|
| 基类 | net.mcft.betterstorage.client.gui.GuiBetterStorage(继承 GuiContainer) |
| 容器基类 | net.mcft.betterstorage.container.ContainerBetterStorage |
| GUI 实现 | 5 个(见下) |
| 容器实现 | 7 个(见下) |
| 客户端渲染器 | src/main/java/net/mcft/betterstorage/client/renderer/ |
来源:src/main/java/net/mcft/betterstorage/client/gui/、src/main/java/net/mcft/betterstorage/container/。
功能
本 mod 的全部 GUI 共享一套动态尺寸机制:GUI 宽度按容器列数计算,而非固定 176 像素,从而支持 9/11/13 列的可配置宽度。
GuiBetterStorage 构造函数(src/main/java/net/mcft/betterstorage/client/gui/GuiBetterStorage.java:45-46):
xSize = 14 + columns * 18;
ySize = container.getHeight();
即宽度 = 14 + 列数 × 18。标题绘制在 8 + (xSize - 176) / 2 处居中(:87-88),玩家背包区固定在 ySize - 94(:88)。
GUI 实现类
| 类 | 用途 | 背景纹理资源 |
|---|---|---|
GuiBetterStorage |
通用基类 | 由 getResource() 决定 |
GuiCrate |
木箱 GUI | textures/gui/crate.png |
GuiCraftingStation |
合成台 GUI | textures/gui/craftingStation.png |
GuiBetterStorageConfig |
配置界面 | — |
GuiThaumiumChest |
神秘金属箱子 GUI(Thaumcraft 附属) | textures/gui/thaumiumChest.png |
来源:src/main/java/net/mcft/betterstorage/client/gui/;纹理见 src/main/resources/assets/betterstorage/textures/gui/。
背景分两段绘制(GuiBetterStorage.java:101-104):上半部从 y=0 起 m1 = ySize - m 像素,下半部从 m2 = getHeight() - m 起 m 像素。
容器实现类
| 类 | 用途 | 列 × 行 |
|---|---|---|
ContainerBetterStorage |
通用基类,含 getColumns() / getRows() |
参数化 |
ContainerCrate |
木箱 | 动态(2 * min(箱数, 3) 行) |
ContainerCraftingStation |
合成台 | 9 × 2 内部存储 |
ContainerKeyring |
钥匙环 | 9 × 1 |
SlotBetterStorage |
通用槽位 | — |
SlotStationOutput |
合成台输出槽 | — |
SlotArmorBackpack |
背包内的护甲槽 | — |
来源:src/main/java/net/mcft/betterstorage/container/;ContainerKeyring 的 9×1 见 ContainerKeyring.java:15。
容器尺寸速查
| 容器 | 列 | 行 | 槽位数 | 来源 |
|---|---|---|---|---|
| 储物柜 | 3 | 3 | 9 | src/main/java/net/mcft/betterstorage/tile/entity/TileEntityContainer.java:41-47 |
| 强化箱子 | 9/11/13 | 3 | 27/33/39 | TileEntityReinforcedChest.java:37-39 + 配置 |
| 强化储物柜 | 9/11/13 | 3 | 27/33/39 | TileEntityReinforcedLocker.java:38-40 + 配置 |
| 背包 | 3 | 1–6 | 3–18 | TileEntityBackpack.java:66-68 + 配置 |
| 纸板箱 | 3 | 1–3 | 3–9 | TileEntityCardboardBox.java:45-47 + 配置 |
| 木箱 | 动态 | 2 * min(箱数, 3) |
动态 | src/main/java/net/mcft/betterstorage/tile/crate/TileEntityCrate.java:233-241 |
| 合成台内部 | 9 | 2 | 18 | ContainerCraftingStation.java:32 |
| 钥匙环 | 9 | 1 | 9 | ContainerKeyring.java:15 |
相关封包
GUI 交互通过以下封包同步(src/main/java/net/mcft/betterstorage/network/packet/):
| 封包 | 用途 |
|---|---|
PacketOpenGui |
打开 GUI |
PacketPresentOpen |
礼物开箱 |
PacketBackpackOpen / PacketBackpackIsOpen |
背包 GUI 开关 |
PacketBackpackStack / PacketBackpackHasItems |
背包内容同步 |
PacketBackpackTeleport |
末影背包传送 |
PacketSyncSetting |
同步配置值 |
通道由 ChannelHandler 管理(src/main/java/net/mcft/betterstorage/network/ChannelHandler.java),在 preInit 初始化(src/main/java/net/mcft/betterstorage/BetterStorage.java:56)。