1
0
forked from Clones/Controlify

🐛 Fix issues with mixed input mode

This commit is contained in:
isXander
2023-06-26 17:42:32 +01:00
parent 245ebb7edd
commit cc26988ba2
3 changed files with 41 additions and 12 deletions

View File

@ -0,0 +1,32 @@
package dev.isxander.controlify.ingame;
import net.minecraft.client.player.Input;
import net.minecraft.util.Mth;
import org.apache.commons.lang3.Validate;
public class DualInput extends Input {
private final Input input1, input2;
public DualInput(Input input1, Input input2) {
Validate.isTrue(!(input1 instanceof DualInput), "Cannot nest DualInputs");
Validate.isTrue(!(input2 instanceof DualInput), "Cannot nest DualInputs");
this.input1 = input1;
this.input2 = input2;
}
@Override
public void tick(boolean slowDown, float movementMultiplier) {
input1.tick(slowDown, movementMultiplier);
input2.tick(slowDown, movementMultiplier);
this.left = input1.left || input2.left;
this.right = input1.right || input2.right;
this.up = input1.up || input2.up;
this.down = input1.down || input2.down;
this.jumping = input1.jumping || input2.jumping;
this.shiftKeyDown = input1.shiftKeyDown || input2.shiftKeyDown;
this.leftImpulse = Mth.clamp(input1.leftImpulse + input2.leftImpulse, -1, 1);
this.forwardImpulse = Mth.clamp(input1.forwardImpulse + input2.forwardImpulse, -1, 1);
}
}

View File

@ -41,14 +41,6 @@ public class InGameInputHandler {
this.controller = controller; this.controller = controller;
this.minecraft = Minecraft.getInstance(); this.minecraft = Minecraft.getInstance();
this.dropRepeatHelper = new NavigationHelper(20, 1); this.dropRepeatHelper = new NavigationHelper(20, 1);
ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> {
if (minecraft.player != null) {
minecraft.player.input = mode.isController()
? new ControllerPlayerMovement(controller, minecraft.player)
: new KeyboardInput(minecraft.options);
}
});
} }
public void inputTick() { public void inputTick() {

View File

@ -1,11 +1,12 @@
package dev.isxander.controlify.mixins.core; package dev.isxander.controlify.mixins.core;
import com.llamalad7.mixinextras.sugar.Local; import com.llamalad7.mixinextras.sugar.Local;
import dev.isxander.controlify.Controlify; import dev.isxander.controlify.api.ControlifyApi;
import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.ingame.ControllerPlayerMovement; import dev.isxander.controlify.ingame.ControllerPlayerMovement;
import dev.isxander.controlify.ingame.DualInput;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.KeyboardInput;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
import net.minecraft.network.protocol.game.ClientboundLoginPacket; import net.minecraft.network.protocol.game.ClientboundLoginPacket;
import net.minecraft.network.protocol.game.ClientboundRespawnPacket; import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
@ -35,7 +36,11 @@ public class ClientPacketListenerMixin {
} }
private void overrideInput(LocalPlayer player) { private void overrideInput(LocalPlayer player) {
if (Controlify.instance().currentInputMode().isController() && player != null) if (player == null)
player.input = new ControllerPlayerMovement(Controlify.instance().currentController(), player); return;
ControlifyApi.get().getCurrentController().ifPresent(controller -> {
player.input = new DualInput(new KeyboardInput(minecraft.options), new ControllerPlayerMovement(controller, player));
});
} }
} }