From be98cef35e8209588a77b5a0f6a5018afc72dc0d Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Thu, 16 Oct 2025 22:45:58 -0500 Subject: [PATCH 1/7] Add neoforge keybind to send keyboard presses --- modstitch.accesswidener | 2 + .../bindings/ControlifyBindings.java | 6 +++ .../gui/screen/RadialMenuScreen.java | 52 ++++++++++++++++--- 3 files changed, 54 insertions(+), 6 deletions(-) diff --git a/modstitch.accesswidener b/modstitch.accesswidener index 89bd0d272..cd812b808 100644 --- a/modstitch.accesswidener +++ b/modstitch.accesswidener @@ -2,3 +2,5 @@ accessWidener v1 named accessible class net/minecraft/client/gui/GuiGraphics$ScissorStack accessible method net/minecraft/client/gui/GuiGraphics$ScissorStack peek ()Lnet/minecraft/client/gui/navigation/ScreenRectangle; + +accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map; diff --git a/src/main/java/dev/isxander/controlify/bindings/ControlifyBindings.java b/src/main/java/dev/isxander/controlify/bindings/ControlifyBindings.java index 0c568a797..b16644246 100644 --- a/src/main/java/dev/isxander/controlify/bindings/ControlifyBindings.java +++ b/src/main/java/dev/isxander/controlify/bindings/ControlifyBindings.java @@ -311,6 +311,12 @@ public final class ControlifyBindings { .id("controlify", "radial_axis_right") .category(RADIAL_CATEGORY) .allowedContexts(BindContext.RADIAL_MENU)); + //? if neoforge { + public static final InputBindingSupplier RADIAL_SEND_KEY = ControlifyBindApi.get().registerBinding(builder -> builder + .id("controlify", "radial_send_key") + .category(RADIAL_CATEGORY) + .allowedContexts(BindContext.RADIAL_MENU)); + //?} public static final InputBindingSupplier VMOUSE_MOVE_UP = ControlifyBindApi.get().registerBinding(builder -> builder .id("controlify", "vmouse_move_up") diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index 99c73c6fc..f9d134677 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -19,6 +19,7 @@ import dev.isxander.controlify.utils.render.Blit; import dev.isxander.controlify.utils.render.CGuiPose; import dev.isxander.controlify.virtualmouse.VirtualMouseBehaviour; +import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.ComponentPath; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.MultiLineLabel; @@ -31,6 +32,9 @@ import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.screens.Screen; +//? if >= 1.21.9 && neoforge { +//import net.minecraft.client.input.KeyEvent; +//?} import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -38,6 +42,12 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; +import org.lwjgl.glfw.GLFW; + +//? if neoforge { +/*import net.neoforged.neoforge.client.event.InputEvent; +import net.neoforged.neoforge.common.NeoForge; +*///?} import java.util.ArrayList; import java.util.List; @@ -109,7 +119,7 @@ protected void init() { } animation.play(); - if (editMode != null) { +// if (editMode != null) { // var exitGuide = addRenderableWidget(new PositionedComponent<>( // new GuideActionRenderer( // new GuideAction( @@ -126,19 +136,49 @@ protected void init() { // // exitGuide.getComponent().updateName(null); // exitGuide.updatePosition(width, height); - } +// } } @Override public void onControllerInput(ControllerEntity controller) { if (this.controller != controller) return; - if (editMode == null && !openBind.digitalNow()) { - if (selectedButton != -1 && buttons[selectedButton].invoke()) { - playClickSound(); + if (editMode == null) { + //? if neoforge { + /*if (ControlifyBindings.RADIAL_SEND_KEY.on(controller).justPressed()) { + onClose(); + + if (selectedButton != -1) { + NeoForge.EVENT_BUS.post( + new InputEvent.Key( + //? if >= 1.21.9 { + new KeyEvent(KeyMapping.ALL.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), 0, 0), + GLFW.GLFW_PRESS + //?} elif >= 1.21.4 { + //KeyMapping.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), + //0, + //GLFW.GLFW_PRESS, + //0 + //?} else { + //KeyMapping.ALL.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), + //0, + //GLFW.GLFW_PRESS, + //0 + //?} + ) + ); + playClickSound(); + } } + *///?} - onClose(); + if (!openBind.digitalNow()) { + if (selectedButton != -1 && buttons[selectedButton].invoke()) { + playClickSound(); + } + + onClose(); + } } if (editMode != null && ControlifyBindings.GUI_BACK.on(controller).justPressed()) { From 2ec177917592ffad624d80afe81937a334569f31 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Fri, 17 Oct 2025 17:14:35 -0500 Subject: [PATCH 2/7] Add language key --- src/main/resources/assets/controlify/lang/en_us.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index cc40fdeeb..764b669c5 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -309,6 +309,7 @@ "controlify.binding.controlify.radial_axis_down": "Radial Menu Down", "controlify.binding.controlify.radial_axis_left": "Radial Menu Left", "controlify.binding.controlify.radial_axis_right": "Radial Menu Right", + "controlify.binding.controlify.radial_send_key": "Radial Menu Send Key", "controlify.binding.controlify.game_mode_switcher": "Game Mode Switcher", "controlify.binding.controlify.vmouse_move_up": "VMouse Move Up", "controlify.binding.controlify.vmouse_move_down": "VMouse Move Down", From 0cde32aed6b4cb92a42c0f81afbb47524c8bd4c7 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Fri, 17 Oct 2025 18:45:45 -0500 Subject: [PATCH 3/7] Fix crash & implement accessor --- modstitch.accesswidener | 2 - .../gui/screen/RadialMenuScreen.java | 61 +++++++++++-------- .../feature/bind/KeyMappingAccessor.java | 16 +++++ src/main/resources/controlify.mixins.json | 3 +- 4 files changed, 54 insertions(+), 28 deletions(-) create mode 100644 src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java diff --git a/modstitch.accesswidener b/modstitch.accesswidener index cd812b808..89bd0d272 100644 --- a/modstitch.accesswidener +++ b/modstitch.accesswidener @@ -2,5 +2,3 @@ accessWidener v1 named accessible class net/minecraft/client/gui/GuiGraphics$ScissorStack accessible method net/minecraft/client/gui/GuiGraphics$ScissorStack peek ()Lnet/minecraft/client/gui/navigation/ScreenRectangle; - -accessible field net/minecraft/client/KeyMapping ALL Ljava/util/Map; diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index f9d134677..37723b6ac 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -19,7 +19,6 @@ import dev.isxander.controlify.utils.render.Blit; import dev.isxander.controlify.utils.render.CGuiPose; import dev.isxander.controlify.virtualmouse.VirtualMouseBehaviour; -import net.minecraft.client.KeyMapping; import net.minecraft.client.gui.ComponentPath; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.MultiLineLabel; @@ -32,9 +31,6 @@ import net.minecraft.client.gui.navigation.FocusNavigationEvent; import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.screens.Screen; -//? if >= 1.21.9 && neoforge { -//import net.minecraft.client.input.KeyEvent; -//?} import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; @@ -42,11 +38,21 @@ import net.minecraft.sounds.SoundEvents; import net.minecraft.util.Mth; import org.jetbrains.annotations.Nullable; -import org.lwjgl.glfw.GLFW; //? if neoforge { -/*import net.neoforged.neoforge.client.event.InputEvent; +/*import net.minecraft.client.KeyMapping; +import org.lwjgl.glfw.GLFW; +import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.common.NeoForge; + +//? if >= 1.21.9 { +//import net.minecraft.client.input.KeyEvent; +//?} + +//? if < 1.21.4 { +//import dev.isxander.controlify.mixins.feature.bind.KeyMappingAccessor; +//?} + *///?} import java.util.ArrayList; @@ -149,25 +155,30 @@ public void onControllerInput(ControllerEntity controller) { onClose(); if (selectedButton != -1) { - NeoForge.EVENT_BUS.post( - new InputEvent.Key( - //? if >= 1.21.9 { - new KeyEvent(KeyMapping.ALL.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), 0, 0), - GLFW.GLFW_PRESS - //?} elif >= 1.21.4 { - //KeyMapping.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), - //0, - //GLFW.GLFW_PRESS, - //0 - //?} else { - //KeyMapping.ALL.get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()).getKey().getValue(), - //0, - //GLFW.GLFW_PRESS, - //0 - //?} - ) - ); - playClickSound(); + @Nullable KeyMapping km = + //? if >= 1.21.4 { + KeyMapping + //?} else { + //KeyMappingAccessor.getAll() + //?} + .get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()); + + if (km != null) { + NeoForge.EVENT_BUS.post( + new InputEvent.Key( + //? if >= 1.21.9 { + new KeyEvent(km.getKey().getValue(), 0, 0), + GLFW.GLFW_PRESS + //?} else { + //km.getKey().getValue(), + //0, + //GLFW.GLFW_PRESS, + //0 + //?} + ) + ); + playClickSound(); + } } } *///?} diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java b/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java new file mode 100644 index 000000000..65d20cf44 --- /dev/null +++ b/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java @@ -0,0 +1,16 @@ +package dev.isxander.controlify.mixins.feature.bind; + +import net.minecraft.client.KeyMapping; +import org.apache.commons.lang3.NotImplementedException; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(KeyMapping.class) +public interface KeyMappingAccessor { + @Accessor("ALL") + static Map getAll() { + throw new NotImplementedException("Should be overwritten by Accessor"); + } +} diff --git a/src/main/resources/controlify.mixins.json b/src/main/resources/controlify.mixins.json index 344e3687d..73ee5d653 100644 --- a/src/main/resources/controlify.mixins.json +++ b/src/main/resources/controlify.mixins.json @@ -20,6 +20,7 @@ "core.MouseHandlerMixin", "feature.accessibility.LocalPlayerMixin", "feature.bind.GuiMixin", + "feature.bind.KeyMappingAccessor", "feature.bind.KeyMappingMixin", "feature.bind.MinecraftMixin", "feature.bind.ToggleKeyMappingMixin", @@ -86,10 +87,10 @@ "feature.screenop.impl.elements.EditBoxMixin", "feature.screenop.impl.outofgame.CreateWorldScreenMixin", "feature.screenop.impl.outofgame.DirectJoinServerScreenMixin", - "feature.screenop.impl.outofgame.ManageServerScreenMixin", "feature.screenop.impl.outofgame.JoinMultiplayerScreenAccessor", "feature.screenop.impl.outofgame.JoinMultiplayerScreenMixin", "feature.screenop.impl.outofgame.LanguageSelectionListEntryMixin", + "feature.screenop.impl.outofgame.ManageServerScreenMixin", "feature.screenop.impl.outofgame.OptionsSubScreenAccessor", "feature.screenop.impl.outofgame.PauseScreenAccessor", "feature.screenop.impl.outofgame.PauseScreenMixin", From 749a01a04dd74de74e259e19cc35a02fdeaa8765 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Fri, 17 Oct 2025 18:51:46 -0500 Subject: [PATCH 4/7] Cleanup --- .../controlify/gui/screen/RadialMenuScreen.java | 12 ++++++------ src/main/resources/controlify.mixins.json | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index 37723b6ac..3eb909901 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -6,8 +6,8 @@ import dev.isxander.controlify.api.bind.InputBinding; import dev.isxander.controlify.controller.ControllerEntity; import dev.isxander.controlify.controller.haptic.HapticEffects; -import dev.isxander.controlify.gui.layout.AnchorPoint; -import dev.isxander.controlify.gui.layout.PositionedComponent; +//import dev.isxander.controlify.gui.layout.AnchorPoint; +//import dev.isxander.controlify.gui.layout.PositionedComponent; import dev.isxander.controlify.screenop.ComponentProcessor; import dev.isxander.controlify.screenop.ScreenControllerEventListener; import dev.isxander.controlify.screenop.ScreenProcessor; @@ -32,7 +32,7 @@ import net.minecraft.client.gui.navigation.ScreenRectangle; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.resources.sounds.SimpleSoundInstance; -import net.minecraft.network.chat.CommonComponents; +//import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; @@ -57,7 +57,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.Optional; +//import java.util.Optional; public class RadialMenuScreen extends Screen implements ScreenControllerEventListener, ScreenProcessorProvider { public static final ResourceLocation EMPTY_ACTION = CUtil.rl("empty_action"); @@ -427,8 +427,8 @@ public ScreenRectangle getRectangle() { public class ActionSelectList implements Renderable, ContainerEventHandler, NarratableEntry, ComponentProcessor { private final int radialIndex; - private int x, y; - private int width, height; + private final int x, y; + private final int width, height; private final int itemHeight = 10; private int scrollOffset; diff --git a/src/main/resources/controlify.mixins.json b/src/main/resources/controlify.mixins.json index 73ee5d653..1ab39af6c 100644 --- a/src/main/resources/controlify.mixins.json +++ b/src/main/resources/controlify.mixins.json @@ -87,10 +87,10 @@ "feature.screenop.impl.elements.EditBoxMixin", "feature.screenop.impl.outofgame.CreateWorldScreenMixin", "feature.screenop.impl.outofgame.DirectJoinServerScreenMixin", + "feature.screenop.impl.outofgame.ManageServerScreenMixin", "feature.screenop.impl.outofgame.JoinMultiplayerScreenAccessor", "feature.screenop.impl.outofgame.JoinMultiplayerScreenMixin", "feature.screenop.impl.outofgame.LanguageSelectionListEntryMixin", - "feature.screenop.impl.outofgame.ManageServerScreenMixin", "feature.screenop.impl.outofgame.OptionsSubScreenAccessor", "feature.screenop.impl.outofgame.PauseScreenAccessor", "feature.screenop.impl.outofgame.PauseScreenMixin", From e9da800a7734ce19033a0c1d903f9896752b8a63 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Fri, 24 Oct 2025 17:04:46 -0500 Subject: [PATCH 5/7] Add option to set keybinds down. --- .../controller/input/InputComponent.java | 4 +++ .../screen/ControllerConfigScreenFactory.java | 9 ++++++ .../gui/screen/RadialMenuScreen.java | 29 +++++++++++++++++++ .../assets/controlify/lang/en_us.json | 3 ++ 4 files changed, 45 insertions(+) diff --git a/src/main/java/dev/isxander/controlify/controller/input/InputComponent.java b/src/main/java/dev/isxander/controlify/controller/input/InputComponent.java index 3bb512b5d..b13e899cf 100644 --- a/src/main/java/dev/isxander/controlify/controller/input/InputComponent.java +++ b/src/main/java/dev/isxander/controlify/controller/input/InputComponent.java @@ -228,6 +228,10 @@ public Config(@Nullable ControllerMapping typeProvidedMapping) { public boolean mixedInput = false; + //? if neoforge { + public boolean setKeysDownWithRadialEvent = true; + //?} + public boolean keepDefaultBindings = false; public ResourceLocation[] radialActions = new ResourceLocation[8]; diff --git a/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java b/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java index 0ad7399a2..299412fc2 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/ControllerConfigScreenFactory.java @@ -347,6 +347,15 @@ private ConfigCategory createAdvancedCategory(ControllerEntity controller) { .controller(TickBoxControllerBuilder::create) .build())); + //? if neoforge { + input.ifPresent(inputComponent -> builder.option(Option.createBuilder() + .name(Component.translatable("controlify.gui.set_keys_down_with_radial_event")) + .description(OptionDescription.of(Component.translatable("controlify.gui.set_keys_down_with_radial_event.tooltip"))) + .binding(inputComponent.defObj().setKeysDownWithRadialEvent, () -> inputComponent.confObj().setKeysDownWithRadialEvent, v -> inputComponent.confObj().setKeysDownWithRadialEvent = v) + .controller(TickBoxControllerBuilder::create) + .build())); + //?} + makeVibrationGroup(controller).ifPresent(builder::group); makeGyroGroup(controller).ifPresent(builder::group); makeControllerMappingGroup(controller).ifPresent(builder::group); diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index 3eb909901..e69792a86 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -44,6 +44,10 @@ import org.lwjgl.glfw.GLFW; import net.neoforged.neoforge.client.event.InputEvent; import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.bus.api.EventPriority; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.api.distmarker.Dist; //? if >= 1.21.9 { //import net.minecraft.client.input.KeyEvent; @@ -59,6 +63,9 @@ import java.util.List; //import java.util.Optional; +//? if neoforge { +//@EventBusSubscriber(modid = "controlify", bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) +//?} public class RadialMenuScreen extends Screen implements ScreenControllerEventListener, ScreenProcessorProvider { public static final ResourceLocation EMPTY_ACTION = CUtil.rl("empty_action"); @@ -145,6 +152,25 @@ protected void init() { // } } + //? if neoforge { + /*private static KeyMapping keyToPress = null; + private static boolean setKeysDownWithRadialEvent = true; + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void onKeyInputBefore(InputEvent.Key event) { + if (setKeysDownWithRadialEvent && keyToPress != null) + keyToPress.setDown(true); + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public static void onKeyInputAfter(InputEvent.Key event) { + if (setKeysDownWithRadialEvent && keyToPress != null) { + keyToPress.setDown(false); + keyToPress = null; + } + } + *///?} + @Override public void onControllerInput(ControllerEntity controller) { if (this.controller != controller) return; @@ -163,6 +189,9 @@ public void onControllerInput(ControllerEntity controller) { //?} .get(controller.input().orElseThrow().confObj().radialActions[selectedButton].getPath()); + keyToPress = km; + setKeysDownWithRadialEvent = controller.input().orElseThrow().confObj().setKeysDownWithRadialEvent; + if (km != null) { NeoForge.EVENT_BUS.post( new InputEvent.Key( diff --git a/src/main/resources/assets/controlify/lang/en_us.json b/src/main/resources/assets/controlify/lang/en_us.json index 764b669c5..7237c9d8f 100644 --- a/src/main/resources/assets/controlify/lang/en_us.json +++ b/src/main/resources/assets/controlify/lang/en_us.json @@ -112,6 +112,8 @@ "controlify.config.category.advanced": "Advanced", "controlify.gui.mixed_input": "Mixed Input", "controlify.gui.mixed_input.tooltip": "If enabled, Controlify will allow you to use both this controller and keyboard/mouse at the same time. This should be used when pairing with Steam Input, where certain advanced controller actions needs to be mapped to these inputs, rather than a gamepad. Be aware, this prevents you from entering normal keyboard/mouse mode whilst this controller is in use.", + "controlify.gui.set_keys_down_with_radial_event": "Set Keys Down With Radial Event", + "controlify.gui.set_keys_down_with_radial_event.tooltip": "When using 'Radial Menu Send Key', should the corresponding keybind be set down?", "controlify.gui.controller_mapping.explanation": "Controller mapping allows you to convert your current controller inputs into something else. You can, for example, emulate a gamepad with a flightstick directly in-game.", "controlify.gui.group.controller_mapping": "Controller Mapping", "controlify.gui.create_gamepad_mapping": "Map to Gamepad", @@ -310,6 +312,7 @@ "controlify.binding.controlify.radial_axis_left": "Radial Menu Left", "controlify.binding.controlify.radial_axis_right": "Radial Menu Right", "controlify.binding.controlify.radial_send_key": "Radial Menu Send Key", + "controlify.binding.controlify.radial_send_key.desc": "Click this to send a physical button press instead of an event. This requires the key to be bound in your minecraft controls menu.", "controlify.binding.controlify.game_mode_switcher": "Game Mode Switcher", "controlify.binding.controlify.vmouse_move_up": "VMouse Move Up", "controlify.binding.controlify.vmouse_move_down": "VMouse Move Down", From 4e9ddd9f26465199f9ef3dc4c7312e02a5c9c1d3 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Fri, 24 Oct 2025 17:39:47 -0500 Subject: [PATCH 6/7] Multiversion fix --- .../isxander/controlify/gui/screen/RadialMenuScreen.java | 6 +++++- .../controlify/mixins/feature/bind/KeyMappingAccessor.java | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index e69792a86..9112f0c15 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -64,8 +64,12 @@ //import java.util.Optional; //? if neoforge { -//@EventBusSubscriber(modid = "controlify", bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) +/*//? if < 1.21.8 { +@EventBusSubscriber(modid = "controlify", bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) +//?} else { +//@EventBusSubscriber(modid = "controlify", value = Dist.CLIENT) //?} +*///?} public class RadialMenuScreen extends Screen implements ScreenControllerEventListener, ScreenProcessorProvider { public static final ResourceLocation EMPTY_ACTION = CUtil.rl("empty_action"); diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java b/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java index 65d20cf44..3eaa6de32 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/bind/KeyMappingAccessor.java @@ -9,8 +9,10 @@ @Mixin(KeyMapping.class) public interface KeyMappingAccessor { + //? < 1.21.4 && neoforge { @Accessor("ALL") static Map getAll() { throw new NotImplementedException("Should be overwritten by Accessor"); } + //?} } From acfedf77b6fc81dd99ae149ee08d7515543dff46 Mon Sep 17 00:00:00 2001 From: ninjaguardian Date: Tue, 28 Oct 2025 23:00:59 -0500 Subject: [PATCH 7/7] Make key be released --- .../gui/screen/RadialMenuScreen.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java index 9112f0c15..9af83c260 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/RadialMenuScreen.java @@ -162,15 +162,37 @@ protected void init() { @SubscribeEvent(priority = EventPriority.HIGHEST) public static void onKeyInputBefore(InputEvent.Key event) { - if (setKeysDownWithRadialEvent && keyToPress != null) - keyToPress.setDown(true); + if (keyToPress != null) { + switch (event.getAction()) { + case GLFW.GLFW_PRESS: + if (setKeysDownWithRadialEvent) + keyToPress.setDown(true); + break; + case GLFW.GLFW_RELEASE: + if (setKeysDownWithRadialEvent) + keyToPress.setDown(false); + keyToPress = null; + break; + } + } } @SubscribeEvent(priority = EventPriority.LOWEST) public static void onKeyInputAfter(InputEvent.Key event) { - if (setKeysDownWithRadialEvent && keyToPress != null) { - keyToPress.setDown(false); - keyToPress = null; + if (keyToPress != null) { + NeoForge.EVENT_BUS.post( + new InputEvent.Key( + //? if >= 1.21.9 { + new KeyEvent(keyToPress.getKey().getValue(), 0, 0), + GLFW.GLFW_RELEASE + //?} else { + //keyToPress.getKey().getValue(), + //0, + //GLFW.GLFW_RELEASE, + //0 + //?} + ) + ); } } *///?}