From 932bdc397f15549b72775489b028bc5456158d1d Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 18 Oct 2019 19:11:39 +0200 Subject: [PATCH] Added support for key modifiers; GUI can now be opened and closed with the same button (if no widget has focus). Closes #6 --- .../worldhandler/event/KeyHandler.java | 17 +++++++++++++--- .../gui/container/impl/GuiWorldHandler.java | 20 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/event/KeyHandler.java b/src/main/java/exopandora/worldhandler/event/KeyHandler.java index a41031c..3cedadb 100644 --- a/src/main/java/exopandora/worldhandler/event/KeyHandler.java +++ b/src/main/java/exopandora/worldhandler/event/KeyHandler.java @@ -12,6 +12,7 @@ import net.minecraft.client.settings.KeyBinding; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.InputEvent.KeyInputEvent; +import net.minecraftforge.client.settings.KeyModifier; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; @@ -27,21 +28,31 @@ public class KeyHandler { if(Minecraft.getInstance() != null && Minecraft.getInstance().currentScreen == null) { - if(KeyHandler.KEY_WORLD_HANDLER.isPressed()) + if(KeyHandler.isPressed(KeyHandler.KEY_WORLD_HANDLER)) { ActionHelper.displayGui(); } - else if(KeyHandler.KEY_WORLD_HANDLER_POS1.isPressed() && Config.getSettings().shortcutKeys()) + else if(KeyHandler.isPressed(KeyHandler.KEY_WORLD_HANDLER_POS1) && Config.getSettings().shortcutKeys()) { BlockHelper.setPos1(BlockHelper.getFocusedBlockPos()); } - else if(KeyHandler.KEY_WORLD_HANDLER_POS2.isPressed() && Config.getSettings().shortcutKeys()) + else if(KeyHandler.isPressed(KeyHandler.KEY_WORLD_HANDLER_POS2) && Config.getSettings().shortcutKeys()) { BlockHelper.setPos2(BlockHelper.getFocusedBlockPos()); } } } + public static boolean isPressed(KeyBinding keyBinding) + { + return keyBinding.isPressed() && (KeyModifier.NONE.equals(keyBinding.getKeyModifier()) || KeyModifier.getActiveModifier().equals(keyBinding.getKeyModifier())); + } + + public static boolean isPressed(KeyBinding keyBinding, int keyCode) + { + return keyCode == keyBinding.getKey().getKeyCode() && (KeyModifier.NONE.equals(keyBinding.getKeyModifier()) || KeyModifier.getActiveModifier().equals(keyBinding.getKeyModifier())); + } + public static void updatePosKeys() { boolean isRegistered = KeyHandler.arePosKeysRegistered(); diff --git a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java index 0ee9fbc..e6aee8e 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandler.java @@ -15,6 +15,7 @@ import exopandora.worldhandler.Main; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.impl.BuilderWorldHandler; import exopandora.worldhandler.config.Config; +import exopandora.worldhandler.event.KeyHandler; import exopandora.worldhandler.gui.button.EnumIcon; import exopandora.worldhandler.gui.button.GuiButtonIcon; import exopandora.worldhandler.gui.button.GuiButtonTab; @@ -628,6 +629,25 @@ public class GuiWorldHandler extends Container return super.mouseClicked(mouseX, mouseY, keyCode); } + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) + { + boolean focused = this.getFocused() != null; + + if(focused && this.getFocused() instanceof Widget) + { + focused = ((Widget) this.getFocused()).isFocused(); + } + + if(!focused && KeyHandler.isPressed(KeyHandler.KEY_WORLD_HANDLER, keyCode)) + { + this.onClose(); + return true; + } + + return super.keyPressed(keyCode, scanCode, modifiers); + } + @Override public void onClose() {