forked from Clones/Controlify
➕ Update to Minecraft 1.20
This commit is contained in:
@ -1,32 +1,32 @@
|
||||
package dev.isxander.controlify.mixins.compat.iris;
|
||||
|
||||
import dev.isxander.controlify.compatibility.iris.BaseOptionElementComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
||||
import net.coderbot.iris.gui.NavigationController;
|
||||
import net.coderbot.iris.gui.element.widget.BaseOptionElementWidget;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
@Mixin(value = BaseOptionElementWidget.class, remap = false)
|
||||
public abstract class BaseOptionElementWidgetMixin implements ComponentProcessorProvider {
|
||||
@Shadow public abstract boolean applyPreviousValue();
|
||||
@Shadow public abstract boolean applyNextValue();
|
||||
|
||||
@Shadow protected NavigationController navigation;
|
||||
@Unique private final BaseOptionElementComponentProcessor processor
|
||||
= new BaseOptionElementComponentProcessor(this::cycle);
|
||||
|
||||
@Override
|
||||
public ComponentProcessor componentProcessor() {
|
||||
return processor;
|
||||
}
|
||||
|
||||
private void cycle(boolean reverse) {
|
||||
boolean needsUpdate = reverse ? applyPreviousValue() : applyNextValue();
|
||||
if (needsUpdate) {
|
||||
navigation.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
//import dev.isxander.controlify.compatibility.iris.BaseOptionElementComponentProcessor;
|
||||
//import dev.isxander.controlify.screenop.ComponentProcessor;
|
||||
//import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
||||
//import net.coderbot.iris.gui.NavigationController;
|
||||
//import net.coderbot.iris.gui.element.widget.BaseOptionElementWidget;
|
||||
//import org.spongepowered.asm.mixin.Mixin;
|
||||
//import org.spongepowered.asm.mixin.Shadow;
|
||||
//import org.spongepowered.asm.mixin.Unique;
|
||||
//
|
||||
//@Mixin(value = BaseOptionElementWidget.class, remap = false)
|
||||
//public abstract class BaseOptionElementWidgetMixin implements ComponentProcessorProvider {
|
||||
// @Shadow public abstract boolean applyPreviousValue();
|
||||
// @Shadow public abstract boolean applyNextValue();
|
||||
//
|
||||
// @Shadow protected NavigationController navigation;
|
||||
// @Unique private final BaseOptionElementComponentProcessor processor
|
||||
// = new BaseOptionElementComponentProcessor(this::cycle);
|
||||
//
|
||||
// @Override
|
||||
// public ComponentProcessor componentProcessor() {
|
||||
// return processor;
|
||||
// }
|
||||
//
|
||||
// private void cycle(boolean reverse) {
|
||||
// boolean needsUpdate = reverse ? applyPreviousValue() : applyNextValue();
|
||||
// if (needsUpdate) {
|
||||
// navigation.refresh();
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.ChatComponent;
|
||||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
@ -18,22 +19,22 @@ public class ChatComponentMixin {
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
private void translateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
private void translateRender(GuiGraphics graphics, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return;
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
matrices.pushPose();
|
||||
graphics.pose().pushPose();
|
||||
if (controller.config().chatKeyboardHeight == 0) return;
|
||||
matrices.translate(0, -controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight(), 0);
|
||||
graphics.pose().translate(0, -controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight(), 0);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("TAIL"))
|
||||
private void finishTranslateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
private void finishTranslateRender(GuiGraphics graphics, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return;
|
||||
|
||||
matrices.popPose();
|
||||
graphics.pose().popPose();
|
||||
}
|
||||
|
||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 40))
|
||||
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.feature.chatkbheight;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
@ -19,16 +19,16 @@ public abstract class ChatScreenMixin extends Screen {
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
private void translateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
matrices.pushPose();
|
||||
private void translateRender(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
graphics.pose().pushPose();
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
matrices.translate(0, -controller.config().chatKeyboardHeight * this.height, 0);
|
||||
graphics.pose().translate(0, -controller.config().chatKeyboardHeight * this.height, 0);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("TAIL"))
|
||||
private void finishTranslateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
matrices.popPose();
|
||||
private void finishTranslateRender(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
graphics.pose().popPose();
|
||||
}
|
||||
|
||||
@ModifyVariable(method = "mouseClicked", at = @At("HEAD"), ordinal = 1, argsOnly = true)
|
||||
|
@ -5,6 +5,7 @@ import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.gui.guide.InGameButtonGuide;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
@ -20,10 +21,10 @@ public class GuiMixin {
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@Inject(method = "render", at = @At(value = "CONSTANT", args = "stringValue=chat"))
|
||||
private void renderButtonGuide(PoseStack matrices, float tickDelta, CallbackInfo ci) {
|
||||
private void renderButtonGuide(GuiGraphics graphics, float tickDelta, CallbackInfo ci) {
|
||||
Controlify.instance().inGameButtonGuide().ifPresent(guide -> {
|
||||
minecraft.getProfiler().push("controlify_button_guide");
|
||||
guide.renderHud(matrices, tickDelta, screenWidth, screenHeight);
|
||||
guide.renderHud(graphics, tickDelta, screenWidth, screenHeight);
|
||||
minecraft.getProfiler().pop();
|
||||
});
|
||||
}
|
||||
|
@ -1,39 +1,30 @@
|
||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.InputMode;
|
||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||
import dev.isxander.controlify.api.buttonguide.ButtonRenderPosition;
|
||||
import dev.isxander.controlify.bindings.IBind;
|
||||
import dev.isxander.controlify.gui.ButtonGuideRenderer;
|
||||
import dev.isxander.controlify.screenop.ComponentProcessor;
|
||||
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
|
||||
import dev.isxander.controlify.screenop.compat.vanilla.AbstractButtonComponentProcessor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.Font;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.AbstractButton;
|
||||
import net.minecraft.network.chat.CommonComponents;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.contents.TranslatableContents;
|
||||
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;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Mixin(AbstractButton.class)
|
||||
public abstract class AbstractButtonMixin extends AbstractWidgetMixin implements ButtonGuideRenderer<AbstractButton> {
|
||||
@Unique private RenderData<AbstractButton> renderData = null;
|
||||
|
||||
@Inject(method = "renderString", at = @At("RETURN"))
|
||||
private void renderButtonGuide(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
||||
private void renderButtonGuide(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||
if (shouldRender()) {
|
||||
switch (renderData.position()) {
|
||||
case LEFT -> getBind().render(matrices, getX() - getBind().size().width() - 1, getY() + getHeight() / 2);
|
||||
case RIGHT -> getBind().render(matrices, getX() + getWidth() + 1, getY() + getHeight() / 2);
|
||||
case LEFT -> getBind().render(graphics, getX() - getBind().size().width() - 1, getY() + getHeight() / 2);
|
||||
case RIGHT -> getBind().render(graphics, getX() + getWidth() + 1, getY() + getHeight() / 2);
|
||||
case TEXT -> {
|
||||
Font font = Minecraft.getInstance().font;
|
||||
int x;
|
||||
@ -43,22 +34,22 @@ public abstract class AbstractButtonMixin extends AbstractWidgetMixin implements
|
||||
x = getX() + getWidth() / 2 - font.width(getMessage()) / 2 - getBind().size().width();
|
||||
}
|
||||
|
||||
getBind().render(matrices, x, getY() + getHeight() / 2);
|
||||
getBind().render(graphics, x, getY() + getHeight() / 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "renderString", at = @At("HEAD"))
|
||||
private void shiftXOffset(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
||||
matrices.pushPose();
|
||||
private void shiftXOffset(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||
graphics.pose().pushPose();
|
||||
if (!shouldRender() || Minecraft.getInstance().font.width(getMessage()) > getWidth() || renderData.position() != ButtonRenderPosition.TEXT) return;
|
||||
matrices.translate(getBind().size().width() / 2f, 0, 0);
|
||||
graphics.pose().translate(getBind().size().width() / 2f, 0, 0);
|
||||
}
|
||||
|
||||
@Inject(method = "renderString", at = @At("RETURN"))
|
||||
private void finishShiftXOffset(PoseStack matrices, Font renderer, int color, CallbackInfo ci) {
|
||||
matrices.popPose();
|
||||
private void finishShiftXOffset(GuiGraphics graphics, Font renderer, int color, CallbackInfo ci) {
|
||||
graphics.pose().popPose();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,6 +1,5 @@
|
||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||
|
||||
import net.minecraft.client.gui.GuiComponent;
|
||||
import net.minecraft.client.gui.components.AbstractWidget;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@ -9,7 +8,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||
|
||||
@Mixin(AbstractWidget.class)
|
||||
public abstract class AbstractWidgetMixin extends GuiComponent {
|
||||
public abstract class AbstractWidgetMixin {
|
||||
@Shadow public abstract int getX();
|
||||
|
||||
@Shadow public abstract int getY();
|
||||
@ -22,7 +21,7 @@ public abstract class AbstractWidgetMixin extends GuiComponent {
|
||||
|
||||
@Shadow public abstract boolean isActive();
|
||||
|
||||
@ModifyArg(method = "renderScrollingString(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/Font;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/AbstractWidget;renderScrollingString(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIII)V"), index = 3)
|
||||
@ModifyArg(method = "renderScrollingString(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Font;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/AbstractWidget;renderScrollingString(Lnet/minecraft/client/gui/GuiGraphics;Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIII)V"), index = 3)
|
||||
protected int shiftDrawSize(int x) {
|
||||
return x;
|
||||
}
|
||||
|
@ -1,14 +1,13 @@
|
||||
package dev.isxander.controlify.mixins.feature.guide.screen;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.InputMode;
|
||||
import dev.isxander.controlify.api.bind.BindRenderer;
|
||||
import dev.isxander.controlify.bindings.IBind;
|
||||
import dev.isxander.controlify.compatibility.ControlifyCompat;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import dev.isxander.controlify.gui.DrawSize;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.TabButton;
|
||||
import net.minecraft.client.gui.components.tabs.TabNavigationBar;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
@ -25,16 +24,16 @@ public class TabNavigationBarMixin {
|
||||
@Shadow private int width;
|
||||
|
||||
@Inject(method = "render", at = @At("RETURN"))
|
||||
private void renderControllerButtonOverlay(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
private void renderControllerButtonOverlay(GuiGraphics graphics, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
if (Controlify.instance().currentInputMode() == InputMode.CONTROLLER) {
|
||||
var controller = Controlify.instance().currentController();
|
||||
if (controller.config().showScreenGuide) {
|
||||
this.renderControllerButtonOverlay(matrices, controller);
|
||||
this.renderControllerButtonOverlay(graphics, controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void renderControllerButtonOverlay(PoseStack matrices, Controller<?, ?> controller) {
|
||||
private void renderControllerButtonOverlay(GuiGraphics graphics, Controller<?, ?> controller) {
|
||||
ControlifyCompat.ifBeginHudBatching();
|
||||
|
||||
TabButton firstTab = tabButtons.get(0);
|
||||
@ -44,14 +43,14 @@ public class TabNavigationBarMixin {
|
||||
DrawSize prevBindDrawSize = prevBind.size();
|
||||
int firstButtonX = Math.max(firstTab.getX() - 2 - prevBindDrawSize.width(), firstTab.getX() / 2 - prevBindDrawSize.width() / 2);
|
||||
int firstButtonY = 12;
|
||||
prevBind.render(matrices, firstButtonX, firstButtonY);
|
||||
prevBind.render(graphics, firstButtonX, firstButtonY);
|
||||
|
||||
BindRenderer nextBind = controller.bindings().GUI_NEXT_TAB.renderer();
|
||||
DrawSize nextBindDrawSize = nextBind.size();
|
||||
int lastButtonEnd = lastTab.getX() + lastTab.getWidth();
|
||||
int lastButtonX = Math.min(lastTab.getX() + lastTab.getWidth() + 2, lastButtonEnd + (width - lastButtonEnd) / 2 - nextBindDrawSize.width() / 2);
|
||||
int lastButtonY = 12;
|
||||
nextBind.render(matrices, lastButtonX, lastButtonY);
|
||||
nextBind.render(graphics, lastButtonX, lastButtonY);
|
||||
|
||||
ControlifyCompat.ifEndHudBatching();
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
package dev.isxander.controlify.mixins.feature.screenop;
|
||||
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.api.ControlifyApi;
|
||||
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@ -17,11 +17,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public class GameRendererMixin {
|
||||
@Shadow @Final Minecraft minecraft;
|
||||
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", shift = At.Shift.AFTER))
|
||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local(ordinal = 1) PoseStack poseStack) {
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", shift = At.Shift.AFTER))
|
||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local GuiGraphics graphics) {
|
||||
ControlifyApi.get().getCurrentController().ifPresent(controller -> {
|
||||
if (minecraft.screen == null) return;
|
||||
ScreenProcessorProvider.provide(minecraft.screen).render(controller, poseStack, tickDelta);
|
||||
ScreenProcessorProvider.provide(minecraft.screen).render(controller, graphics, tickDelta);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,8 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse;
|
||||
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@ -11,8 +11,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class GameRendererMixin {
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lcom/mojang/blaze3d/vertex/PoseStack;IIF)V", shift = At.Shift.AFTER))
|
||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local(ordinal = 1) PoseStack poseStack) {
|
||||
Controlify.instance().virtualMouseHandler().renderVirtualMouse(poseStack);
|
||||
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/Screen;renderWithTooltip(Lnet/minecraft/client/gui/GuiGraphics;IIF)V", shift = At.Shift.AFTER))
|
||||
private void onPostRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, @Local GuiGraphics graphics) {
|
||||
Controlify.instance().virtualMouseHandler().renderVirtualMouse(graphics);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user