Crest Mount GUI
基本信息
| 属性 | 值 |
|---|---|
| 类型 | GUI + 自定义网络包(CLIENT→SERVER) |
| GUI ID | TinkersDefense.GUI_ITEM_INV = 0 |
| 触发条件 | 右键 CrestMount 方块(玩家不在 sneak) |
| 容器 | Container_CrestMount(4 TE 槽 + 玩家背包 3×9 + 9 快捷栏) |
| 客户端类 | Gui_CrestMount(GuiContainer) |
| 纹理 | tinkersdefense:textures/gui/crest_mount.png |
行为
打开 CrestMount 的 GUI,进入 4 槽 IInventory:
- TE 槽布局:
Slot(TE, 0, 62,28)、Slot(1, 98,28)、Slot(2, 80,28)、Slot(3, 80,46)(菱形/十字对称)。 - 每槽
getInventoryStackLimit() == 1(强行限制单件,是放 Crests / 勋章 / 装饰品的视觉面板)。 - 玩家背包:3×9 主背包 + 9 快捷栏。
transferStackInSlot返回 null(shift-click 行为未实现)。
GUI 顶部有 4 个 18×18 按钮,全部文字 “Flip”,位置:
- 按钮 1:
(guiLeft+61, guiTop+8) - 按钮 2:
(guiLeft+79, guiTop+8) - 按钮 3:
(guiLeft+97, guiTop+8) - 按钮 4:
(guiLeft+79, guiTop+63)
点击按钮 → 翻转对应 inventory.flip[i-1],立即通过 TinkersDefense.INSTANCE.sendToServer(new Message_CrestMount(xCoord, yCoord, zCoord, flip)) 同步到服务端。
网络包
| 字段 | 值 |
|---|---|
| Channel | TinkersDefense.INSTANCE(SimpleNetworkWrapper,channel = tinkersdefense) |
| Discriminator | 0 |
| 方向 | CLIENT → SERVER |
| 消息类 | Message_CrestMount(x, y, z + boolean[4] flip) |
| Handler | Handler_CrestMount |
服务端在 Handler_CrestMount.onMessage 中:
TileEntity te = ctx.getServerHandler().playerEntity.worldObj
.getTileEntity(message.x, message.y, message.z);
if (te instanceof TileEntity_CrestMount)
((TileEntity_CrestMount) te).flip = message.flip;
注意:服务端处理器未调 markDirty() 也未广播 markBlockForUpdate,因此客户端/服务端 flip 字段可能长期不一致(源码现状)。
TileEntity 通过标准 getDescriptionPacket/onDataPacket 把 inventory 与 flip 数据同步给客户端:
// 服务端
NBTTagCompound tag = new NBTTagCompound();
writeToNBT(tag);
return new S35PacketUpdateTileEntity(x, y, z, 0, tag);
// 客户端
readFromNBT(pkt.func_148857_g());
数值
| 数值 | 默认值 |
|---|---|
| GUI ID | 0 |
| TE inventory 槽数 | 4 |
| TE 槽 stackLimit | 1 |
| Flip 按钮数 | 4 |
| 按钮尺寸 | 18×18 |
| 玩家背包槽数 | 27(3×9) |
| 玩家快捷栏槽数 | 9 |
| 网络包 discriminator | 0 |
| 网络包方向 | CLIENT → SERVER |
| NBT 字段(flip) | flip_1, flip_2, flip_3, flip_4(boolean) |
相关条目
- Crest Mount - 触发方块
- Armor Anvil - 同为装饰性 TESR 方块,无 GUI
- Jewelers Bench - 同为装饰性 TESR 方块,无 GUI