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.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() {
|
||||||
|
@ -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));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user