模组 GUI
基本信息
| 属性 | 值 |
|---|---|
| GUI 基类 | net.malisis.core.client.gui.MalisisGui(来自内置 malisiscore 框架) |
| 本 mod 的 GUI 类数 | 4(ls src/main/java/net/malisis/doors/gui/) |
| 渲染方式 | 客户端自定义渲染,非原版 GuiContainer 槽位绘制 |
src/main/java/net/malisis/doors/gui/ 下共 4 个 GUI 类 + 1 个组件类:
| 类 | 用途 | 打开时机 |
|---|---|---|
DigicodeGui |
门的数字密码键盘 | 右键带密码且未开启的门(Door.java:189) |
DoorFactoryGui |
门工厂双模式编辑界面 | 右键门工厂方块(潜行时不打开) |
BlockMixerGui |
方块混合器 3 槽界面 | 右键方块混合器(潜行时不打开) |
VanishingDiamondGui |
消失钻石方块容器界面 | 右键消失钻石方块(VanishingDiamondBlock.java:67-76) |
Digicode |
密码键盘组件(UIContainer 子类) |
被 DigicodeGui 内部使用 |
密码门 GUI(DigicodeGui)
带密码的门被右键时,若门尚未打开则弹出密码键盘(Door.java:185-192):
if (te.getDescriptor().hasCode() && !te.isOpened()) {
if (world.isRemote) new DigicodeGui(te).display();
return true;
}
- 组件
Digicode extends UIContainer<Digicode>(Digicode.java:35) - GUI 构造时把门的期望密码传入:
new Digicode(this, expected)(DigicodeGui.java:34-42) - 窗口尺寸按组件自适应:
UIWindow(this, digicode.getWidth() + 20, digicode.getHeight() + 20),组件以Anchor.MIDDLE | Anchor.CENTER居中(DigicodeGui.java:42-46) registerKeyListener(digicode)使键盘输入直接作用于密码组件(DigicodeGui.java:50)- 输入校验:按回车(
KEY_RETURN或KEY_NUMPADENTER)时若digicode.isValidCode()通过,则先close()再DigicodeMessage.send(te)(DigicodeGui.java:54-62)——即开锁判定在服务端完成,客户端只负责采集输入 - 组件按键处理
onKeyTyped(char, int)(Digicode.java:99),按钮回调onButtonClick(UIButton.ClickEvent)(Digicode.java:137) - 代码变更通过内部事件类
Digicode.CodeChangeEvent(Digicode.java:156-168)向外通知
对应的网络消息处理器为 net.malisis.doors.network.DigicodeMessage,实现 IMessageHandler<DigicodeMessage.Packet, IMessage>(DigicodeMessage.java:33-36)。
门工厂 GUI(DoorFactoryGui)
- 模式切换:两个
UIRadioButton同属"rbDoor"组——rbCreate(gui.door_factory.rb_create)与rbEdit(gui.door_factory.rb_edit),分别位于x = 30与x = 100(DoorFactoryGui.java:207-209) - 选择事件
onRbSelectEvent切换DoorFactoryTileEntity的isCreate标志(DoorFactoryGui.java:295) - 生产按钮:
btnCreate,文案键gui.door_factory.create_door,尺寸 80(DoorFactoryGui.java:117),点击触发onCreateDoor(DoorFactoryGui.java:330) - 组件来自 malisiscore:
net.malisis.core.client.gui.component.interaction.UIButton与UIRadioButton - 打开方块本体同样用
MalisisInventory.open((EntityPlayerMP) player, te),且潜行时不打开(DoorFactory.java:78-88)
方块混合器 GUI(BlockMixerGui)
- 容器对应
BlockMixerTileEntity的 3 个槽:两个MixerSlot输入 + 一个输出槽(BlockMixerTileEntity.java:23-32) - 打开方块本体用
MalisisInventory.open((EntityPlayerMP) player, te),潜行时不打开(BlockMixer.java:80-89) - 渲染切换复选框:
cbRender.setChecked(MalisisDoorsSettings.simpleMixedBlockRendering.get())(BlockMixerGui.java:69),勾选时写回simpleMixedBlockRendering.set(event.isChecked())(BlockMixerGui.java:74)——即该配置项可在游戏内实时切换而无需改配置文件
消失钻石方块 GUI(VanishingDiamondGui)
- 由
VanishingDiamondTileEntity.getGui(container)返回(VanishingDiamondTileEntity.java:153) - 打开方式与其他机器一致:
MalisisInventory.open((EntityPlayerMP) player, te)(VanishingDiamondBlock.java:67-76) - 该方块不传播电源状态(
shouldPropagate恒false,VanishingDiamondBlock.java:58-61),因此每个方块独立响应红石
数值
| 数值名 | 值 | 出处 |
|---|---|---|
| GUI 类总数 | 4 | src/main/java/net/malisis/doors/gui/ 目录 |
| 密码键盘窗口边距 | 组件尺寸 +20 px | DigicodeGui.java:45 |
| 门工厂模式数 | 2(创建 / 编辑) | DoorFactoryGui.java:207-209 |
| 混合器槽位数 | 3 | BlockMixerTileEntity.java:23-32 |
相关条目
- 门工厂 - 门工厂 GUI 的双模式与 5 个槽位
- 方块混合器与混合方块 - 混合器 GUI 与渲染开关
- 自定义门 - 带密码的自定义门会触发 DigicodeGui
- 模组配置 - 混合器 GUI 中的复选框直接改写配置项