模组 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

相关条目