1
0
forked from Clones/Controlify

Update to Minecraft 1.20

This commit is contained in:
isXander
2023-05-16 20:30:56 +01:00
parent d81b1f59cc
commit 0adbccc498
41 changed files with 259 additions and 491 deletions

View File

@ -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();
// }
// }
//}

View File

@ -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))

View File

@ -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)

View File

@ -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();
});
}

View File

@ -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

View File

@ -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;
}

View File

@ -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();
}

View File

@ -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);
});
}
}

View File

@ -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);
}
}