summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-10-12 13:34:42 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-10-12 13:34:42 +0200
commit06ef6be0fd0b7085c7121f100dff354311287e2b (patch)
treea001a11533641cff0b5194a0b29984f49a47fb63 /src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt
parentdb0cd17c7019c072a5043ae8d0dca8ce6459fb32 (diff)
downloadskyhanni-06ef6be0fd0b7085c7121f100dff354311287e2b.tar.gz
skyhanni-06ef6be0fd0b7085c7121f100dff354311287e2b.tar.bz2
skyhanni-06ef6be0fd0b7085c7121f100dff354311287e2b.zip
code cleanup, There are no Utils registered as listeners, and replacing OSUtils.isKeyHeld(key) to key.isKeyHeld()
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt
new file mode 100644
index 000000000..21a17e740
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt
@@ -0,0 +1,78 @@
+package at.hannibal2.skyhanni.utils
+
+import at.hannibal2.skyhanni.events.LorenzKeyPressEvent
+import at.hannibal2.skyhanni.events.LorenzTickEvent
+import io.github.moulberry.moulconfig.internal.KeybindHelper
+import net.minecraft.client.settings.KeyBinding
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import org.apache.commons.lang3.SystemUtils
+import org.lwjgl.input.Keyboard
+import org.lwjgl.input.Mouse
+
+object KeyboardManager {
+ private var lastClickedMouseButton = -1
+
+ // A mac-only key, represents Windows key on windows (but different key code)
+ fun isCommandKeyDown() = Keyboard.KEY_LMETA.isKeyHeld() || Keyboard.KEY_RMETA.isKeyHeld()
+ fun isControlKeyDown() = Keyboard.KEY_LCONTROL.isKeyHeld() || Keyboard.KEY_RCONTROL.isKeyHeld()
+ fun isShiftKeyDown() = Keyboard.KEY_LSHIFT.isKeyHeld() || Keyboard.KEY_RSHIFT.isKeyHeld()
+
+ fun isPastingKeysDown(): Boolean {
+ val modifierHeld = if (SystemUtils.IS_OS_MAC) isCommandKeyDown() else isControlKeyDown()
+ return modifierHeld && Keyboard.KEY_V.isKeyHeld()
+ }
+
+ @SubscribeEvent
+ fun onTick(event: LorenzTickEvent) {
+ if (Mouse.getEventButtonState() && Mouse.getEventButton() != -1) {
+ val key = Mouse.getEventButton() - 100
+ LorenzKeyPressEvent(key).postAndCatch()
+ lastClickedMouseButton = key
+ return
+ }
+
+ if (Keyboard.getEventKeyState() && Keyboard.getEventKey() != 0) {
+ val key = Keyboard.getEventKey()
+ LorenzKeyPressEvent(key).postAndCatch()
+ lastClickedMouseButton = -1
+ return
+ }
+
+ if (Mouse.getEventButton() == -1 && lastClickedMouseButton != -1) {
+ if (lastClickedMouseButton.isKeyHeld()) {
+ LorenzKeyPressEvent(lastClickedMouseButton).postAndCatch()
+ println("still holding")
+ return
+ }
+ lastClickedMouseButton = -1
+ }
+
+ // I don't know when this is needed
+ if (Keyboard.getEventKey() == 0) {
+ LorenzKeyPressEvent(Keyboard.getEventCharacter().code + 256).postAndCatch()
+ }
+ }
+
+ fun KeyBinding.isActive(): Boolean {
+ if (!Keyboard.isCreated()) return false
+ try {
+ if (keyCode.isKeyHeld()) return true
+ } catch (e: IndexOutOfBoundsException) {
+ println("KeyBinding isActive caused an IndexOutOfBoundsException with keyCode: $keyCode")
+ e.printStackTrace()
+ return false
+ }
+ return this.isKeyDown || this.isPressed
+ }
+
+ fun Int.isKeyHeld(): Boolean {
+ if (this == 0) return false
+ return if (this < 0) {
+ Mouse.isButtonDown(this + 100)
+ } else {
+ KeybindHelper.isKeyDown(this)
+ }
+ }
+
+ fun getKeyName(keyCode: Int): String = KeybindHelper.getKeyName(keyCode)
+} \ No newline at end of file