forked from Clones/Controlify
🐛 Fix issues with mixed input mode
This commit is contained in:
32
src/main/java/dev/isxander/controlify/ingame/DualInput.java
Normal file
32
src/main/java/dev/isxander/controlify/ingame/DualInput.java
Normal 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);
|
||||
}
|
||||
}
|
@ -41,14 +41,6 @@ public class InGameInputHandler {
|
||||
this.controller = controller;
|
||||
this.minecraft = Minecraft.getInstance();
|
||||
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() {
|
||||
|
@ -1,11 +1,12 @@
|
||||
package dev.isxander.controlify.mixins.core;
|
||||
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.InputMode;
|
||||
import dev.isxander.controlify.api.ControlifyApi;
|
||||
import dev.isxander.controlify.ingame.ControllerPlayerMovement;
|
||||
import dev.isxander.controlify.ingame.DualInput;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.client.player.KeyboardInput;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
||||
@ -35,7 +36,11 @@ public class ClientPacketListenerMixin {
|
||||
}
|
||||
|
||||
private void overrideInput(LocalPlayer player) {
|
||||
if (Controlify.instance().currentInputMode().isController() && player != null)
|
||||
player.input = new ControllerPlayerMovement(Controlify.instance().currentController(), player);
|
||||
if (player == null)
|
||||
return;
|
||||
|
||||
ControlifyApi.get().getCurrentController().ifPresent(controller -> {
|
||||
player.input = new DualInput(new KeyboardInput(minecraft.options), new ControllerPlayerMovement(controller, player));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user