From 7ccfd426a1d05d19459e2fa44934c4a3de913a2e Mon Sep 17 00:00:00 2001 From: isXander Date: Tue, 11 Jul 2023 22:05:55 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20move/jump/sneak=20not=20wo?= =?UTF-8?q?rking=20after=20hotplugging=20a=20controller=20ingame?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/isxander/controlify/Controlify.java | 5 ++++- .../ingame/ControllerPlayerMovement.java | 17 +++++++++++++++++ .../mixins/core/ClientPacketListenerMixin.java | 13 ++----------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index da71b5e..e815739 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -11,6 +11,7 @@ import dev.isxander.controlify.controller.sdl2.SDL2NativesManager; import dev.isxander.controlify.debug.DebugProperties; import dev.isxander.controlify.gui.screen.ControllerCalibrationScreen; import dev.isxander.controlify.gui.screen.SDLOnboardingScreen; +import dev.isxander.controlify.ingame.ControllerPlayerMovement; import dev.isxander.controlify.reacharound.ReachAroundHandler; import dev.isxander.controlify.reacharound.ReachAroundMode; import dev.isxander.controlify.screenop.ScreenProcessorProvider; @@ -480,9 +481,11 @@ public class Controlify implements ControlifyApi { this.inGameInputHandler = new InGameInputHandler(controller); if (minecraft.player != null) { - this.inGameButtonGuide = new InGameButtonGuide(controller, Minecraft.getInstance().player); + this.inGameButtonGuide = new InGameButtonGuide(controller, minecraft.player); } + ControllerPlayerMovement.updatePlayerInput(minecraft.player); + if (!controller.config().deadzonesCalibrated) calibrationQueue.add(controller); } diff --git a/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java b/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java index 3fd8c6d..f91807d 100644 --- a/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java +++ b/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java @@ -4,7 +4,9 @@ import dev.isxander.controlify.Controlify; import dev.isxander.controlify.controller.Controller; import net.minecraft.client.Minecraft; import net.minecraft.client.player.Input; +import net.minecraft.client.player.KeyboardInput; import net.minecraft.client.player.LocalPlayer; +import org.jetbrains.annotations.Nullable; public class ControllerPlayerMovement extends Input { private final Controller controller; @@ -66,4 +68,19 @@ public class ControllerPlayerMovement extends Input { } } } + + public static void updatePlayerInput(@Nullable LocalPlayer player) { + if (player == null) + return; + + if (Controlify.instance().getCurrentController().isPresent()) { + player.input = new DualInput( + new KeyboardInput(Minecraft.getInstance().options), + new ControllerPlayerMovement(Controlify.instance().getCurrentController().get(), player) + ); + } else if (!(player.input instanceof KeyboardInput)) { + player.input = new KeyboardInput(Minecraft.getInstance().options); + } + + } } diff --git a/src/main/java/dev/isxander/controlify/mixins/core/ClientPacketListenerMixin.java b/src/main/java/dev/isxander/controlify/mixins/core/ClientPacketListenerMixin.java index 24e727d..91f0f65 100644 --- a/src/main/java/dev/isxander/controlify/mixins/core/ClientPacketListenerMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/core/ClientPacketListenerMixin.java @@ -27,20 +27,11 @@ public class ClientPacketListenerMixin { @Inject(method = "handleLogin", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;input:Lnet/minecraft/client/player/Input;", opcode = Opcodes.ASTORE, shift = At.Shift.AFTER)) private void overrideNewPlayerInput(ClientboundLoginPacket packet, CallbackInfo ci) { - overrideInput(minecraft.player); + ControllerPlayerMovement.updatePlayerInput(minecraft.player); } @Inject(method = "handleRespawn", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/LocalPlayer;input:Lnet/minecraft/client/player/Input;", opcode = Opcodes.ASTORE, shift = At.Shift.AFTER)) private void overrideRespawnInput(ClientboundRespawnPacket packet, CallbackInfo ci, @Local(ordinal = 1) LocalPlayer newPlayer) { - overrideInput(newPlayer); - } - - private void overrideInput(LocalPlayer player) { - if (player == null) - return; - - ControlifyApi.get().getCurrentController().ifPresent(controller -> { - player.input = new DualInput(new KeyboardInput(minecraft.options), new ControllerPlayerMovement(controller, player)); - }); + ControllerPlayerMovement.updatePlayerInput(newPlayer); } }