From d134fece41b7cfe4d8ff1c9176ff0e7f8a05420f Mon Sep 17 00:00:00 2001 From: martimavocado <39881008+martimavocado@users.noreply.github.com> Date: Fri, 9 Feb 2024 21:57:05 +0000 Subject: Added Sensitivity Reducer. #716 --- .../skyhanni/features/garden/SensitivityReducer.kt | 176 +++++++++++++++++++++ .../skyhanni/features/misc/LockMouseLook.kt | 6 +- 2 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/garden/SensitivityReducer.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features') diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/SensitivityReducer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/SensitivityReducer.kt new file mode 100644 index 000000000..e43563b14 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/SensitivityReducer.kt @@ -0,0 +1,176 @@ +package at.hannibal2.skyhanni.features.garden + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.features.garden.SensitivityReducerConfig +import at.hannibal2.skyhanni.events.ConfigLoadEvent +import at.hannibal2.skyhanni.events.DebugDataCollectEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.HypixelJoinEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.afterChange +import at.hannibal2.skyhanni.utils.RenderUtils.renderString +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import net.minecraft.client.Minecraft +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.math.abs +import kotlin.time.Duration.Companion.seconds + +object SensitivityReducer { + private val config get() = SkyHanniMod.feature.garden.sensitivityReducerConfig + private val storage get() = SkyHanniMod.feature.storage + private var isToggled = false + private var isManualToggle = false + private var lastCheckCooldown = SimpleTimeMark.farPast() + + private val mc get() = Minecraft.getMinecraft() + private val gameSettings = mc.gameSettings + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (!GardenAPI.inGarden()) { + if (isToggled && lastCheckCooldown.passedSince() > 1.seconds) { + lastCheckCooldown = SimpleTimeMark.now() + isToggled = false + restoreSensitivity() + } + return + } + if (isManualToggle) return + if (isToggled && config.onGround.get() && !mc.thePlayer.onGround) { + restoreSensitivity() + isToggled = false + return + } + when (config.mode) { + SensitivityReducerConfig.Mode.OFF -> { + if (isToggled) toggle(false) + return + } + SensitivityReducerConfig.Mode.TOOL -> { + if (isHoldingTool() && !isToggled) toggle(true) + else if (isToggled && !isHoldingTool()) toggle(false) + } + SensitivityReducerConfig.Mode.KEYBIND -> { + if (config.keybind.isKeyHeld() && !isToggled) toggle(true) + else if (isToggled && !config.keybind.isKeyHeld()) toggle(false) + } + else -> return + } + } + + @SubscribeEvent + fun onConfigInit(event: ConfigLoadEvent) { + config.reducingFactor.afterChange { + reloadSensitivity() + } + config.onlyPlot.afterChange { + if (isToggled && config.onlyPlot.get() && GardenAPI.onBarnPlot) { + restoreSensitivity() + isToggled = false + } + } + config.onGround.afterChange { + if (isToggled && config.onGround.get() && mc.thePlayer.onGround) { + restoreSensitivity() + isToggled = false + } + } + } + + private fun reloadSensitivity() { + if (isToggled || isManualToggle) { + restoreSensitivity() + lowerSensitivity() + } + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + if (!(isToggled || isManualToggle)) return + if (!config.showGUI) return + config.position.renderString("§eSensitivity Lowered", posLabel = "Sensitivity Lowered") + } + + private fun isHoldingTool(): Boolean { + return GardenAPI.toolInHand != null + } + + fun manualToggle() { + if (isToggled) { + LorenzUtils.chat("This command is disabled while holding a farming tool.") + return + } + isManualToggle = !isManualToggle + if (isManualToggle) { + lowerSensitivity(true) + } else restoreSensitivity(true) + } + + private fun lowerSensitivity(showMessage: Boolean = false) { + storage.savedMouseloweredSensitivity = gameSettings.mouseSensitivity + val divisor = config.reducingFactor.get() + LorenzUtils.debug("dividing by $divisor") + storage.savedMouseloweredSensitivity = gameSettings.mouseSensitivity + val newSens = + ((storage.savedMouseloweredSensitivity + (1F / 3F)) / divisor) - (1F / 3F) + gameSettings?.mouseSensitivity = newSens + if (showMessage) LorenzUtils.chat("§bMouse sensitivity is now lowered. Type /shsensreduce to restore your sensitivity.") + } + + private fun restoreSensitivity(showMessage: Boolean = false) { + gameSettings?.mouseSensitivity = SkyHanniMod.feature.storage.savedMouseloweredSensitivity + if (showMessage) LorenzUtils.chat("§bMouse sensitivity is now restored.") + } + + private fun toggle(state: Boolean) { + if (config.onlyPlot.get() && GardenAPI.onBarnPlot) return + if (config.onGround.get() && !mc.thePlayer.onGround) return + if (!isToggled) { + lowerSensitivity() + } else restoreSensitivity() + isToggled = state + } + + @SubscribeEvent + fun onLogin(event: HypixelJoinEvent) { + val divisor = config.reducingFactor.get() + val expectedLoweredSensitivity = ((divisor * (gameSettings.mouseSensitivity + 1F / 3F)) - 1F / 3F) + if (abs(storage.savedMouseloweredSensitivity - expectedLoweredSensitivity) <= 0.0001) { + LorenzUtils.debug("Fixing incorrectly lowered sensitivity") + isToggled = false + isManualToggle = false + restoreSensitivity() + } + } + + @SubscribeEvent + fun onDebugDataCollect(event: DebugDataCollectEvent) { + event.title("Garden Sensitivity Reducer") + + if (!GardenAPI.inGarden()) { + event.addIrrelevant("not in garden") + return + } + + if (config.mode == SensitivityReducerConfig.Mode.OFF) { + event.addIrrelevant("disabled in config") + return + } + + event.addData { + add("Current Sensitivity: ${gameSettings.mouseSensitivity}") + add("Stored Sensitivity: ${storage.savedMouseloweredSensitivity}") + add("onGround: ${mc.thePlayer.onGround}") + add("onBarn: ${GardenAPI.onBarnPlot}") + add("enabled: ${isToggled || isManualToggle}") + add("--- config ---") + add("mode: ${config.mode.name}") + add("Current Divisor: ${config.reducingFactor.get()}") + add("Keybind: ${config.keybind}") + add("onlyGround: ${config.onGround}") + add("onlyPlot: ${config.onlyPlot}") + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt index 4025c32e2..be4bb05f3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/LockMouseLook.kt @@ -18,7 +18,7 @@ object LockMouseLook { if (lockedMouse) toggleLock() val gameSettings = Minecraft.getMinecraft().gameSettings if (gameSettings.mouseSensitivity == lockedPosition) { - gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouseSensitivity + gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouselockedSensitivity LorenzUtils.chat("§bMouse rotation is now unlocked because you left it locked.") } } @@ -28,13 +28,13 @@ object LockMouseLook { lockedMouse = !lockedMouse if (lockedMouse) { - SkyHanniMod.feature.storage.savedMouseSensitivity = gameSettings.mouseSensitivity + SkyHanniMod.feature.storage.savedMouselockedSensitivity = gameSettings.mouseSensitivity gameSettings.mouseSensitivity = lockedPosition if (config.lockMouseLookChatMessage) { LorenzUtils.chat("§bMouse rotation is now locked. Type /shmouselock to unlock your rotation") } } else { - gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouseSensitivity + gameSettings.mouseSensitivity = SkyHanniMod.feature.storage.savedMouselockedSensitivity if (config.lockMouseLookChatMessage) { LorenzUtils.chat("§bMouse rotation is now unlocked.") } -- cgit