Skip to content

Commit

Permalink
[MCTCommon/Keybinds] Seperate isKeyDown methods for each keybind
Browse files Browse the repository at this point in the history
- Added the ability to add different "isKeyDown" function for each keybind.
- Added a default "isKeyDown" function instead of an abstract method
  • Loading branch information
ScribbleTAS committed Feb 4, 2024
1 parent 3710d84 commit 106c29a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 19 deletions.
42 changes: 35 additions & 7 deletions src/main/java/com/minecrafttas/mctcommon/KeybindManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -33,19 +37,36 @@ 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;
}

}

private List<Keybind> 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<>();
}

Expand All @@ -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
*
Expand All @@ -80,4 +103,9 @@ public KeyBinding registerKeybind(Keybind keybind) {
return keyBinding;
}

@FunctionalInterface
public static interface IsKeyDownFunc {

public boolean isKeyDown(KeyBinding keybind);
}
}
18 changes: 6 additions & 12 deletions src/main/java/com/minecrafttas/tasmod/TASmodClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -181,9 +175,9 @@ protected boolean isKeyDown(KeyBinding i) {
public void onClientInit(Minecraft mc) {
// initialize keybindings
List<KeyBinding> 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));
Expand All @@ -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();
Expand Down

0 comments on commit 106c29a

Please sign in to comment.