forked from Clones/Controlify
button guide hud
This commit is contained in:
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.AbstractButtonComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.AbstractButtonComponentProcessor;
|
||||
import net.minecraft.client.gui.components.AbstractButton;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,6 +1,6 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.CustomFocus;
|
||||
import dev.isxander.controlify.screenop.component.CustomFocus;
|
||||
import net.minecraft.client.gui.components.events.AbstractContainerEventHandler;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import org.jetbrains.annotations.Nullable;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import dev.isxander.controlify.Controlify;
|
@ -1,11 +1,11 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.InputMode;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.SliderComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.SliderComponentProcessor;
|
||||
import net.minecraft.client.InputType;
|
||||
import net.minecraft.client.gui.components.AbstractSliderButton;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -1,6 +1,6 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.CustomFocus;
|
||||
import dev.isxander.controlify.screenop.component.CustomFocus;
|
||||
import net.minecraft.client.gui.components.ContainerObjectSelectionList;
|
||||
import net.minecraft.client.gui.components.events.GuiEventListener;
|
||||
import org.jetbrains.annotations.Nullable;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
|
||||
import net.minecraft.world.item.CreativeModeTab;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.CreativeModeInventoryScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.CreativeModeInventoryScreenProcessor;
|
||||
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.JoinMultiplayerScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.JoinMultiplayerScreenProcessor;
|
||||
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;
|
||||
import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.LanguageSelectionListComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.LanguageSelectionListComponentProcessor;
|
||||
import net.minecraft.client.gui.screens.LanguageSelectScreen;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import net.minecraft.client.gui.screens.OptionsSubScreen;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import net.minecraft.client.gui.ComponentPath;
|
||||
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
|
@ -1,7 +1,7 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessor;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,4 +1,4 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import net.minecraft.client.gui.components.Button;
|
||||
import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.SelectWorldScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.SelectWorldScreenProcessor;
|
||||
import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.ServerSelectionListEntryComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.ServerSelectionListEntryComponentProcessor;
|
||||
import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.vanilla;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.vanilla.WorldListEntryComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.WorldListEntryComponentProcessor;
|
||||
import net.minecraft.client.gui.screens.worldselection.WorldSelectionList;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.yacl;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.yacl;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.yacl.CyclingControllerElementComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.yacl.CyclingControllerElementComponentProcessor;
|
||||
import dev.isxander.yacl.gui.controllers.cycling.CyclingControllerElement;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.yacl;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.yacl;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.yacl.SliderControllerElementComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.yacl.SliderControllerElementComponentProcessor;
|
||||
import dev.isxander.yacl.gui.controllers.slider.SliderControllerElement;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.compat.screen.yacl;
|
||||
package dev.isxander.controlify.mixins.compat.screenop.yacl;
|
||||
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessor;
|
||||
import dev.isxander.controlify.compatibility.screen.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.compatibility.yacl.YACLScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessor;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.yacl.YACLScreenProcessor;
|
||||
import dev.isxander.yacl.gui.YACLScreen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
@ -1,11 +1,14 @@
|
||||
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.ingame.ControllerPlayerMovement;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@ -22,8 +25,17 @@ 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.instance().currentInputMode() == InputMode.CONTROLLER && minecraft.player != null)
|
||||
minecraft.player.input = new ControllerPlayerMovement(Controlify.instance().currentController(), minecraft.player);
|
||||
private void overrideNewPlayerInput(ClientboundLoginPacket packet, CallbackInfo ci) {
|
||||
overrideInput(minecraft.player);
|
||||
}
|
||||
|
||||
@Inject(method = "handleRespawn", 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 overrideRespawnInput(ClientboundRespawnPacket packet, CallbackInfo ci, @Local(ordinal = 1) LocalPlayer newPlayer) {
|
||||
overrideInput(newPlayer);
|
||||
}
|
||||
|
||||
private void overrideInput(LocalPlayer player) {
|
||||
if (Controlify.instance().currentInputMode() == InputMode.CONTROLLER && player != null)
|
||||
player.input = new ControllerPlayerMovement(Controlify.instance().currentController(), player);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,36 @@
|
||||
package dev.isxander.controlify.mixins.feature.guide;
|
||||
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.InputMode;
|
||||
import dev.isxander.controlify.ingame.guide.InGameButtonGuide;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.network.protocol.game.ClientboundLoginPacket;
|
||||
import net.minecraft.network.protocol.game.ClientboundRespawnPacket;
|
||||
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;
|
||||
|
||||
@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 buttonGuideLogin(ClientboundLoginPacket packet, CallbackInfo ci) {
|
||||
initButtonGuide();
|
||||
}
|
||||
|
||||
@Inject(method = "handleRespawn", at = @At("RETURN"))
|
||||
private void buttonGuideRespawn(ClientboundRespawnPacket packet, CallbackInfo ci) {
|
||||
initButtonGuide();
|
||||
}
|
||||
|
||||
private void initButtonGuide() {
|
||||
if (Controlify.instance().currentInputMode() == InputMode.CONTROLLER && minecraft.player != null)
|
||||
Controlify.instance().inGameButtonGuide = new InGameButtonGuide(Controlify.instance().currentController(), minecraft.player);
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package dev.isxander.controlify.mixins.feature.guide;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
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;
|
||||
|
||||
@Mixin(Gui.class)
|
||||
public class GuiMixin {
|
||||
@Shadow private int screenWidth;
|
||||
@Shadow private int screenHeight;
|
||||
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@Inject(method = "render", at = @At(value = "CONSTANT", args = "stringValue=chat"))
|
||||
private void renderButtonGuide(PoseStack matrices, float tickDelta, CallbackInfo ci) {
|
||||
if (Controlify.instance().inGameButtonGuide() != null) {
|
||||
minecraft.getProfiler().push("controlify_button_guide");
|
||||
Controlify.instance().inGameButtonGuide().renderHud(matrices, tickDelta, screenWidth, screenHeight);
|
||||
minecraft.getProfiler().pop();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "tick()V", at = @At("RETURN"))
|
||||
private void tickButtonGuide(CallbackInfo ci) {
|
||||
if (Controlify.instance().inGameButtonGuide() != null) {
|
||||
Controlify.instance().inGameButtonGuide().tick();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user