diff options
| author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-10-12 13:34:42 +0200 |
|---|---|---|
| committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-10-12 13:34:42 +0200 |
| commit | 06ef6be0fd0b7085c7121f100dff354311287e2b (patch) | |
| tree | a001a11533641cff0b5194a0b29984f49a47fb63 /src/main/java/at/hannibal2/skyhanni/utils/KeyboardManager.kt | |
| parent | db0cd17c7019c072a5043ae8d0dca8ce6459fb32 (diff) | |
| download | skyhanni-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.kt | 78 |
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 |
