forked from Clones/Controlify
controllers!
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user