From 335d5ba790beba195821a48b4a293cb2adec2b95 Mon Sep 17 00:00:00 2001 From: johni0702 Date: Sat, 3 Sep 2016 14:24:11 +0200 Subject: [PATCH] Automatically update hotkey button labels when keybinding is changed --- .../com/replaymod/extras/HotkeyButtons.java | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/replaymod/extras/HotkeyButtons.java b/src/main/java/com/replaymod/extras/HotkeyButtons.java index 91a31467..c660e37e 100644 --- a/src/main/java/com/replaymod/extras/HotkeyButtons.java +++ b/src/main/java/com/replaymod/extras/HotkeyButtons.java @@ -4,6 +4,8 @@ import com.replaymod.core.KeyBindingRegistry; import com.replaymod.core.ReplayMod; import com.replaymod.replay.events.ReplayOpenEvent; import com.replaymod.replay.gui.overlay.GuiReplayOverlay; +import de.johni0702.minecraft.gui.GuiRenderer; +import de.johni0702.minecraft.gui.RenderInfo; import de.johni0702.minecraft.gui.container.GuiContainer; import de.johni0702.minecraft.gui.container.GuiPanel; import de.johni0702.minecraft.gui.element.GuiButton; @@ -75,13 +77,20 @@ public class HotkeyButtons implements Extra { keyBindingRegistry.getKeyBindings().values().stream() .sorted(Comparator.comparing(it -> I18n.format(it.getKeyDescription()))) .forEachOrdered(keyBinding -> { - String keyName = "???"; - try { - keyName = Keyboard.getKeyName(keyBinding.getKeyCode()); - } catch (ArrayIndexOutOfBoundsException e) { - // Apparently windows likes to press strange keys, see https://www.replaymod.com/forum/thread/55 - } - GuiButton button = new GuiButton().setLabel(keyName).onClick(() -> { + GuiButton button = new GuiButton(){ + @Override + public void draw(GuiRenderer renderer, ReadableDimension size, RenderInfo renderInfo) { + // There doesn't seem to be an KeyBindingUpdate event, so we'll just update it every time + String keyName = "???"; + try { + keyName = Keyboard.getKeyName(keyBinding.getKeyCode()); + } catch (ArrayIndexOutOfBoundsException e) { + // Apparently windows likes to press strange keys, see https://www.replaymod.com/forum/thread/55 + } + setLabel(keyName); + super.draw(renderer, size, renderInfo); + } + }.onClick(() -> { keyBinding.pressTime++; keyBindingRegistry.handleKeyBindings(); });