diff --git a/src/main/java/com/minecrafttas/mctcommon/KeybindManager.java b/src/main/java/com/minecrafttas/mctcommon/KeybindManager.java index 2964a517..6bd55289 100644 --- a/src/main/java/com/minecrafttas/mctcommon/KeybindManager.java +++ b/src/main/java/com/minecrafttas/mctcommon/KeybindManager.java @@ -14,15 +14,19 @@ /** * Keybind manager + * * @author Pancake */ -public abstract class KeybindManager implements EventClientGameLoop { +public class KeybindManager implements EventClientGameLoop { + + private final IsKeyDownFunc defaultFunction; public static class Keybind { private KeyBinding keyBinding; private String category; private Runnable onKeyDown; + private IsKeyDownFunc isKeyDownFunc; /** * Initialize keybind @@ -33,9 +37,22 @@ public static class Keybind { * @param onKeyDown Will be run when the keybind is pressed */ public Keybind(String name, String category, int defaultKey, Runnable onKeyDown) { + this(name, category, defaultKey, onKeyDown, null); + } + + /** + * Initialize keybind with a different "isKeyDown" method + * + * @param name Name of keybind + * @param category Category of keybind + * @param defaultKey Default key of keybind + * @param onKeyDown Will be run when the keybind is pressed + */ + public Keybind(String name, String category, int defaultKey, Runnable onKeyDown, IsKeyDownFunc func) { this.keyBinding = new KeyBinding(name, defaultKey, category); this.category = category; this.onKeyDown = onKeyDown; + this.isKeyDownFunc = func; } } @@ -43,9 +60,13 @@ public Keybind(String name, String category, int defaultKey, Runnable onKeyDown) private List keybindings; /** - * Initialize keybind manager + * Initialize keybind manage + * + * @param defaultFunction The default function used to determine if a keybind is + * down. Can be overridden when registering a new keybind */ - public KeybindManager() { + public KeybindManager(IsKeyDownFunc defaultFunction) { + this.defaultFunction = defaultFunction; this.keybindings = new ArrayList<>(); } @@ -55,12 +76,14 @@ public KeybindManager() { @Override public void onRunClientGameLoop(Minecraft mc) { for (Keybind keybind : this.keybindings) - if (this.isKeyDown(keybind.keyBinding)) - keybind.onKeyDown.run(); + if (keybind.isKeyDownFunc == null) { + defaultFunction.isKeyDown(keybind.keyBinding); + } else { + if (keybind.isKeyDownFunc.isKeyDown(keybind.keyBinding)) + keybind.onKeyDown.run(); + } } - protected abstract boolean isKeyDown(KeyBinding i); - /** * Register new keybind * @@ -80,4 +103,9 @@ public KeyBinding registerKeybind(Keybind keybind) { return keyBinding; } + @FunctionalInterface + public static interface IsKeyDownFunc { + + public boolean isKeyDown(KeyBinding keybind); + } } \ No newline at end of file diff --git a/src/main/java/com/minecrafttas/tasmod/TASmodClient.java b/src/main/java/com/minecrafttas/tasmod/TASmodClient.java index ae3d8a29..ea92d474 100644 --- a/src/main/java/com/minecrafttas/tasmod/TASmodClient.java +++ b/src/main/java/com/minecrafttas/tasmod/TASmodClient.java @@ -137,13 +137,7 @@ public void onInitializeClient() { // Initialize Ticksync ticksyncClient = new TickSyncClient(); // Initialize keybind manager - keybindManager = new KeybindManager() { - - protected boolean isKeyDown(KeyBinding i) { - return VirtualKeybindings.isKeyDownExceptTextfield(i); - }; - - }; + keybindManager = new KeybindManager(VirtualKeybindings::isKeyDownExceptTextfield); // Register event listeners EventListenerRegistry.register(this); @@ -181,9 +175,9 @@ protected boolean isKeyDown(KeyBinding i) { public void onClientInit(Minecraft mc) { // initialize keybindings List blockedKeybindings = new ArrayList<>(); - blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Tickrate 0 Key", "TASmod", Keyboard.KEY_F8, () -> TASmodClient.tickratechanger.togglePause()))); - blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Advance Tick", "TASmod", Keyboard.KEY_F9, () -> TASmodClient.tickratechanger.advanceTick()))); - blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Recording/Playback Stop", "TASmod", Keyboard.KEY_F10, () -> TASmodClient.controller.setTASState(TASstate.NONE)))); + blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Tickrate 0 Key", "TASmod", Keyboard.KEY_F8, () -> TASmodClient.tickratechanger.togglePause(), VirtualKeybindings::isKeyDown))); + blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Advance Tick", "TASmod", Keyboard.KEY_F9, () -> TASmodClient.tickratechanger.advanceTick(), VirtualKeybindings::isKeyDown))); + blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Recording/Playback Stop", "TASmod", Keyboard.KEY_F10, () -> TASmodClient.controller.setTASState(TASstate.NONE), VirtualKeybindings::isKeyDown))); blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Create Savestate", "TASmod", Keyboard.KEY_J, () -> { try { TASmodClient.client.send(new TASmodBufferBuilder(TASmodPackets.SAVESTATE_SAVE).writeInt(-1)); @@ -201,14 +195,14 @@ public void onClientInit(Minecraft mc) { blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Open InfoGui Editor", "TASmod", Keyboard.KEY_F6, () -> Minecraft.getMinecraft().displayGuiScreen(TASmodClient.hud)))); blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Various Testing", "TASmod", Keyboard.KEY_F12, () -> { TASmodClient.client.disconnect(); - }))); + }, VirtualKeybindings::isKeyDown))); blockedKeybindings.add(keybindManager.registerKeybind(new Keybind("Various Testing2", "TASmod", Keyboard.KEY_F7, () -> { try { TASmodClient.client = new Client("localhost", TASmod.networkingport-1, TASmodPackets.values(), mc.getSession().getProfile().getName(), true); } catch (Exception e) { e.printStackTrace(); } - }))); + }, VirtualKeybindings::isKeyDown))); blockedKeybindings.forEach(VirtualKeybindings::registerBlockedKeyBinding); createTASDir();