From b426312a8eeaa00e3469f8d136bd4ee1d4debc53 Mon Sep 17 00:00:00 2001 From: isXander Date: Sun, 26 Mar 2023 22:32:53 +0100 Subject: [PATCH] reduce bow sensitivity option --- .../compatibility/yacl/YACLScreenProcessor.java | 15 +++++++++++++++ .../controlify/config/gui/YACLHelper.java | 6 ++++++ .../controlify/controller/ControllerConfig.java | 2 ++ .../controlify/ingame/InGameInputHandler.java | 9 ++++++++- .../resources/assets/controlify/lang/en_us.json | 2 ++ 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/isxander/controlify/compatibility/yacl/YACLScreenProcessor.java b/src/main/java/dev/isxander/controlify/compatibility/yacl/YACLScreenProcessor.java index 1cb50b3..3035cf2 100644 --- a/src/main/java/dev/isxander/controlify/compatibility/yacl/YACLScreenProcessor.java +++ b/src/main/java/dev/isxander/controlify/compatibility/yacl/YACLScreenProcessor.java @@ -1,5 +1,8 @@ package dev.isxander.controlify.compatibility.yacl; +import dev.isxander.controlify.api.buttonguide.ButtonGuideApi; +import dev.isxander.controlify.api.buttonguide.ButtonGuidePredicate; +import dev.isxander.controlify.api.buttonguide.ButtonRenderPosition; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.screenop.ScreenProcessor; import dev.isxander.yacl.gui.YACLScreen; @@ -11,6 +14,12 @@ public class YACLScreenProcessor extends ScreenProcessor { @Override protected void handleComponentNavigation(Controller controller) { + if (controller.bindings().GUI_ABSTRACT_ACTION_1.justPressed()) { + this.playClackSound(); + screen.finishedSaveButton.onPress(); + return; + } + if (controller.bindings().GUI_NEXT_TAB.justPressed()) { var idx = screen.getCurrentCategoryIdx() + 1; if (idx >= screen.config.categories().size()) idx = 0; @@ -25,6 +34,12 @@ public class YACLScreenProcessor extends ScreenProcessor { super.handleComponentNavigation(controller); } + @Override + public void onWidgetRebuild() { + // currently doesn't work because TextScaledButtonWidget overrides renderString + ButtonGuideApi.addGuideToButton(screen.finishedSaveButton, bindings -> bindings.GUI_ABSTRACT_ACTION_1, ButtonRenderPosition.TEXT, ButtonGuidePredicate.ALWAYS); + } + @Override protected void setInitialFocus() { screen.setFocused(screen.optionList); diff --git a/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java b/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java index e854b99..dd58ff4 100644 --- a/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java +++ b/src/main/java/dev/isxander/controlify/config/gui/YACLHelper.java @@ -153,6 +153,12 @@ public class YACLHelper { .tooltip(Component.translatable("controlify.gui.chat_screen_offset.tooltip")) .binding(def.chatKeyboardHeight, () -> config.chatKeyboardHeight, v -> config.chatKeyboardHeight = v) .controller(opt -> new FloatSliderController(opt, 0f, 0.8f, 0.1f, percentFormatter)) + .build()) + .option(Option.createBuilder(boolean.class) + .name(Component.translatable("controlify.gui.reduce_bow_sensitivity")) + .tooltip(Component.translatable("controlify.gui.reduce_bow_sensitivity.tooltip")) + .binding(def.reduceBowSensitivity, () -> config.reduceBowSensitivity, v -> config.reduceBowSensitivity = v) + .controller(TickBoxController::new) .build()); if (controller instanceof GamepadController gamepad) { diff --git a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java index 3ade9d0..9626b16 100644 --- a/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java +++ b/src/main/java/dev/isxander/controlify/controller/ControllerConfig.java @@ -21,6 +21,8 @@ public abstract class ControllerConfig { public float chatKeyboardHeight = 0f; + public boolean reduceBowSensitivity = true; + public boolean calibrated = false; public abstract void setDeadzone(int axis, float deadzone); diff --git a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java index ce16c65..214b014 100644 --- a/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java +++ b/src/main/java/dev/isxander/controlify/ingame/InGameInputHandler.java @@ -6,6 +6,8 @@ import dev.isxander.controlify.api.event.ControlifyEvents; import net.minecraft.client.Minecraft; import net.minecraft.client.player.KeyboardInput; import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.ProjectileWeaponItem; public class InGameInputHandler { private final Controller controller; @@ -63,9 +65,14 @@ public class InGameInputHandler { var impulseY = controller.bindings().LOOK_DOWN.state() - controller.bindings().LOOK_UP.state(); var impulseX = controller.bindings().LOOK_RIGHT.state() - controller.bindings().LOOK_LEFT.state(); - if (minecraft.mouseHandler.isMouseGrabbed() && minecraft.isWindowActive()) { + if (minecraft.mouseHandler.isMouseGrabbed() && minecraft.isWindowActive() && minecraft.player != null) { lookInputX = impulseX * Math.abs(impulseX) * controller.config().horizontalLookSensitivity; lookInputY = impulseY * Math.abs(impulseY) * controller.config().verticalLookSensitivity; + + if (controller.config().reduceBowSensitivity && minecraft.player.getUseItem().getItem() instanceof ProjectileWeaponItem) { + lookInputX *= Math.abs(impulseX) * 0.6; + lookInputY *= Math.abs(impulseY) * 0.6; + } } else { lookInputX = lookInputY = 0; } diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index 617e259..5b5361d 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -30,6 +30,8 @@ "controlify.gui.chat_screen_offset.tooltip": "How far up the system on-screen keyboard is. This shifts up the chat box so you can see the chat whilst typing.\nThis is extremely useful on the steamdeck.", "controlify.gui.controller_theme": "Controller Theme", "controlify.gui.controller_theme.tooltip": "The theme to use for rendering controller buttons.", + "controlify.gui.reduce_bow_sensitivity": "Reduce Bow Sensitivity", + "controlify.gui.reduce_bow_sensitivity.tooltip": "Reduce the sensitivity of bow-like items when aiming.", "controlify.gui.custom_name": "Display Name", "controlify.gui.custom_name.tooltip": "Name to display for this controller throughout Minecraft.", "controlify.gui.group.advanced": "Advanced",