1
0
forked from Clones/Controlify

in-game input and start of keybind system

This commit is contained in:
isXander
2023-01-31 21:41:38 +00:00
parent 1ba701d2cd
commit aad9447325
15 changed files with 325 additions and 14 deletions

View File

@ -8,6 +8,9 @@ import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
/**
* Mixin to insert a custom {@link ComponentProcessor} into slider to support left/right movement without navigating to next component.
*/
@Mixin(AbstractSliderButton.class)
public class AbstractSliderButtonMixin implements ComponentProcessorProvider {
@Shadow private boolean canChangeValue;

View File

@ -0,0 +1,35 @@
package dev.isxander.controlify.mixins;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.ingame.ControllerPlayerMovement;
import net.minecraft.client.Minecraft;
import net.minecraft.client.Options;
import net.minecraft.client.multiplayer.ClientPacketListener;
import net.minecraft.client.player.Input;
import net.minecraft.client.player.KeyboardInput;
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/**
* Override input handling for main player.
*/
@Mixin(ClientPacketListener.class)
public class ClientPacketListenerMixin {
@Shadow @Final private Minecraft minecraft;
@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 useControllerInput(ClientboundLoginPacket packet, CallbackInfo ci) {
if (Controlify.getInstance().getCurrentInputMode() == InputMode.CONTROLLER && minecraft.player != null)
minecraft.player.input = new ControllerPlayerMovement(Controlify.getInstance().getCurrentController());
}
}

View File

@ -13,4 +13,9 @@ public class MinecraftMixin {
private void onInputInitialized(CallbackInfo ci) {
Controlify.getInstance().onInitializeInput();
}
@Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MouseHandler;turnPlayer()V"))
private void doPlayerLook(boolean tick, CallbackInfo ci) {
Controlify.getInstance().getInGameInputHandler().processPlayerLook();
}
}