From 0adbccc498a3b3129171de07b3068e6b24548037 Mon Sep 17 00:00:00 2001 From: isXander Date: Tue, 16 May 2023 20:30:56 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20Update=20to=20Minecraft=201.20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 12 +- gradle/libs.versions.toml | 14 +- .../controlify/api/bind/BindRenderer.java | 4 +- .../bindings/ControllerBindingImpl.java | 6 +- .../bindings/ControllerBindings.java | 2 +- .../controlify/bindings/EmptyBind.java | 4 +- .../controlify/bindings/GamepadBind.java | 12 +- .../isxander/controlify/bindings/IBind.java | 4 +- .../controlify/bindings/JoystickAxisBind.java | 12 +- .../bindings/JoystickButtonBind.java | 10 +- .../controlify/bindings/JoystickHatBind.java | 11 +- .../ImmediatelyFastCompat.java | 6 +- .../config/gui/AbstractBindController.java | 8 +- .../joystick/render/GenericRenderer.java | 82 ++++---- .../joystick/render/JoystickRenderer.java | 33 ++-- .../joystick/render/ThemedRenderer.java | 60 +++--- .../gui/guide/ContainerButtonGuide.java | 178 ------------------ .../gui/guide/GuideActionRenderer.java | 11 +- .../gui/guide/InGameButtonGuide.java | 18 +- .../gui/layout/ColumnLayoutComponent.java | 6 +- .../gui/layout/PositionedComponent.java | 10 +- .../gui/layout/RenderComponent.java | 4 +- .../gui/layout/RowLayoutComponent.java | 6 +- .../gui/screen/BetaNoticeScreen.java | 10 +- .../ControllerDeadzoneCalibrationScreen.java | 27 ++- .../ingame/ControllerPlayerMovement.java | 2 +- .../iris/BaseOptionElementWidgetMixin.java | 60 +++--- .../chatkbheight/ChatComponentMixin.java | 11 +- .../feature/chatkbheight/ChatScreenMixin.java | 12 +- .../mixins/feature/guide/ingame/GuiMixin.java | 5 +- .../guide/screen/AbstractButtonMixin.java | 29 +-- .../guide/screen/AbstractWidgetMixin.java | 5 +- .../guide/screen/TabNavigationBarMixin.java | 13 +- .../feature/screenop/GameRendererMixin.java | 8 +- .../virtualmouse/GameRendererMixin.java | 8 +- .../reacharound/ReachAroundHandler.java | 2 +- .../controlify/screenop/ScreenProcessor.java | 7 +- .../isxander/controlify/utils/ToastUtils.java | 6 +- .../virtualmouse/VirtualMouseHandler.java | 26 ++- src/main/resources/controlify.mixins.json | 2 +- src/main/resources/fabric.mod.json | 4 +- 41 files changed, 259 insertions(+), 491 deletions(-) delete mode 100644 src/main/java/dev/isxander/controlify/gui/guide/ContainerButtonGuide.java diff --git a/build.gradle.kts b/build.gradle.kts index 6b6ef3b..32befbd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -62,7 +62,7 @@ val minecraftVersion = libs.versions.minecraft.get() dependencies { minecraft(libs.minecraft) mappings(loom.layered { - mappings("org.quiltmc:quilt-mappings:$minecraftVersion+build.${libs.versions.quilt.mappings.get()}:intermediary-v2") + //mappings("org.quiltmc:quilt-mappings:$minecraftVersion+build.${libs.versions.quilt.mappings.get()}:intermediary-v2") officialMojangMappings() }) modImplementation(libs.fabric.loader) @@ -107,12 +107,12 @@ dependencies { // sodium compat modImplementation(libs.sodium) // iris compat - modImplementation(libs.iris) - modRuntimeOnly("org.anarres:jcpp:1.4.14") - modRuntimeOnly("io.github.douira:glsl-transformer:2.0.0-pre9") +// modImplementation(libs.iris) +// modRuntimeOnly("org.anarres:jcpp:1.4.14") +// modRuntimeOnly("io.github.douira:glsl-transformer:2.0.0-pre9") // immediately-fast compat - modImplementation(libs.immediately.fast) - modRuntimeOnly("net.lenni0451:Reflect:1.1.0") +// modImplementation(libs.immediately.fast) +// modRuntimeOnly("net.lenni0451:Reflect:1.1.0") // testmod "testmodImplementation"(sourceSets.main.get().output) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 018262e..bb6da29 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,16 +8,16 @@ machete = "2.+" grgit = "5.0.+" blossom = "1.3.+" -minecraft = "1.19.4" -quilt_mappings = "10" +minecraft = "1.20-pre2" +#quilt_mappings = "10" fabric_loader = "0.14.19" -fabric_api = "0.81.0+1.19.4" +fabric_api = "0.81.2+1.20" mixin_extras = "0.2.0-beta.7" -yet_another_config_lib = "2.5.1+1.19.4" -mod_menu = "6.2.1" +yet_another_config_lib = "2.5.1+1.19.4+1.20.x.dev-SNAPSHOT+1.20.x.dev-SNAPSHOT" +mod_menu = "7.0.0-beta.2" hid4java = "0.7.0" quilt_json5 = "1.0.3" -sodium = "mc1.19.4-0.4.10" +sodium = "f041f7ccba" iris = "1.6.3+1.19.4" immediately_fast = "1.1.12+1.19.4" sdl2_jni = "2.26.5-18" @@ -32,7 +32,7 @@ yet_another_config_lib = { module = "dev.isxander.yacl:yet-another-config-lib-fa mod_menu = { module = "com.terraformersmc:modmenu", version.ref = "mod_menu" } hid4java = { module = "org.hid4java:hid4java", version.ref = "hid4java" } quilt_json5 = { module = "org.quiltmc:quilt-json5", version.ref = "quilt_json5" } -sodium = { module = "maven.modrinth:sodium", version.ref = "sodium" } +sodium = { module = "com.github.CaffeineMC:sodium-fabric", version.ref = "sodium" } iris = { module = "maven.modrinth:iris", version.ref = "iris" } immediately_fast = { module = "maven.modrinth:immediatelyfast", version.ref = "immediately_fast" } sdl2_jni = { module = "dev.isxander:sdl2-jni", version.ref = "sdl2_jni" } diff --git a/src/main/java/dev/isxander/controlify/api/bind/BindRenderer.java b/src/main/java/dev/isxander/controlify/api/bind/BindRenderer.java index 3afc9f7..1b5f91e 100644 --- a/src/main/java/dev/isxander/controlify/api/bind/BindRenderer.java +++ b/src/main/java/dev/isxander/controlify/api/bind/BindRenderer.java @@ -1,10 +1,10 @@ package dev.isxander.controlify.api.bind; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.gui.DrawSize; +import net.minecraft.client.gui.GuiGraphics; public interface BindRenderer { DrawSize size(); - void render(PoseStack poseStack, int x, int centerY); + void render(GuiGraphics graphics, int x, int centerY); } diff --git a/src/main/java/dev/isxander/controlify/bindings/ControllerBindingImpl.java b/src/main/java/dev/isxander/controlify/bindings/ControllerBindingImpl.java index 29c1cf7..11ffd7a 100644 --- a/src/main/java/dev/isxander/controlify/bindings/ControllerBindingImpl.java +++ b/src/main/java/dev/isxander/controlify/bindings/ControllerBindingImpl.java @@ -2,7 +2,6 @@ package dev.isxander.controlify.bindings; import com.google.common.collect.ImmutableSet; import com.google.gson.JsonObject; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.Controlify; import dev.isxander.controlify.api.bind.BindRenderer; import dev.isxander.controlify.api.bind.ControllerBinding; @@ -18,6 +17,7 @@ import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; import dev.isxander.yacl.api.Option; import net.minecraft.client.KeyMapping; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.locale.Language; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -302,8 +302,8 @@ public class ControllerBindingImpl implements Control private record BindRendererImpl(IBind bind) implements BindRenderer { @Override - public void render(PoseStack poseStack, int x, int centerY) { - bind.draw(poseStack, x, centerY); + public void render(GuiGraphics graphics, int x, int centerY) { + bind.draw(graphics, x, centerY); } @Override diff --git a/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java b/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java index e2c28dd..899e5c9 100644 --- a/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java +++ b/src/main/java/dev/isxander/controlify/bindings/ControllerBindings.java @@ -514,7 +514,7 @@ public class ControllerBindings { if (Controlify.instance().currentInputMode() != InputMode.CONTROLLER) return; - if (Minecraft.getInstance().screen != null && !Minecraft.getInstance().screen.passEvents) + if (Minecraft.getInstance().screen != null) return; for (var binding : registry().values()) { diff --git a/src/main/java/dev/isxander/controlify/bindings/EmptyBind.java b/src/main/java/dev/isxander/controlify/bindings/EmptyBind.java index 21ead8c..2e585d8 100644 --- a/src/main/java/dev/isxander/controlify/bindings/EmptyBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/EmptyBind.java @@ -1,10 +1,10 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.ControllerState; import dev.isxander.controlify.gui.DrawSize; +import net.minecraft.client.gui.GuiGraphics; public class EmptyBind implements IBind { public static final String BIND_ID = "empty"; @@ -20,7 +20,7 @@ public class EmptyBind implements IBind { } @Override - public void draw(PoseStack matrices, int x, int centerY) { + public void draw(GuiGraphics graphics, int x, int centerY) { } diff --git a/src/main/java/dev/isxander/controlify/bindings/GamepadBind.java b/src/main/java/dev/isxander/controlify/bindings/GamepadBind.java index 78f6bae..2294da8 100644 --- a/src/main/java/dev/isxander/controlify/bindings/GamepadBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/GamepadBind.java @@ -1,14 +1,12 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.gamepad.BuiltinGamepadTheme; import dev.isxander.controlify.controller.gamepad.GamepadController; import dev.isxander.controlify.controller.gamepad.GamepadState; import dev.isxander.controlify.gui.DrawSize; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import java.util.Objects; @@ -31,13 +29,9 @@ public class GamepadBind implements IBind { } @Override - public void draw(PoseStack matrices, int x, int centerY) { + public void draw(GuiGraphics graphics, int x, int centerY) { ResourceLocation texture = getTexture(gamepad.config().theme); - - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - - GuiComponent.blit(matrices, x, centerY - 22 / 2, 0, 0, 22, 22, 22, 22); + graphics.blit(texture, x, centerY - 22 / 2, 0, 0, 22, 22, 22, 22); } @Override diff --git a/src/main/java/dev/isxander/controlify/bindings/IBind.java b/src/main/java/dev/isxander/controlify/bindings/IBind.java index d07ad6f..e18d6f1 100644 --- a/src/main/java/dev/isxander/controlify/bindings/IBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/IBind.java @@ -1,11 +1,11 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.*; import dev.isxander.controlify.controller.gamepad.GamepadController; import dev.isxander.controlify.controller.joystick.SingleJoystickController; import dev.isxander.controlify.gui.DrawSize; +import net.minecraft.client.gui.GuiGraphics; public interface IBind { float state(S state); @@ -13,7 +13,7 @@ public interface IBind { return state(state) > controller().config().buttonActivationThreshold; } - void draw(PoseStack matrices, int x, int centerY); + void draw(GuiGraphics graphics, int x, int centerY); DrawSize drawSize(); JsonObject toJson(); diff --git a/src/main/java/dev/isxander/controlify/bindings/JoystickAxisBind.java b/src/main/java/dev/isxander/controlify/bindings/JoystickAxisBind.java index 5e032b1..a3cef99 100644 --- a/src/main/java/dev/isxander/controlify/bindings/JoystickAxisBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/JoystickAxisBind.java @@ -1,8 +1,6 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.joystick.JoystickController; import dev.isxander.controlify.controller.joystick.JoystickState; @@ -10,7 +8,7 @@ import dev.isxander.controlify.controller.joystick.mapping.JoystickMapping; import dev.isxander.controlify.controller.joystick.mapping.UnmappedJoystickMapping; import dev.isxander.controlify.gui.DrawSize; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import java.util.Objects; @@ -38,7 +36,7 @@ public class JoystickAxisBind implements IBind { } @Override - public void draw(PoseStack matrices, int x, int centerY) { + public void draw(GuiGraphics graphics, int x, int centerY) { JoystickMapping mapping = joystick.mapping(); String type = joystick.type().themeId(); @@ -46,14 +44,12 @@ public class JoystickAxisBind implements IBind { String direction = mapping.axes()[axisIndex].getDirectionIdentifier(axisIndex, this.direction); var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/axis_" + axis + "_" + direction + ".png"); - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22); + graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22); if (mapping instanceof UnmappedJoystickMapping) { var text = Integer.toString(axisIndex + 1); var font = Minecraft.getInstance().font; - GuiComponent.drawCenteredString(matrices, font, text, x + 11, centerY - font.lineHeight / 2, 0xFFFFFF); + graphics.drawCenteredString(font, text, x + 11, centerY - font.lineHeight / 2, 0xFFFFFF); } } diff --git a/src/main/java/dev/isxander/controlify/bindings/JoystickButtonBind.java b/src/main/java/dev/isxander/controlify/bindings/JoystickButtonBind.java index 2c7d082..b59eeeb 100644 --- a/src/main/java/dev/isxander/controlify/bindings/JoystickButtonBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/JoystickButtonBind.java @@ -1,13 +1,11 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.joystick.JoystickController; import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import java.util.Objects; @@ -29,14 +27,12 @@ public class JoystickButtonBind implements IBind { } @Override - public void draw(PoseStack matrices, int x, int centerY) { + public void draw(GuiGraphics graphics, int x, int centerY) { String type = joystick.type().themeId(); String button = joystick.mapping().buttons()[buttonIndex].identifier(); var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/button_" + button + ".png"); - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22); + graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22); } @Override diff --git a/src/main/java/dev/isxander/controlify/bindings/JoystickHatBind.java b/src/main/java/dev/isxander/controlify/bindings/JoystickHatBind.java index a3d3338..b058375 100644 --- a/src/main/java/dev/isxander/controlify/bindings/JoystickHatBind.java +++ b/src/main/java/dev/isxander/controlify/bindings/JoystickHatBind.java @@ -1,13 +1,11 @@ package dev.isxander.controlify.bindings; import com.google.gson.JsonObject; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.controller.Controller; import dev.isxander.controlify.controller.joystick.JoystickController; import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import java.util.Objects; @@ -31,7 +29,7 @@ public class JoystickHatBind implements IBind { } @Override - public void draw(PoseStack matrices, int x, int centerY) { + public void draw(GuiGraphics graphics, int x, int centerY) { String type = joystick.type().themeId(); String hat = joystick.mapping().hats()[hatIndex].identifier(); String direction = "centered"; @@ -45,10 +43,7 @@ public class JoystickHatBind implements IBind { direction = "right"; var texture = new ResourceLocation("controlify", "textures/gui/joystick/" + type + "/hat" + hat + "_" + direction + ".png"); - - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - GuiComponent.blit(matrices, x, centerY - 11, 0, 0, 22, 22, 22, 22); + graphics.blit(texture, x, centerY - 11, 0, 0, 22, 22, 22, 22); } @Override diff --git a/src/main/java/dev/isxander/controlify/compatibility/immediatelyfast/ImmediatelyFastCompat.java b/src/main/java/dev/isxander/controlify/compatibility/immediatelyfast/ImmediatelyFastCompat.java index 6044100..9d2425e 100644 --- a/src/main/java/dev/isxander/controlify/compatibility/immediatelyfast/ImmediatelyFastCompat.java +++ b/src/main/java/dev/isxander/controlify/compatibility/immediatelyfast/ImmediatelyFastCompat.java @@ -1,13 +1,13 @@ package dev.isxander.controlify.compatibility.immediatelyfast; -import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers; +//import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers; public class ImmediatelyFastCompat { public static void beginHudBatching() { - BatchingBuffers.beginHudBatching(); +// BatchingBuffers.beginHudBatching(); } public static void endHudBatching() { - BatchingBuffers.endHudBatching(); +// BatchingBuffers.endHudBatching(); } } diff --git a/src/main/java/dev/isxander/controlify/config/gui/AbstractBindController.java b/src/main/java/dev/isxander/controlify/config/gui/AbstractBindController.java index 817c1b3..1f92120 100644 --- a/src/main/java/dev/isxander/controlify/config/gui/AbstractBindController.java +++ b/src/main/java/dev/isxander/controlify/config/gui/AbstractBindController.java @@ -12,8 +12,8 @@ import dev.isxander.yacl.api.Option; import dev.isxander.yacl.api.utils.Dimension; import dev.isxander.yacl.gui.YACLScreen; import dev.isxander.yacl.gui.controllers.ControllerWidget; -import dev.isxander.yacl.gui.utils.GuiUtils; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import org.lwjgl.glfw.GLFW; @@ -60,12 +60,12 @@ public abstract class AbstractBindController implemen } @Override - protected void drawValueText(PoseStack matrices, int mouseX, int mouseY, float delta) { + protected void drawValueText(GuiGraphics graphics, int mouseX, int mouseY, float delta) { if (awaitingControllerInput) { - textRenderer.drawShadow(matrices, awaitingText, getDimension().xLimit() - textRenderer.width(awaitingText) - getXPadding(), getDimension().centerY() - textRenderer.lineHeight / 2f, 0xFFFFFF); + graphics.drawString(textRenderer, awaitingText, getDimension().xLimit() - textRenderer.width(awaitingText) - getXPadding(), (int)(getDimension().centerY() - textRenderer.lineHeight / 2f), 0xFFFFFF, true); } else { var bind = control.option().pendingValue(); - bind.draw(matrices, getDimension().xLimit() - bind.drawSize().width(), getDimension().centerY()); + bind.draw(graphics, getDimension().xLimit() - bind.drawSize().width(), getDimension().centerY()); } } diff --git a/src/main/java/dev/isxander/controlify/controller/joystick/render/GenericRenderer.java b/src/main/java/dev/isxander/controlify/controller/joystick/render/GenericRenderer.java index cebbb3c..21b0600 100644 --- a/src/main/java/dev/isxander/controlify/controller/joystick/render/GenericRenderer.java +++ b/src/main/java/dev/isxander/controlify/controller/joystick/render/GenericRenderer.java @@ -6,7 +6,7 @@ import dev.isxander.controlify.bindings.JoystickAxisBind; import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.Nullable; @@ -19,14 +19,15 @@ public abstract class GenericRenderer implements JoystickRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size) { + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size) { if (annotation != null) { - minecraft.font.draw( - poseStack, + graphics.drawString( + minecraft.font, annotation, x + size + 2 - minecraft.font.width(annotation), - centerY + size/2f - minecraft.font.lineHeight * 0.75f, - -1 + (int)(centerY + size/2f - minecraft.font.lineHeight * 0.75f), + -1, + false ); } @@ -41,34 +42,31 @@ public abstract class GenericRenderer implements JoystickRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size) { - RenderSystem.setShaderTexture(0, BUTTON_TEXTURE); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit(poseStack, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE); + graphics.blit(BUTTON_TEXTURE, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE); - poseStack.popPose(); + graphics.pose().popPose(); - super.render(poseStack, x, centerY, size); + super.render(graphics, x, centerY, size); return new DrawSize(size, size); } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down) { - return this.render(poseStack, x, centerY, size); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down) { + return this.render(graphics, x, centerY, size); } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, boolean down) { - return this.render(poseStack, x, centerY, DEFAULT_SIZE); + public DrawSize render(GuiGraphics graphics, int x, int centerY, boolean down) { + return this.render(graphics, x, centerY, DEFAULT_SIZE); } } @@ -80,28 +78,25 @@ public abstract class GenericRenderer implements JoystickRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) { - RenderSystem.setShaderTexture(0, AXIS_TEXTURE); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit( - poseStack, + graphics.blit( + AXIS_TEXTURE, 0, 0, direction.ordinal() * DEFAULT_SIZE, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE ); - poseStack.popPose(); + graphics.pose().popPose(); - super.render(poseStack, x, centerY, size); + super.render(graphics, x, centerY, size); return new DrawSize(size, size); } @@ -115,28 +110,25 @@ public abstract class GenericRenderer implements JoystickRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState hatState) { - RenderSystem.setShaderTexture(0, HAT_TEXTURE); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState hatState) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit( - poseStack, + graphics.blit( + HAT_TEXTURE, 0, 0, hatState.ordinal() * DEFAULT_SIZE, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE ); - poseStack.popPose(); + graphics.pose().popPose(); - super.render(poseStack, x, centerY, size); + super.render(graphics, x, centerY, size); return new DrawSize(size, size); } diff --git a/src/main/java/dev/isxander/controlify/controller/joystick/render/JoystickRenderer.java b/src/main/java/dev/isxander/controlify/controller/joystick/render/JoystickRenderer.java index c389af8..beaea6f 100644 --- a/src/main/java/dev/isxander/controlify/controller/joystick/render/JoystickRenderer.java +++ b/src/main/java/dev/isxander/controlify/controller/joystick/render/JoystickRenderer.java @@ -4,45 +4,46 @@ import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.bindings.JoystickAxisBind; import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; +import net.minecraft.client.gui.GuiGraphics; public interface JoystickRenderer { int DEFAULT_SIZE = 22; - DrawSize render(PoseStack poseStack, int x, int centerY, int size); + DrawSize render(GuiGraphics graphics, int x, int centerY, int size); interface Button extends JoystickRenderer { - DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down); + DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down); - default DrawSize render(PoseStack poseStack, int x, int centerY, boolean down) { - return render(poseStack, x, centerY, DEFAULT_SIZE, down); + default DrawSize render(GuiGraphics graphics, int x, int centerY, boolean down) { + return render(graphics, x, centerY, DEFAULT_SIZE, down); } - default DrawSize render(PoseStack poseStack, int x, int centerY, int size) { - return render(poseStack, x, centerY, size, false); + default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) { + return render(graphics, x, centerY, size, false); } } interface Axis extends JoystickRenderer { - DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction); + DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction); - default DrawSize render(PoseStack poseStack, int x, int centerY, JoystickAxisBind.AxisDirection direction) { - return render(poseStack, x, centerY, DEFAULT_SIZE, direction); + default DrawSize render(GuiGraphics graphics, int x, int centerY, JoystickAxisBind.AxisDirection direction) { + return render(graphics, x, centerY, DEFAULT_SIZE, direction); } - default DrawSize render(PoseStack poseStack, int x, int centerY, int size) { - return render(poseStack, x, centerY, size, JoystickAxisBind.AxisDirection.POSITIVE); + default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) { + return render(graphics, x, centerY, size, JoystickAxisBind.AxisDirection.POSITIVE); } } interface Hat extends JoystickRenderer { - DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState state); + DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState state); - default DrawSize render(PoseStack poseStack, int x, int centerY, JoystickState.HatState state) { - return render(poseStack, x, centerY, DEFAULT_SIZE, state); + default DrawSize render(GuiGraphics graphics, int x, int centerY, JoystickState.HatState state) { + return render(graphics, x, centerY, DEFAULT_SIZE, state); } - default DrawSize render(PoseStack poseStack, int x, int centerY, int size) { - return render(poseStack, x, centerY, size, JoystickState.HatState.CENTERED); + default DrawSize render(GuiGraphics graphics, int x, int centerY, int size) { + return render(graphics, x, centerY, size, JoystickState.HatState.CENTERED); } } } diff --git a/src/main/java/dev/isxander/controlify/controller/joystick/render/ThemedRenderer.java b/src/main/java/dev/isxander/controlify/controller/joystick/render/ThemedRenderer.java index 50853dd..17c6d49 100644 --- a/src/main/java/dev/isxander/controlify/controller/joystick/render/ThemedRenderer.java +++ b/src/main/java/dev/isxander/controlify/controller/joystick/render/ThemedRenderer.java @@ -1,13 +1,10 @@ package dev.isxander.controlify.controller.joystick.render; - -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.bindings.JoystickAxisBind; import dev.isxander.controlify.controller.joystick.JoystickState; import dev.isxander.controlify.gui.DrawSize; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.resources.ResourceLocation; public abstract class ThemedRenderer { @@ -27,20 +24,17 @@ public abstract class ThemedRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, boolean down) { - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, boolean down) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit(poseStack, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE); + graphics.blit(texture, 0, 0, 0, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE); - poseStack.popPose(); + graphics.pose().popPose(); return new DrawSize(size, size); } @@ -55,26 +49,23 @@ public abstract class ThemedRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) { - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickAxisBind.AxisDirection direction) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit( - poseStack, + graphics.blit( + texture, 0, 0, direction.ordinal() * DEFAULT_SIZE, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE * JoystickAxisBind.AxisDirection.values().length, DEFAULT_SIZE ); - poseStack.popPose(); + graphics.pose().popPose(); return new DrawSize(size, size); } @@ -89,26 +80,23 @@ public abstract class ThemedRenderer { } @Override - public DrawSize render(PoseStack poseStack, int x, int centerY, int size, JoystickState.HatState hatState) { - RenderSystem.setShaderTexture(0, texture); - RenderSystem.setShaderColor(1, 1, 1, 1); - - poseStack.pushPose(); - poseStack.translate(x, centerY, 0); + public DrawSize render(GuiGraphics graphics, int x, int centerY, int size, JoystickState.HatState hatState) { + graphics.pose().pushPose(); + graphics.pose().translate(x, centerY, 0); float scale = (float) size / 22f; - poseStack.scale(scale, scale, 1); - poseStack.translate(0f, -DEFAULT_SIZE / scale / 2f, 0); + graphics.pose().scale(scale, scale, 1); + graphics.pose().translate(0f, -DEFAULT_SIZE / scale / 2f, 0); - GuiComponent.blit( - poseStack, + graphics.blit( + texture, 0, 0, hatState.ordinal() * DEFAULT_SIZE, 0, DEFAULT_SIZE, DEFAULT_SIZE, DEFAULT_SIZE * JoystickState.HatState.values().length, DEFAULT_SIZE ); - poseStack.popPose(); + graphics.pose().popPose(); return new DrawSize(size, size); } diff --git a/src/main/java/dev/isxander/controlify/gui/guide/ContainerButtonGuide.java b/src/main/java/dev/isxander/controlify/gui/guide/ContainerButtonGuide.java deleted file mode 100644 index 35ba69a..0000000 --- a/src/main/java/dev/isxander/controlify/gui/guide/ContainerButtonGuide.java +++ /dev/null @@ -1,178 +0,0 @@ -package dev.isxander.controlify.gui.guide; - -import com.mojang.blaze3d.vertex.PoseStack; -import dev.isxander.controlify.InputMode; -import dev.isxander.controlify.api.ControlifyApi; -import dev.isxander.controlify.api.event.ControlifyEvents; -import dev.isxander.controlify.bindings.ControllerBindings; -import dev.isxander.controlify.compatibility.ControlifyCompat; -import dev.isxander.controlify.controller.Controller; -import dev.isxander.controlify.gui.layout.AnchorPoint; -import dev.isxander.controlify.gui.layout.ColumnLayoutComponent; -import dev.isxander.controlify.gui.layout.PositionedComponent; -import dev.isxander.controlify.gui.layout.RowLayoutComponent; -import dev.isxander.controlify.mixins.feature.guide.screen.AbstractContainerScreenAccessor; -import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.Screen; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.network.chat.Component; - -import java.util.Optional; - -public final class ContainerButtonGuide { - private static PositionedComponent>>> leftLayout; - private static PositionedComponent>>> rightLayout; - - public static void setup() { - ScreenEvents.BEFORE_INIT.register((minecraft, screen, sw, sh) -> { - removeLayout(); - - if (isScreenCompatible(screen)) { - setupLayout(); - - ScreenEvents.afterRender(screen).register((s, stack, mouseX, mouseY, tickDelta) -> { - // Fabric API provides the wrong matrixstack (which is translated -2000), behind - // the ortho near plane, so we need to translate it back to the front. - // https://github.com/FabricMC/fabric/pull/3061 - stack.pushPose(); - stack.translate(0, 0, 2000); - - renderGuide((AbstractContainerScreen) s, stack, tickDelta, mouseX, mouseY, sw, sh); - - stack.popPose(); - }); - } - }); - - ControlifyEvents.INPUT_MODE_CHANGED.register(mode -> { - if (isScreenCompatible(Minecraft.getInstance().screen)) { - if (mode == InputMode.CONTROLLER) { - setupLayout(); - } else { - removeLayout(); - } - } - }); - } - - private static void setupLayout() { - ControllerBindings bindings = ControlifyApi.get().getCurrentController() - .map(Controller::bindings) - .orElseThrow(); - - leftLayout = new PositionedComponent<>( - ColumnLayoutComponent.>>builder() - .spacing(2) - .colPadding(2, 2) - .elementPosition(ColumnLayoutComponent.ElementPosition.LEFT) - .element(RowLayoutComponent.>builder() - .spacing(5) - .rowPadding(0) - .elementPosition(RowLayoutComponent.ElementPosition.MIDDLE) - .element(new GuideActionRenderer<>( - new GuideAction<>(bindings.VMOUSE_LCLICK, ctx -> { - if (!ctx.holdingItem().isEmpty()) - if (ctx.hoveredSlot() != null && ctx.hoveredSlot().hasItem()) - if (ctx.hoveredSlot().mayPlace(ctx.holdingItem())) - if (ctx.holdingItem().getCount() > 1) - return Optional.of(Component.translatable("controlify.guide.container.place_all")); - else - return Optional.of(Component.translatable("controlify.guide.container.place_one")); - else - return Optional.of(Component.translatable("controlify.guide.container.swap")); - else if (ctx.cursorOutsideContainer()) - return Optional.of(Component.translatable("controlify.guide.container.drop")); - if (ctx.hoveredSlot() != null && ctx.hoveredSlot().hasItem()) - return Optional.of(Component.translatable("controlify.guide.container.take")); - return Optional.empty(); - }), - false, false - )) - .element(new GuideActionRenderer<>( - new GuideAction<>(bindings.GUI_BACK, ctx -> { - return Optional.of(Component.translatable("controlify.guide.container.exit")); - }), - false, false - )) - .build()) - .build(), - AnchorPoint.BOTTOM_LEFT, - 0, 0, - AnchorPoint.BOTTOM_LEFT - ); - - rightLayout = new PositionedComponent<>( - ColumnLayoutComponent.>>builder() - .spacing(2) - .elementPosition(ColumnLayoutComponent.ElementPosition.RIGHT) - .colPadding(2, 2) - .element(RowLayoutComponent.>builder() - .spacing(5) - .rowPadding(0) - .elementPosition(RowLayoutComponent.ElementPosition.MIDDLE) - .element(new GuideActionRenderer<>( - new GuideAction<>(bindings.VMOUSE_RCLICK, ctx -> { - if (ctx.hoveredSlot() != null && ctx.hoveredSlot().getItem().getCount() > 1 && ctx.holdingItem().isEmpty()) - return Optional.of(Component.translatable("controlify.guide.container.take_half")); - if (ctx.hoveredSlot() != null && !ctx.holdingItem().isEmpty() && ctx.hoveredSlot().mayPlace(ctx.holdingItem())) - return Optional.of(Component.translatable("controlify.guide.container.take_one")); - return Optional.empty(); - }), - true, false - )) - .element(new GuideActionRenderer<>( - new GuideAction<>(bindings.VMOUSE_SHIFT_CLICK, ctx -> { - return Optional.of(Component.translatable("controlify.guide.container.quick_move")); - }), - true, false - )) - .build()) - .build(), - AnchorPoint.BOTTOM_RIGHT, - 0, 0, - AnchorPoint.BOTTOM_RIGHT - ); - } - - private static void removeLayout() { - leftLayout = null; - rightLayout = null; - } - - private static void renderGuide(AbstractContainerScreen screen, PoseStack stack, float tickDelta, int mouseX, int mouseY, int screenWidth, int screenHeight) { - if (leftLayout == null || rightLayout == null) - return; - - if (!ControlifyApi.get().getCurrentController().map(controller -> controller.config().showScreenGuide).orElse(false)) { - return; - } - - var accessor = (AbstractContainerScreenAccessor) screen; - - ContainerGuideCtx ctx = new ContainerGuideCtx(accessor.getHoveredSlot(), screen.getMenu().getCarried(), accessor.invokeHasClickedOutside(mouseX, mouseY, accessor.getLeftPos(), accessor.getTopPos(), 0)); - - for (var row : leftLayout.getComponent().getChildComponents()) { - for (var element : row.getChildComponents()) { - element.updateName(ctx); - } - } - for (var row : rightLayout.getComponent().getChildComponents()) { - for (var element : row.getChildComponents()) { - element.updateName(ctx); - } - } - - leftLayout.updatePosition(); - rightLayout.updatePosition(); - - ControlifyCompat.ifBeginHudBatching(); - leftLayout.renderComponent(stack, tickDelta); - rightLayout.renderComponent(stack, tickDelta); - ControlifyCompat.ifEndHudBatching(); - } - - private static boolean isScreenCompatible(Screen screen) { - return screen instanceof AbstractContainerScreen; - } -} diff --git a/src/main/java/dev/isxander/controlify/gui/guide/GuideActionRenderer.java b/src/main/java/dev/isxander/controlify/gui/guide/GuideActionRenderer.java index 1d34a5b..f75a8c1 100644 --- a/src/main/java/dev/isxander/controlify/gui/guide/GuideActionRenderer.java +++ b/src/main/java/dev/isxander/controlify/gui/guide/GuideActionRenderer.java @@ -1,12 +1,11 @@ package dev.isxander.controlify.gui.guide; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.api.bind.BindRenderer; import dev.isxander.controlify.gui.DrawSize; import dev.isxander.controlify.gui.layout.RenderComponent; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import org.joml.Vector2i; import org.joml.Vector2ic; @@ -27,7 +26,7 @@ public class GuideActionRenderer implements RenderComponent { } @Override - public void render(PoseStack stack, int x, int y, float deltaTime) { + public void render(GuiGraphics graphics, int x, int y, float deltaTime) { if (!isVisible()) return; @@ -37,14 +36,14 @@ public class GuideActionRenderer implements RenderComponent { DrawSize drawSize = renderer.size(); int textWidth = font.width(name.get()); - renderer.render(stack, x + (!rtl ? 0 : textWidth + 2), y + drawSize.height() / 2); + renderer.render(graphics, x + (!rtl ? 0 : textWidth + 2), y + drawSize.height() / 2); int textX = x + (rtl ? 0 : drawSize.width() + 2); int textY = y + drawSize.height() / 2 - font.lineHeight / 2; if (textContrast) - GuiComponent.fill(stack, textX - 1, textY - 1, textX + textWidth + 1, textY + font.lineHeight + 1, 0x80000000); - font.draw(stack, name.get(), textX, textY, 0xFFFFFF); + graphics.fill(textX - 1, textY - 1, textX + textWidth + 1, textY + font.lineHeight + 1, 0x80000000); + graphics.drawString(font, name.get(), textX, textY, 0xFFFFFF, false); } @Override diff --git a/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java b/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java index 3d9206a..7078703 100644 --- a/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java +++ b/src/main/java/dev/isxander/controlify/gui/guide/InGameButtonGuide.java @@ -1,6 +1,5 @@ package dev.isxander.controlify.gui.guide; -import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.api.bind.ControllerBinding; import dev.isxander.controlify.api.guide.ActionPriority; import dev.isxander.controlify.api.guide.GuideActionNameSupplier; @@ -12,6 +11,7 @@ import dev.isxander.controlify.gui.layout.AnchorPoint; import dev.isxander.controlify.gui.layout.ColumnLayoutComponent; import dev.isxander.controlify.gui.layout.PositionedComponent; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.chat.Component; import net.minecraft.world.effect.MobEffects; @@ -69,14 +69,14 @@ public class InGameButtonGuide implements IngameGuideRegistry { ); } - public void renderHud(PoseStack poseStack, float tickDelta, int width, int height) { + public void renderHud(GuiGraphics graphics, float tickDelta, int width, int height) { if (!controller.config().showIngameGuide || minecraft.screen != null || minecraft.options.renderDebug) return; ControlifyCompat.ifBeginHudBatching(); - leftLayout.renderComponent(poseStack, tickDelta); - rightLayout.renderComponent(poseStack, tickDelta); + leftLayout.renderComponent(graphics, tickDelta); + rightLayout.renderComponent(graphics, tickDelta); ControlifyCompat.ifEndHudBatching(); } @@ -111,13 +111,13 @@ public class InGameButtonGuide implements IngameGuideRegistry { if (player.getAbilities().flying) return Optional.of(Component.translatable("controlify.guide.ingame.fly_up")); - if (player.isOnGround()) + if (player.onGround()) return Optional.of(Component.translatable("key.jump")); if (player.isInWater()) return Optional.of(Component.translatable("controlify.guide.ingame.swim_up")); - if (!player.isOnGround() && !player.isFallFlying() && !player.isInWater() && !player.hasEffect(MobEffects.LEVITATION)) { + if (!player.onGround() && !player.isFallFlying() && !player.isInWater() && !player.hasEffect(MobEffects.LEVITATION)) { var chestStack = player.getItemBySlot(EquipmentSlot.CHEST); if (chestStack.is(Items.ELYTRA) && ElytraItem.isFlyEnabled(chestStack)) return Optional.of(Component.translatable("controlify.guide.ingame.start_elytra")); @@ -131,7 +131,7 @@ public class InGameButtonGuide implements IngameGuideRegistry { return Optional.of(Component.translatable("controlify.guide.ingame.dismount")); if (player.getAbilities().flying) return Optional.of(Component.translatable("controlify.guide.ingame.fly_down")); - if (player.isInWater() && !player.isOnGround()) + if (player.isInWater() && !player.onGround()) return Optional.of(Component.translatable("controlify.guide.ingame.swim_down")); if (ctx.controller().config().toggleSneak) { return Optional.of(Component.translatable(player.input.shiftKeyDown ? "controlify.guide.ingame.stop_sneaking" : "controlify.guide.ingame.start_sneaking")); @@ -182,8 +182,8 @@ public class InGameButtonGuide implements IngameGuideRegistry { return Optional.empty(); }); registerGuideAction(controller.bindings().DROP, ActionLocation.RIGHT, (ctx) -> { - var player = ctx.player(); - if (player.hasItemInSlot(EquipmentSlot.MAINHAND) || player.hasItemInSlot(EquipmentSlot.OFFHAND)) + var holdingItem = ctx.player().getInventory().getSelected(); + if (!holdingItem.isEmpty()) return Optional.of(Component.translatable("controlify.guide.ingame.drop")); return Optional.empty(); }); diff --git a/src/main/java/dev/isxander/controlify/gui/layout/ColumnLayoutComponent.java b/src/main/java/dev/isxander/controlify/gui/layout/ColumnLayoutComponent.java index ba85880..a0486ae 100644 --- a/src/main/java/dev/isxander/controlify/gui/layout/ColumnLayoutComponent.java +++ b/src/main/java/dev/isxander/controlify/gui/layout/ColumnLayoutComponent.java @@ -1,6 +1,6 @@ package dev.isxander.controlify.gui.layout; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import org.apache.commons.lang3.Validate; import org.joml.Vector2i; import org.joml.Vector2ic; @@ -35,7 +35,7 @@ public class ColumnLayoutComponent extends AbstractLa } @Override - public void render(PoseStack stack, int x, int y, float deltaTime) { + public void render(GuiGraphics graphics, int x, int y, float deltaTime) { int width = getMaxChildWidth(); if (width == -1) @@ -47,7 +47,7 @@ public class ColumnLayoutComponent extends AbstractLa continue; element.render( - stack, + graphics, x + colPaddingLeft + elementPosition.positionFunction.apply(width, element.size().x()), y + colPaddingTop + yOffset, deltaTime diff --git a/src/main/java/dev/isxander/controlify/gui/layout/PositionedComponent.java b/src/main/java/dev/isxander/controlify/gui/layout/PositionedComponent.java index 65e0719..47b51ce 100644 --- a/src/main/java/dev/isxander/controlify/gui/layout/PositionedComponent.java +++ b/src/main/java/dev/isxander/controlify/gui/layout/PositionedComponent.java @@ -1,7 +1,7 @@ package dev.isxander.controlify.gui.layout; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Renderable; import org.joml.Vector2ic; @@ -33,12 +33,12 @@ public class PositionedComponent implements Renderabl } @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - this.renderComponent(matrices, delta); + public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + this.renderComponent(graphics, delta); } - public void renderComponent(PoseStack stack, float deltaTime) { - component.render(stack, x, y, deltaTime); + public void renderComponent(GuiGraphics graphics, float deltaTime) { + component.render(graphics, x, y, deltaTime); } public int x() { diff --git a/src/main/java/dev/isxander/controlify/gui/layout/RenderComponent.java b/src/main/java/dev/isxander/controlify/gui/layout/RenderComponent.java index 5d3736c..8bb51b1 100644 --- a/src/main/java/dev/isxander/controlify/gui/layout/RenderComponent.java +++ b/src/main/java/dev/isxander/controlify/gui/layout/RenderComponent.java @@ -1,9 +1,9 @@ package dev.isxander.controlify.gui.layout; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import org.joml.Vector2ic; public interface RenderComponent { - void render(PoseStack stack, int x, int y, float deltaTime); + void render(GuiGraphics graphics, int x, int y, float deltaTime); Vector2ic size(); diff --git a/src/main/java/dev/isxander/controlify/gui/layout/RowLayoutComponent.java b/src/main/java/dev/isxander/controlify/gui/layout/RowLayoutComponent.java index cea5efa..690df5d 100644 --- a/src/main/java/dev/isxander/controlify/gui/layout/RowLayoutComponent.java +++ b/src/main/java/dev/isxander/controlify/gui/layout/RowLayoutComponent.java @@ -1,6 +1,6 @@ package dev.isxander.controlify.gui.layout; -import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; import org.apache.commons.lang3.Validate; import org.joml.Vector2i; import org.joml.Vector2ic; @@ -32,7 +32,7 @@ public class RowLayoutComponent extends AbstractLayou } @Override - public void render(PoseStack stack, int x, int y, float deltaTime) { + public void render(GuiGraphics graphics, int x, int y, float deltaTime) { int height = getMaxChildHeight(); if (height == -1) @@ -44,7 +44,7 @@ public class RowLayoutComponent extends AbstractLayou continue; element.render( - stack, + graphics, x + rowPaddingLeft + xOffset, y + rowPaddingTop + elementPosition.positionFunction.apply(height, element.size().y()), deltaTime diff --git a/src/main/java/dev/isxander/controlify/gui/screen/BetaNoticeScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/BetaNoticeScreen.java index 573256a..43de7f4 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/BetaNoticeScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/BetaNoticeScreen.java @@ -1,13 +1,11 @@ package dev.isxander.controlify.gui.screen; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.ChatFormatting; import net.minecraft.Util; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AccessibilityOnboardingTextWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.MultiLineTextWidget; -import net.minecraft.client.gui.layouts.FrameLayout; -import net.minecraft.client.gui.layouts.GridLayout; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.network.chat.CommonComponents; @@ -55,8 +53,8 @@ public class BetaNoticeScreen extends Screen { } @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - renderBackground(matrices); - super.render(matrices, mouseX, mouseY, delta); + public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + renderBackground(graphics); + super.render(graphics, mouseX, mouseY, delta); } } diff --git a/src/main/java/dev/isxander/controlify/gui/screen/ControllerDeadzoneCalibrationScreen.java b/src/main/java/dev/isxander/controlify/gui/screen/ControllerDeadzoneCalibrationScreen.java index 7ae8db3..fe0bf62 100644 --- a/src/main/java/dev/isxander/controlify/gui/screen/ControllerDeadzoneCalibrationScreen.java +++ b/src/main/java/dev/isxander/controlify/gui/screen/ControllerDeadzoneCalibrationScreen.java @@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import dev.isxander.controlify.Controlify; import dev.isxander.controlify.controller.Controller; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.MultiLineLabel; import net.minecraft.client.gui.screens.Screen; @@ -57,36 +58,34 @@ public class ControllerDeadzoneCalibrationScreen extends Screen { } @Override - public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { - renderBackground(matrices); + public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { + renderBackground(graphics); - super.render(matrices, mouseX, mouseY, delta); + super.render(graphics, mouseX, mouseY, delta); - drawCenteredString(matrices, font, Component.translatable("controlify.calibration.title", controller.name()).withStyle(ChatFormatting.BOLD), width / 2, 8, -1); + graphics.drawCenteredString(font, Component.translatable("controlify.calibration.title", controller.name()).withStyle(ChatFormatting.BOLD), width / 2, 8, -1); - RenderSystem.setShaderTexture(0, GUI_BARS_LOCATION); - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - matrices.pushPose(); - matrices.scale(2f, 2f, 1f); - drawBar(matrices, width / 2 / 2, 30 / 2, 1f, 0); + graphics.pose().pushPose(); + graphics.pose().scale(2f, 2f, 1f); + drawBar(graphics, width / 2 / 2, 30 / 2, 1f, 0); var progress = (calibrationTicks - 1 + delta) / 100f; if (progress > 0) - drawBar(matrices, width / 2 / 2, 30 / 2, progress, 5); - matrices.popPose(); + drawBar(graphics, width / 2 / 2, 30 / 2, progress, 5); + graphics.pose().popPose(); MultiLineLabel label; if (calibrating) label = waitLabel; else if (calibrated) label = completeLabel; else label = infoLabel; - label.renderCentered(matrices, width / 2, 55); + label.renderCentered(graphics, width / 2, 55); } - private void drawBar(PoseStack matrices, int centerX, int y, float progress, int vOffset) { + private void drawBar(GuiGraphics graphics, int centerX, int y, float progress, int vOffset) { progress = 1 - (float)Math.pow(1 - progress, 3); int x = centerX - 182 / 2; - this.blit(matrices, x, y, 0, 30 + vOffset, (int)(progress * 182), 5); + graphics.blit(GUI_BARS_LOCATION, x, y, 0, 30 + vOffset, (int)(progress * 182), 5); } @Override diff --git a/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java b/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java index 99c6523..823afef 100644 --- a/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java +++ b/src/main/java/dev/isxander/controlify/ingame/ControllerPlayerMovement.java @@ -56,7 +56,7 @@ public class ControllerPlayerMovement extends Input { if (!bindings.JUMP.held()) this.jumping = false; - if (player.getAbilities().flying || (player.isInWater() && !player.isOnGround()) || !controller.config().toggleSneak) { + if (player.getAbilities().flying || (player.isInWater() && !player.onGround()) || !controller.config().toggleSneak) { if (bindings.SNEAK.justPressed()) this.shiftKeyDown = true; if (!bindings.SNEAK.held()) diff --git a/src/main/java/dev/isxander/controlify/mixins/compat/iris/BaseOptionElementWidgetMixin.java b/src/main/java/dev/isxander/controlify/mixins/compat/iris/BaseOptionElementWidgetMixin.java index ca7f4f8..6c25fee 100644 --- a/src/main/java/dev/isxander/controlify/mixins/compat/iris/BaseOptionElementWidgetMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/compat/iris/BaseOptionElementWidgetMixin.java @@ -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(); +// } +// } +//} diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatComponentMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatComponentMixin.java index 7d4f81c..49e2059 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatComponentMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatComponentMixin.java @@ -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)) diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatScreenMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatScreenMixin.java index 29db306..2268ed9 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatScreenMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/chatkbheight/ChatScreenMixin.java @@ -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) diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/guide/ingame/GuiMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/guide/ingame/GuiMixin.java index 5d56534..d1faf8b 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/guide/ingame/GuiMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/guide/ingame/GuiMixin.java @@ -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(); }); } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractButtonMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractButtonMixin.java index 32e5f0a..ba7f42e 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractButtonMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractButtonMixin.java @@ -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 { @Unique private RenderData 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 diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractWidgetMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractWidgetMixin.java index a098cd7..25a6b0a 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractWidgetMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/AbstractWidgetMixin.java @@ -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; } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/TabNavigationBarMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/TabNavigationBarMixin.java index b4035c2..c3d0533 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/TabNavigationBarMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/guide/screen/TabNavigationBarMixin.java @@ -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(); } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/GameRendererMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/screenop/GameRendererMixin.java index f3336f5..3cb1b85 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/screenop/GameRendererMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/screenop/GameRendererMixin.java @@ -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); }); } } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/GameRendererMixin.java b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/GameRendererMixin.java index 04a0d6d..93fb0cb 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/GameRendererMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/GameRendererMixin.java @@ -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); } } diff --git a/src/main/java/dev/isxander/controlify/reacharound/ReachAroundHandler.java b/src/main/java/dev/isxander/controlify/reacharound/ReachAroundHandler.java index ec594a8..96ee9ee 100644 --- a/src/main/java/dev/isxander/controlify/reacharound/ReachAroundHandler.java +++ b/src/main/java/dev/isxander/controlify/reacharound/ReachAroundHandler.java @@ -36,7 +36,7 @@ public class ReachAroundHandler { && cameraEntity.getXRot() >= 45 // if the player is not standing on a block, this is inappropriate // this also prevents selecting fluids as a valid position - && cameraEntity.isOnGround() + && cameraEntity.onGround() // must respect config option && Controlify.instance().config().globalSettings().reachAround.canReachAround(); } diff --git a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java index cb7c65c..36ef88c 100644 --- a/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java +++ b/src/main/java/dev/isxander/controlify/screenop/ScreenProcessor.java @@ -13,6 +13,7 @@ import dev.isxander.controlify.virtualmouse.VirtualMouseBehaviour; import dev.isxander.controlify.virtualmouse.VirtualMouseHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ComponentPath; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.components.tabs.Tab; @@ -51,9 +52,9 @@ public class ScreenProcessor { handleTabNavigation(controller); } - public void render(Controller controller, PoseStack poseStack, float tickDelta) { + public void render(Controller controller, GuiGraphics graphics, float tickDelta) { var vmouse = Controlify.instance().virtualMouseHandler(); - this.render(controller, poseStack, tickDelta, vmouse.isVirtualMouseEnabled() ? Optional.of(vmouse) : Optional.empty()); + this.render(controller, graphics, tickDelta, vmouse.isVirtualMouseEnabled() ? Optional.of(vmouse) : Optional.empty()); } public void onInputModeChanged(InputMode mode) { @@ -190,7 +191,7 @@ public class ScreenProcessor { } } - protected void render(Controller controller, PoseStack poseStack, float tickDelta, Optional vmouse) { + protected void render(Controller controller, GuiGraphics graphics, float tickDelta, Optional vmouse) { } diff --git a/src/main/java/dev/isxander/controlify/utils/ToastUtils.java b/src/main/java/dev/isxander/controlify/utils/ToastUtils.java index 46a76fa..b7609fb 100644 --- a/src/main/java/dev/isxander/controlify/utils/ToastUtils.java +++ b/src/main/java/dev/isxander/controlify/utils/ToastUtils.java @@ -1,8 +1,8 @@ package dev.isxander.controlify.utils; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.toasts.SystemToast; import net.minecraft.client.gui.components.toasts.ToastComponent; import net.minecraft.network.chat.Component; @@ -26,11 +26,11 @@ public class ToastUtils { } @Override - public @NotNull Visibility render(@NotNull PoseStack matrices, @NotNull ToastComponent manager, long startTime) { + public @NotNull Visibility render(@NotNull GuiGraphics graphics, @NotNull ToastComponent manager, long startTime) { if (removed) return Visibility.HIDE; - return super.render(matrices, manager, startTime); + return super.render(graphics, manager, startTime); } public void remove() { diff --git a/src/main/java/dev/isxander/controlify/virtualmouse/VirtualMouseHandler.java b/src/main/java/dev/isxander/controlify/virtualmouse/VirtualMouseHandler.java index d7a1c4c..08b4342 100644 --- a/src/main/java/dev/isxander/controlify/virtualmouse/VirtualMouseHandler.java +++ b/src/main/java/dev/isxander/controlify/virtualmouse/VirtualMouseHandler.java @@ -16,7 +16,7 @@ import dev.isxander.controlify.mixins.feature.virtualmouse.KeyboardHandlerAccess import dev.isxander.controlify.mixins.feature.virtualmouse.MouseHandlerAccessor; import dev.isxander.controlify.utils.ToastUtils; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -202,32 +202,28 @@ public class VirtualMouseHandler { } } - public void renderVirtualMouse(PoseStack matrices) { + public void renderVirtualMouse(GuiGraphics graphics) { if (!virtualMouseEnabled) return; if (DebugProperties.DEBUG_SNAPPING) { for (var snapPoint : snapPoints) { - GuiComponent.fill(matrices, snapPoint.position().x() - snapPoint.range(), snapPoint.position().y() - snapPoint.range(), snapPoint.position().x() + snapPoint.range(), snapPoint.position().y() + snapPoint.range(), 0x33FFFFFF); - GuiComponent.fill(matrices, snapPoint.position().x() - 1, snapPoint.position().y() - 1, snapPoint.position().x() + 1, snapPoint.position().y() + 1, snapPoint.equals(lastSnappedPoint) ? 0xFFFFFF00 : 0xFFFF0000); + graphics.fill(snapPoint.position().x() - snapPoint.range(), snapPoint.position().y() - snapPoint.range(), snapPoint.position().x() + snapPoint.range(), snapPoint.position().y() + snapPoint.range(), 0x33FFFFFF); + graphics.fill( snapPoint.position().x() - 1, snapPoint.position().y() - 1, snapPoint.position().x() + 1, snapPoint.position().y() + 1, snapPoint.equals(lastSnappedPoint) ? 0xFFFFFF00 : 0xFFFF0000); } } - RenderSystem.setShaderTexture(0, CURSOR_TEXTURE); - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); - RenderSystem.enableBlend(); - var scaledX = currentX * (double)this.minecraft.getWindow().getGuiScaledWidth() / (double)this.minecraft.getWindow().getScreenWidth(); var scaledY = currentY * (double)this.minecraft.getWindow().getGuiScaledHeight() / (double)this.minecraft.getWindow().getScreenHeight(); - matrices.pushPose(); - matrices.translate(scaledX, scaledY, 1000f); - matrices.scale(0.5f, 0.5f, 0.5f); - - GuiComponent.blit(matrices, -16, -16, 0, 0, 32, 32, 32, 32); - - matrices.popPose(); + graphics.pose().pushPose(); + graphics.pose().translate(scaledX, scaledY, 1000f); + graphics.pose().scale(0.5f, 0.5f, 0.5f); + RenderSystem.enableBlend(); + graphics.blit(CURSOR_TEXTURE, -16, -16, 0, 0, 32, 32, 32, 32); RenderSystem.disableBlend(); + + graphics.pose().popPose(); } public void enableVirtualMouse() { diff --git a/src/main/resources/controlify.mixins.json b/src/main/resources/controlify.mixins.json index 20836c1..a3c7130 100644 --- a/src/main/resources/controlify.mixins.json +++ b/src/main/resources/controlify.mixins.json @@ -7,7 +7,7 @@ }, "compatibilityLevel": "JAVA_17", "mixins": [ - "compat.iris.BaseOptionElementWidgetMixin", +// "compat.iris.BaseOptionElementWidgetMixin", "compat.sodium.CycleControlElementMixin", "compat.sodium.SliderControlElementMixin", "compat.sodium.TickBoxControlElementMixin", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index a62a891..3d81d5d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -32,9 +32,9 @@ "accessWidener": "controlify.accesswidener", "depends": { "fabricloader": ">=0.14.0", - "minecraft": "~1.19.4", + "minecraft": ">1.20-", "java": ">=17", - "yet-another-config-lib": "^2.4.0" + "yet_another_config_lib": "^2.4.0" }, "breaks": { "midnightcontrols": "*"