From 3568fb8a868a07c5265bde66ab3605fc108e54f3 Mon Sep 17 00:00:00 2001 From: somehussar <148253652+somehussar@users.noreply.github.com> Date: Fri, 19 Dec 2025 23:08:37 +0100 Subject: [PATCH] Give priority of keybinds with special keys Stop searching if found match. --- .../noppes/npcs/client/key/KeyPreset.java | 22 ++++++++++++++++++- .../npcs/client/key/KeyPresetManager.java | 13 ++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/noppes/npcs/client/key/KeyPreset.java b/src/main/java/noppes/npcs/client/key/KeyPreset.java index cbc7cfb86..27ed9485b 100644 --- a/src/main/java/noppes/npcs/client/key/KeyPreset.java +++ b/src/main/java/noppes/npcs/client/key/KeyPreset.java @@ -8,7 +8,7 @@ import org.lwjgl.input.Mouse; import java.util.function.Consumer; -public class KeyPreset { +public class KeyPreset implements Comparable { /** * @field SINGLE_PRESS => on releasing before 5 ticks press time * @field PRESS_RELEASE => on pressing and releasing @@ -148,6 +148,26 @@ public class KeyPreset { return false; } + @Override + public int compareTo(KeyPreset o) { + int mySpecialCount = getSpecialKeyCount(this); + int otherSpecialCount = getSpecialKeyCount(o); + + return mySpecialCount - otherSpecialCount; + } + + private static int getSpecialKeyCount(KeyPreset preset) { + int res = 0; + if (preset.hasAlt()) + res += 1; + if (preset.hasCtrl()) + res += 1; + if (preset.hasShift()) + res += 1; + + return res; + } + public static class KeyState { public int keyCode = -1; diff --git a/src/main/java/noppes/npcs/client/key/KeyPresetManager.java b/src/main/java/noppes/npcs/client/key/KeyPresetManager.java index 61b74a610..355c07b54 100644 --- a/src/main/java/noppes/npcs/client/key/KeyPresetManager.java +++ b/src/main/java/noppes/npcs/client/key/KeyPresetManager.java @@ -13,6 +13,8 @@ public class KeyPresetManager { public List keys = new ArrayList<>(); public String fileName; + private boolean wasSorted = false; + public KeyPresetManager(String fileName) { this.fileName = fileName; } @@ -20,12 +22,21 @@ public class KeyPresetManager { public KeyPreset add(String name) { KeyPreset preset = new KeyPreset(name); keys.add(preset); + wasSorted = false; return preset; } public void tick() { - for (KeyPreset key : keys) + if (!wasSorted) { + keys.sort(KeyPreset::compareTo); + wasSorted = true; + } + + for (KeyPreset key : keys) { key.tick(); + if (key.isDown) + return; + } }