1
0
forked from Clones/Controlify

controllers!

This commit is contained in:
isXander
2023-01-31 18:39:30 +00:00
parent b090ccb5c1
commit 1ba701d2cd
27 changed files with 693 additions and 49 deletions

View File

@ -0,0 +1,26 @@
package dev.isxander.controlify.mixins;
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
import dev.isxander.controlify.compatibility.screen.component.SliderComponentProcessor;
import net.minecraft.client.gui.components.AbstractSliderButton;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
@Mixin(AbstractSliderButton.class)
public class AbstractSliderButtonMixin implements ComponentProcessorProvider {
@Shadow private boolean canChangeValue;
@Unique
private final SliderComponentProcessor controlify$processor = new SliderComponentProcessor(
(AbstractSliderButton) (Object) this,
() -> this.canChangeValue,
val -> this.canChangeValue = val
);
@Override
public ComponentProcessor<AbstractSliderButton> componentProcessor() {
return controlify$processor;
}
}

View File

@ -0,0 +1,17 @@
package dev.isxander.controlify.mixins;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.InputMode;
import net.minecraft.client.KeyboardHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(KeyboardHandler.class)
public class KeyboardHandlerMixin {
@Inject(method = "keyPress", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setLastInputType(Lnet/minecraft/client/InputType;)V"))
private void onKeyboardInput(long window, int key, int scancode, int action, int modifiers, CallbackInfo ci) {
Controlify.getInstance().setCurrentInputMode(InputMode.KEYBOARD_MOUSE);
}
}

View File

@ -0,0 +1,16 @@
package dev.isxander.controlify.mixins;
import dev.isxander.controlify.Controlify;
import net.minecraft.client.Minecraft;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Minecraft.class)
public class MinecraftMixin {
@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER))
private void onInputInitialized(CallbackInfo ci) {
Controlify.getInstance().onInitializeInput();
}
}

View File

@ -0,0 +1,27 @@
package dev.isxander.controlify.mixins;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.InputMode;
import net.minecraft.client.MouseHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(MouseHandler.class)
public class MouseHandlerMixin {
@Inject(method = "onPress", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;setLastInputType(Lnet/minecraft/client/InputType;)V"))
private void onMouseClickInput(long window, int button, int action, int modifiers, CallbackInfo ci) {
Controlify.getInstance().setCurrentInputMode(InputMode.KEYBOARD_MOUSE);
}
@Inject(method = "onMove", at = @At("RETURN"))
private void onMouseMoveInput(long window, double x, double y, CallbackInfo ci) {
Controlify.getInstance().setCurrentInputMode(InputMode.KEYBOARD_MOUSE);
}
@Inject(method = "onScroll", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;getOverlay()Lnet/minecraft/client/gui/screens/Overlay;"))
private void onMouseScrollInput(long window, double scrollDeltaX, double scrollDeltaY, CallbackInfo ci) {
Controlify.getInstance().setCurrentInputMode(InputMode.KEYBOARD_MOUSE);
}
}

View File

@ -0,0 +1,17 @@
package dev.isxander.controlify.mixins;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import net.minecraft.client.gui.navigation.ScreenDirection;
import net.minecraft.client.gui.screens.Screen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
@Mixin(Screen.class)
public interface ScreenAccessor {
@Invoker
FocusNavigationEvent.ArrowNavigation invokeCreateArrowEvent(ScreenDirection direction);
@Invoker
void invokeChangeFocus(ComponentPath path);
}

View File

@ -0,0 +1,26 @@
package dev.isxander.controlify.mixins;
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
import net.minecraft.client.gui.screens.Screen;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Screen.class)
public class ScreenMixin implements ScreenProcessorProvider {
@Unique
private final ScreenProcessor controlify$processor = new ScreenProcessor((Screen) (Object) this);
@Override
public ScreenProcessor screenProcessor() {
return controlify$processor;
}
@Inject(method = "rebuildWidgets", at = @At("RETURN"))
private void onScreenInit(CallbackInfo ci) {
screenProcessor().onWidgetRebuild();
}
}