From f54c0e83eda5becc260deb5299dc4cf132475dde Mon Sep 17 00:00:00 2001
From: Alexdoru <57050655+Alexdoru@users.noreply.github.com>
Date: Mon, 14 Oct 2024 00:03:52 +0200
Subject: [PATCH] fix button in open link gui not being centered

---
 .../hodgepodge/config/FixesConfig.java        |  5 ++
 .../mitchej123/hodgepodge/mixins/Mixins.java  |  5 ++
 .../minecraft/MixinGuiConfirmOpenLink.java    | 46 +++++++++++++++++++
 3 files changed, 56 insertions(+)
 create mode 100644 src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinGuiConfirmOpenLink.java

diff --git a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java
index ba5ad7ac..82a15733 100644
--- a/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java
+++ b/src/main/java/com/mitchej123/hodgepodge/config/FixesConfig.java
@@ -358,6 +358,11 @@ public class FixesConfig {
                             // settings
     public static int limitRecursiveBlockUpdateDepth;
 
+    @Config.Comment("Fix the buttons not being centered in the GuiConfirmOpenLink")
+    @Config.DefaultBoolean(true)
+    @Config.RequiresMcRestart
+    public static boolean fixButtonsGuiConfirmOpenLink;
+
     @Config.Comment("Fix an array out of bounds caused by the GameSettings getKeyDisplayString method")
     @Config.DefaultBoolean(true)
     @Config.RequiresMcRestart
diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
index 336a79a2..ce0ee0e2 100644
--- a/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
+++ b/src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
@@ -431,6 +431,11 @@ public enum Mixins {
                     .addMixinClasses("minecraft.MixinWorldServer_LimitUpdateRecursion")
                     .setApplyIf(() -> FixesConfig.limitRecursiveBlockUpdateDepth >= 0)),
 
+    FIX_BUTTON_POS_GUIOPENLINK(new Builder("Fix the buttons not being centered in the GuiConfirmOpenLink")
+            .setPhase(Phase.EARLY).setSide(Side.CLIENT).addTargetedMod(TargetedMod.VANILLA)
+            .addMixinClasses("minecraft.MixinGuiConfirmOpenLink")
+            .setApplyIf(() -> FixesConfig.fixButtonsGuiConfirmOpenLink)),
+
     // Ic2 adjustments
     IC2_UNPROTECTED_GET_BLOCK_FIX(new Builder("IC2 Kinetic Fix").setPhase(Phase.EARLY).setSide(Side.BOTH)
             .addMixinClasses("ic2.MixinIc2WaterKinetic").setApplyIf(() -> FixesConfig.fixIc2UnprotectedGetBlock)
diff --git a/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinGuiConfirmOpenLink.java b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinGuiConfirmOpenLink.java
new file mode 100644
index 00000000..f53717f8
--- /dev/null
+++ b/src/main/java/com/mitchej123/hodgepodge/mixins/early/minecraft/MixinGuiConfirmOpenLink.java
@@ -0,0 +1,46 @@
+package com.mitchej123.hodgepodge.mixins.early.minecraft;
+
+import net.minecraft.client.gui.GuiConfirmOpenLink;
+import net.minecraft.client.gui.GuiScreen;
+
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.ModifyArg;
+
+@Mixin(GuiConfirmOpenLink.class)
+public class MixinGuiConfirmOpenLink extends GuiScreen {
+
+    @ModifyArg(
+            method = "initGui",
+            at = @At(
+                    value = "INVOKE",
+                    target = "Lnet/minecraft/client/gui/GuiButton;<init>(IIIIILjava/lang/String;)V",
+                    ordinal = 0),
+            index = 1)
+    private int hodgepodge$fixButton0(int xPos) {
+        return this.width / 2 - 50 - 105;
+    }
+
+    @ModifyArg(
+            method = "initGui",
+            at = @At(
+                    value = "INVOKE",
+                    target = "Lnet/minecraft/client/gui/GuiButton;<init>(IIIIILjava/lang/String;)V",
+                    ordinal = 1),
+            index = 1)
+    private int hodgepodge$fixButton1(int xPos) {
+        return this.width / 2 - 50;
+    }
+
+    @ModifyArg(
+            method = "initGui",
+            at = @At(
+                    value = "INVOKE",
+                    target = "Lnet/minecraft/client/gui/GuiButton;<init>(IIIIILjava/lang/String;)V",
+                    ordinal = 2),
+            index = 1)
+    private int hodgepodge$fixButton2(int xPos) {
+        return this.width / 2 - 50 + 105;
+    }
+
+}