Turret Base GUI
基本信息
| 属性 | 值 |
|---|---|
| GUI 处理器 | openmodularturrets.handler.GuiHandler implements IGuiHandler |
| 注册方式 | NetworkRegistry.INSTANCE.registerGuiHandler(this, gui)(ModularTurrets.java:65) |
| GUI ID 范围 | 1 – 7(ID 6 / 7 跨等级共用,其余按底座等级) |
| 客户端 GUI 类 | ConfigureGui、ExpanderInvGui、TurretBaseTierOneGui – TurretBaseTierFiveGui、TurretBaseAbstractGui |
| 容器类 | ConfigContainer、ExpanderInvContainer、TurretBaseContainer、TurretBaseTierOneContainer – TurretBaseTierFiveContainer |
| 创造标签页 | openmodularturrets.client.gui.ModularTurretsTab |
GUI ID 对照
GuiHandler.getServerGuiElement 与 getClientGuiElement 用同一套 switch(GuiHandler.java:30-56 与 :59-84):
| ID | 客户端 GUI | 服务器容器 | 触发方 |
|---|---|---|---|
| 1 | TurretBaseTierOneGui |
TurretBaseTierOneContainer |
Tier 1 底座 |
| 2 | TurretBaseTierTwoGui |
TurretBaseTierTwoContainer |
Tier 2 底座 |
| 3 | TurretBaseTierThreeGui |
TurretBaseTierThreeContainer |
Tier 3 底座 |
| 4 | TurretBaseTierFourGui |
TurretBaseTierFourContainer |
Tier 4 底座 |
| 5 | TurretBaseTierFiveGui |
TurretBaseTierFiveContainer |
Tier 5 底座 |
| 6 | ConfigureGui |
ConfigContainer |
任意底座的配置面板 |
| 7 | ExpanderInvGui |
ExpanderInvContainer |
库存扩展器 |
底座 GUI 的 ID 由 player.openGui(ModularTurrets.instance, base.getBaseTier(), ...) 直接传入等级(BlockAbstractTurretBase.java:78)。
数值
底座容器槽位坐标
以 Tier 5 容器 TurretBaseTierFiveContainer.java:25-34 为准(5 个等级同构,Tier 1 无后两类):
| 槽位 | 构造 | 坐标 |
|---|---|---|
| 0 – 8(3×3 供弹) | new Slot(tileEntity, x + y * 3, 8 + x * 18, 17 + y * 18) |
左上 (8, 17),步距 18 |
| 9、10(附加件) | new AddonSlot(tileEntity, 9, 72, 18) / new AddonSlot(tileEntity, 10, 92, 18) |
(72, 18) 与 (92, 18) |
| 11、12(升级) | new UpgradeSlot(tileEntity, 11, 72, 52) / new UpgradeSlot(tileEntity, 12, 92, 52) |
(72, 52) 与 (92, 52) |
| 玩家背包 3×9 | new Slot(inventoryPlayer, 9 + x + y * 9, 8 + x * 18, 84 + y * 18) |
左上 (8, 84) |
| 玩家快捷栏 | new Slot(inventoryPlayer, x, 8 + x * 18, 142) |
左上 (8, 142) |
各等级的扩展槽:Tier 1 仅 3×3;Tier 2/3/4 为 3×3 + 2 附加件 + 1 升级(TurretBaseTierTwo/Three/FourContainer.java:31-33);Tier 5 为 3×3 + 2 附加件 + 2 升级(TurretBaseTierFiveContainer.java:31-34)。这与 getSizeInventory() 的 9 / 12 / 12 / 12 / 13 完全对应。
库存扩展器容器槽位(ID 7)
ExpanderInvContainer.java:23-34:
| 槽位 | 坐标 |
|---|---|
| 扩展器 3×3 | (62 + j * 18, 17 + i * 18) |
| 玩家背包 3×9 | (8 + j * 18, 84 + i * 18) |
| 玩家快捷栏 | (8 + i * 18, 142) |
ConfigureGui 按钮
ConfigureGui.initGui(ConfigureGui.java:65-104)创建 11 个按钮:
| ID | 位置 | 作用 |
|---|---|---|
| 1 | (x+10, y+20, 155×20) |
切换 Attack Mobs |
| 2 | (x+10, y+40, 155×20) |
切换 Attack Neutrals |
| 3 | (x+10, y+60, 155×20) |
切换 Attack Players |
| 4 | (x+114, y+98, 51×20) |
+ 添加受信任玩家 |
| 5 | (x+35, y+135, 30×20) |
- 移除受信任玩家 |
| 6 | (x+10, y+135, 20×20) |
<< 列表左翻 |
| 7 | (x+145, y+135, 20×20) |
>> 列表右翻 |
| 8–10 | 三行各 100×20 | 受信任玩家的 canOpenGUI 等权限位 |
| 999 × 3 | (x+70/93/116, y+135, 23×20) |
三个 ? 帮助按钮 |
按钮文案前缀取自 ConfigureGui.java:54-56,Yes/No 分别用 §2 / §c 着色。
背景贴图:openmodularturrets:textures/gui/configure.png(ConfigureGui.java:411-416)。
权限校验:所有 actionPerformed 分支都先比对主人 UUID,失败时聊天栏输出 status.ownership(ConfigureGui.java:132,146,158,177)。
交互
| 触发 | 行为 |
|---|---|
| 右键底座 | 打开对应等级的底座 GUI(ID 1 – 5) |
| 配置面板 | 通过 6 个网络封包改设置:切换三类目标各 1 个(MessageToggleAttackMobs / MessageToggleAttackNeutralMobs / MessageToggleAttackPlayers),添加/移除受信任玩家各 1 个(MessageAddTrustedPlayer / MessageRemoveTrustedPlayer),批量改权限 1 个(MessageModifyPermissions) |
-Y 偏移 |
通过 MessageAdjustYAxisDetect 调整,范围 0 – 9 |
| 右键库存扩展器 | 打开 GUI ID 7 |
网络封包
NetworkingHandler.initNetworking(NetworkingHandler.java:24-93)在 SimpleNetworkWrapper(NetworkRegistry.INSTANCE.newSimpleChannel(ModInfo.ID),:22)上注册 12 个封包:
| 判别符 | 封包类 | 方向 |
|---|---|---|
| 0 | MessageAddTrustedPlayer |
SERVER |
| 1 | MessageRemoveTrustedPlayer |
SERVER |
| 2 | MessageToggleAttackMobs |
SERVER |
| 3 | MessageToggleAttackNeutralMobs |
SERVER |
| 4 | MessageToggleAttackPlayers |
SERVER |
| 5 | MessageSetTurretOwner |
SERVER |
| 7 | MessageAdjustYAxisDetect |
SERVER |
| 8 | MessageDropTurrets |
SERVER |
| 9 | MessageDropBase |
SERVER |
| 10 | MessageModifyPermissions |
SERVER |
| 11 | MessageSetBaseTargetingType |
SERVER |
| 12 | MessageTurretBase |
CLIENT |
11 个客户端→服务端封包,只有 MessageTurretBase 是服务端→客户端的状态同步(NetworkingHandler.java:88-92)。
判别符 6 缺号(已核实):源码中实际使用的判别符为 0–5、7–12,跳过 6(
NetworkingHandler.java:29,35,41,47,53,59,65,71,74,79,85,91)。这不影响功能,但说明历史上曾有一个封包被移除。本条按源码原文记录。
MessageSetBaseTargetingType的存在说明底座的目标类型除三个MessageToggleAttack*封包外,还有一条整体设置路径。
相关条目
- Turret Base - GUI ID 1 – 5 的宿主
- Turret Base TileEntity - GUI 读写的数据
- Config - GUI 中可改的配置项