aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-04 00:23:11 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-04 00:23:11 +0100
commite2c7360e9a87e07a0b8dbf0d2180e4961908582b (patch)
tree9706fba37df0a61aba83ca0970a07d09b08ffef0 /src/main
parent914f78e3cb19c73b357f58cf54c9534094cbef1a (diff)
downloadskyhanni-e2c7360e9a87e07a0b8dbf0d2180e4961908582b.tar.gz
skyhanni-e2c7360e9a87e07a0b8dbf0d2180e4961908582b.tar.bz2
skyhanni-e2c7360e9a87e07a0b8dbf0d2180e4961908582b.zip
garden keybinds.
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java1
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/Features.java27
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/Garden.java64
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt106
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/AccessorKeyBinding.java12
-rw-r--r--src/main/resources/mixins.skyhanni.json1
6 files changed, 211 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
index 42693324a..afb204dca 100644
--- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
+++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.java
@@ -210,6 +210,7 @@ public class SkyHanniMod {
loadModule(new GardenVisitorTimer());
loadModule(new GardenNextPlotPrice());
loadModule(new GardenCropMilestoneDisplay());
+ loadModule(new GardenCustomKeybinds());
Commands.INSTANCE.init();
diff --git a/src/main/java/at/hannibal2/skyhanni/config/Features.java b/src/main/java/at/hannibal2/skyhanni/config/Features.java
index abed49281..9eb7554cf 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/Features.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/Features.java
@@ -12,6 +12,7 @@ import at.hannibal2.skyhanni.features.misc.HideArmor;
import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager;
import com.google.gson.annotations.Expose;
import net.minecraft.client.Minecraft;
+import org.lwjgl.input.Keyboard;
public class Features extends Config {
@@ -166,6 +167,32 @@ public class Features extends Config {
editOverlay(activeConfigCategory, 200, 16, bingo.bingoCardPos);
return;
}
+
+ if (runnableId.equals("gardenKeyBindPresetDisabled")) {
+ garden.keyBindAttack = Keyboard.KEY_NONE;
+ garden.keyBindLeft = Keyboard.KEY_NONE;
+ garden.keyBindRight = Keyboard.KEY_NONE;
+ garden.keyBindForward = Keyboard.KEY_NONE;
+ garden.keyBindBack = Keyboard.KEY_NONE;
+ garden.keyBindJump = Keyboard.KEY_NONE;
+ garden.keyBindSneak = Keyboard.KEY_NONE;
+
+ Minecraft.getMinecraft().thePlayer.closeScreen();
+ return;
+ }
+
+ if (runnableId.equals("gardenKeyBindPresetDefault")) {
+ garden.keyBindAttack = -100;
+ garden.keyBindLeft = Keyboard.KEY_A;
+ garden.keyBindRight = Keyboard.KEY_D;
+ garden.keyBindForward = Keyboard.KEY_W;
+ garden.keyBindBack = Keyboard.KEY_S;
+ garden.keyBindJump = Keyboard.KEY_SPACE;
+ garden.keyBindSneak = Keyboard.KEY_LSHIFT;
+
+ Minecraft.getMinecraft().thePlayer.closeScreen();
+ return;
+ }
}
@Expose
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
index 74f48da48..0c8b824d2 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/Garden.java
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.config.features;
import at.hannibal2.skyhanni.config.core.config.Position;
import at.hannibal2.skyhanni.config.core.config.annotations.*;
import com.google.gson.annotations.Expose;
+import org.lwjgl.input.Keyboard;
public class Garden {
@@ -205,4 +206,67 @@ public class Garden {
@ConfigOption(name = "Plot Price", desc = "Show the price of the plot in coins when inside the Configure Plots inventory.")
@ConfigEditorBoolean
public boolean plotPrice = true;
+
+ @Expose
+ @ConfigOption(name = "Custom Keybind", desc = "")
+ @ConfigEditorAccordion(id = 8)
+ public boolean keybind = false;
+
+ @Expose
+ @ConfigOption(name = "Enabled", desc = "Use custom keybinds while having a farming tool in the hand in the garden.")
+ @ConfigEditorBoolean
+ @ConfigAccordionId(id = 8)
+ public boolean keyBindEnabled = false;
+
+ @ConfigOption(name = "Disable All", desc = "Disabling all keys.")
+ @ConfigEditorButton(runnableId = "gardenKeyBindPresetDisabled", buttonText = "Disable")
+ @ConfigAccordionId(id = 8)
+ public int keyBindPresetDisable = 0;
+
+ @ConfigOption(name = "Set Default", desc = "Reset all keys to default.")
+ @ConfigEditorButton(runnableId = "gardenKeyBindPresetDefault", buttonText = "Default")
+ @ConfigAccordionId(id = 8)
+ public int keyBindPresetDefault = 0;
+
+ @Expose
+ @ConfigOption(name = "Attack", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = -100)
+ public int keyBindAttack = -100;
+
+ @Expose
+ @ConfigOption(name = "Move Left", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_A)
+ public int keyBindLeft = Keyboard.KEY_A;
+
+ @Expose
+ @ConfigOption(name = "Move Right", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_D)
+ public int keyBindRight = Keyboard.KEY_D;
+
+ @Expose
+ @ConfigOption(name = "Move Forward", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_W)
+ public int keyBindForward = Keyboard.KEY_W;
+
+ @Expose
+ @ConfigOption(name = "Move Back", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_S)
+ public int keyBindBack = Keyboard.KEY_S;
+
+ @Expose
+ @ConfigOption(name = "Jump", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_SPACE)
+ public int keyBindJump = Keyboard.KEY_SPACE;
+
+ @Expose
+ @ConfigOption(name = "Sneak", desc = "")
+ @ConfigAccordionId(id = 8)
+ @ConfigEditorKeybind(defaultKey = Keyboard.KEY_LSHIFT)
+ public int keyBindSneak = Keyboard.KEY_LSHIFT;
}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt
new file mode 100644
index 000000000..f80fcb0ce
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenCustomKeybinds.kt
@@ -0,0 +1,106 @@
+package at.hannibal2.skyhanni.features.garden
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.config.core.config.KeybindHelper
+import at.hannibal2.skyhanni.config.features.Garden
+import at.hannibal2.skyhanni.events.GardenToolChangeEvent
+import at.hannibal2.skyhanni.mixins.transformers.AccessorKeyBinding
+import net.minecraft.client.Minecraft
+import net.minecraft.client.settings.KeyBinding
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class GardenCustomKeybinds {
+ private val shConfig: Garden get() = SkyHanniMod.feature.garden
+ private val mcSettings get() = Minecraft.getMinecraft().gameSettings
+
+ private val cache = mutableMapOf<KeyBinding, Int>()
+ private val map = mutableMapOf<KeyBinding, () -> Int>()
+
+ init {
+ map[mcSettings.keyBindAttack] = { shConfig.keyBindAttack }
+ map[mcSettings.keyBindLeft] = { shConfig.keyBindLeft }
+ map[mcSettings.keyBindRight] = { shConfig.keyBindRight }
+ map[mcSettings.keyBindForward] = { shConfig.keyBindForward }
+ map[mcSettings.keyBindBack] = { shConfig.keyBindBack }
+ map[mcSettings.keyBindJump] = { shConfig.keyBindJump }
+ map[mcSettings.keyBindSneak] = { shConfig.keyBindSneak }
+
+ Runtime.getRuntime().addShutdownHook(Thread { reset() })
+ }
+
+ @SubscribeEvent
+ fun onGardenToolChange(event: GardenToolChangeEvent) {
+ if (isEnabled() && GardenAPI.cropInHand != null) {
+ applyCustomKeybinds()
+ } else {
+ reset()
+ }
+ }
+
+ @SubscribeEvent
+ fun onWorldChange(event: WorldEvent.Load) {
+ reset()
+ }
+
+ private fun applyCustomKeybinds() {
+ val alreadyBoundedKeys = mutableListOf<Int>()
+ var counter = 0
+ for ((mcBinding, skyHanniBinding) in map) {
+ val newKeyCode = skyHanniBinding()
+ if (newKeyCode == mcBinding.keyCode) continue
+
+ disableAlreadyExistingKeybinds(newKeyCode, alreadyBoundedKeys)
+
+ if (!cache.containsKey(mcBinding)) {
+ cache[mcBinding] = mcBinding.keyCode
+ mcBinding.unpressKeyIfDown()
+ }
+
+ mcBinding.keyCode = newKeyCode
+ alreadyBoundedKeys.add(mcBinding.keyCodeDefault)
+ counter++
+ }
+
+ if (counter > 0) {
+ KeyBinding.resetKeyBindingArrayAndHash()
+ }
+ }
+
+ private fun disableAlreadyExistingKeybinds(newKeyCode: Int, alreadyBoundedKeys: MutableList<Int>) {
+ if (newKeyCode != 0) {
+ for (keyBinding in mcSettings.keyBindings) {
+ if (keyBinding.keyCode == newKeyCode) {
+ if (!alreadyBoundedKeys.contains(keyBinding.keyCodeDefault)) {
+ keyBinding.unpressKeyIfDown()
+ cache[keyBinding] = keyBinding.keyCode
+ keyBinding.keyCode = 0
+ }
+ }
+ }
+ }
+ }
+
+ private fun reset() {
+ var counter = 0
+ for ((key, keyCode) in cache) {
+ if (key.keyCode != keyCode) {
+ key.unpressKeyIfDown()
+ counter++
+ key.keyCode = keyCode
+ }
+ }
+ cache.clear()
+ if (counter > 0) {
+ KeyBinding.resetKeyBindingArrayAndHash()
+ }
+ }
+
+ private fun KeyBinding.unpressKeyIfDown() {
+ if (KeybindHelper.isKeyDown(keyCode)) {
+ (this as AccessorKeyBinding).skyhanni_unpressKey()
+ }
+ }
+
+ private fun isEnabled() = GardenAPI.inGarden() && shConfig.keyBindEnabled
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/AccessorKeyBinding.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/AccessorKeyBinding.java
new file mode 100644
index 000000000..f19859468
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/AccessorKeyBinding.java
@@ -0,0 +1,12 @@
+package at.hannibal2.skyhanni.mixins.transformers;
+
+import net.minecraft.client.settings.KeyBinding;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(KeyBinding.class)
+public interface AccessorKeyBinding {
+
+ @Invoker("unpressKey")
+ void skyhanni_unpressKey();
+}
diff --git a/src/main/resources/mixins.skyhanni.json b/src/main/resources/mixins.skyhanni.json
index efb308c4a..683d8405c 100644
--- a/src/main/resources/mixins.skyhanni.json
+++ b/src/main/resources/mixins.skyhanni.json
@@ -17,6 +17,7 @@
"renderer.MixinRendererLivingEntity"
],
"client": [
+ "AccessorKeyBinding",
"MixinGuiIngame",
"gui.MixinGuiNewChat"
]