GUI Types
基本信息
inventory/gui/GuiType.java —— 13 个界面类型的枚举,
每个常量把「宿主类型 → 服务端 Container → 客户端 Gui」三者绑在一起。
| 常量 | 宿主类型 | Container | Gui |
|---|---|---|---|
FLUID_AUTO_FILLER |
TileFluidAutoFiller |
ContainerFluidAutoFiller |
GuiFluidAutoFiller |
LEVEL_EMITTER_PROXY |
ILevelEmitter(AE2 接口) |
ContainerLevelEmitter(AE2 自带) |
GuiLevelEmitterProxy |
LEVEL_MAINTAINER |
TileLevelMaintainer |
ContainerLevelMaintainer |
GuiLevelMaintainer |
OC_PATTERN_EDITOR |
TileOCPatternEditor |
ContainerOCPatternEditor |
GuiOCPatternEditor |
DUAL_INTERFACE_FLUID |
IDualHost |
ContainerFluidInterface |
GuiFluidInterface |
INGREDIENT_BUFFER |
TileIngredientBuffer |
ContainerIngredientBuffer |
GuiIngredientBuffer |
LARGE_INGREDIENT_BUFFER |
TileLargeIngredientBuffer |
ContainerLargeIngredientBuffer |
GuiLargeIngredientBuffer |
LEVEL_TERMINAL |
ITerminalHost(AE2 接口) |
ContainerLevelTerminal |
GuiLevelTerminal |
WIRELESS_LEVEL_TERMINAL |
IWirelessTerminal |
ContainerLevelWireless |
GuiLevelWireless |
FLUID_PATTERN_ENCODER |
TileFluidPatternEncoder |
ContainerFluidPatternEncoder |
GuiFluidPatternEncoder |
FLUID_PACKET_DECODER |
TileFluidPacketDecoder |
ContainerFluidPacketDecoder |
GuiFluidPacketDecoder |
WIRELESS_MAGNET_FILTER |
ITerminalHost |
ContainerMagnetFilter |
GuiMagnetFilter |
GUI_SUPER_STOCK_REPLENISHER |
TileSuperStockReplenisher |
ContainerSuperStockReplenisher |
GuiSuperStockReplenisher |
GUI_SUPER_STOCK_REPLENISHER 的枚举名带 GUI_ 前缀,是 13 个里唯一的例外。
四种工厂泛型
| 工厂 | 用在本枚举的 | 语义 |
|---|---|---|
TileGuiFactory<T> |
7 个 | 必须挂在 TileEntity 上 |
PartGuiFactory<T> |
1 个(LEVEL_EMITTER_PROXY) |
必须挂在 AE2 部件上 |
ItemGuiFactory<T> |
2 个(WIRELESS_LEVEL_TERMINAL、WIRELESS_MAGNET_FILTER) |
由手持物品打开 |
TileOrPartGuiFactory<T> |
2 个(DUAL_INTERFACE_FLUID、LEVEL_TERMINAL) |
Tile 或部件皆可 |
DUAL_INTERFACE_FLUID 与 LEVEL_TERMINAL 用 TileOrPartGuiFactory,
与 AE2 升级卡注册 尾部
interfaceTerminal().register(...) 的三处注册呼应 ——
PartFluidInterface、PartFluidP2PInterface、TileFluidInterface
共用同一个界面。
序号即协议
public static final List<GuiType> VALUES = ImmutableList.copyOf(values());
public static GuiType getByOrdinal(int ordinal) {
return ordinal < 0 || ordinal >= VALUES.size() ? null : VALUES.get(ordinal);
}
ordinal(0–12)被直接写进网络包(SPacketSwitchGuis),
所以枚举常量顺序是网络协议的一部分:在中间插入或重排会破坏
客户端/服务端兼容性。新增界面只能追加到末尾。
越界返回 null(不抛异常),调用方需自行处理 null。
VALUES 用 Guava ImmutableList 快照,GuiType 字段
public final IGuiFactory guiFactory 亦为 final。
相关条目
- AE2 升级卡注册 — 三个 interfaceTerminal 注册
- Fluid Interface —
DUAL_INTERFACE_FLUID的方块宿主 - Level Maintainer
- Channel Loader —
SPacketSwitchGuis传 ordinal
源码
src/main/java/com/glodblock/github/inventory/gui/GuiType.java- 工厂基类:同目录
TileGuiFactory/PartGuiFactory/ItemGuiFactory/TileOrPartGuiFactory/PartOrItemGuiFactory/IGuiFactory