From fa01eb8c6d354e1fab1d42f08579942cf1101f2c Mon Sep 17 00:00:00 2001 From: johnhaab Date: Sun, 31 Aug 2025 02:13:58 -0400 Subject: [PATCH 1/2] Add force reset button on reconfiguring screen --- .../mixin/ReconfiguringMixin.java | 50 +++++++++++++++++++ src/main/resources/fabric.mod.json | 3 +- src/main/resources/fishonmcextras.mixins.json | 3 +- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java diff --git a/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java b/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java new file mode 100644 index 00000000..84d76ea0 --- /dev/null +++ b/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java @@ -0,0 +1,50 @@ +package io.github.markassk.fishonmcextras.mixin; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ReconfiguringScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.network.ServerInfo; +import net.minecraft.text.Text; +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; + +@Mixin(ReconfiguringScreen.class) +public abstract class ReconfiguringMixin extends Screen { + + @Unique private boolean buttonAdded = false; + + protected ReconfiguringMixin(Text title) { + super(title); + } + + @Inject(method = "init", at = @At("TAIL")) + private void addForceReconnectButton(CallbackInfo ci) { + if (buttonAdded) return; + + MinecraftClient client = MinecraftClient.getInstance(); + ServerInfo last = client.getCurrentServerEntry(); + if (last == null) return; + + ButtonWidget reconnectButton = ButtonWidget.builder(Text.of("Force Reconnect"), btn -> { + // Kill current stuck connection + if (client.getNetworkHandler() != null) { + client.getNetworkHandler().getConnection().disconnect(Text.of("Force reconnect")); + } + + // Reconnect instantly + net.minecraft.client.network.ServerAddress addr = + net.minecraft.client.network.ServerAddress.parse(last.address); + + net.minecraft.client.gui.screen.multiplayer.ConnectScreen.connect( + this, client, addr, last, false, null + ); + }).dimensions(this.width / 2 - 100, this.height - 40, 200, 20).build(); + + this.addDrawableChild(reconnectButton); + buttonAdded = true; + } +} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 177c1aa3..7271c296 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -11,7 +11,8 @@ "contributors": [ "ItsMeDjeff", "Madisonn", - "Demi21" + "Demi21", + "keziumo" ], "contact": { "discord": "dannypx", diff --git a/src/main/resources/fishonmcextras.mixins.json b/src/main/resources/fishonmcextras.mixins.json index d716acf6..3c29af85 100644 --- a/src/main/resources/fishonmcextras.mixins.json +++ b/src/main/resources/fishonmcextras.mixins.json @@ -21,6 +21,7 @@ "PlayerListHudAccessor", "PlayerListHudMixin", "RecipeBookScreenAccessor", - "TextFieldWidgetMixin" + "TextFieldWidgetMixin", + "ReconfiguringMixin" ] } \ No newline at end of file From bee0fe65083e38cbfe0258e5868c9cae5a2a6cfc Mon Sep 17 00:00:00 2001 From: johnhaab Date: Mon, 1 Sep 2025 01:31:33 -0400 Subject: [PATCH 2/2] Revisions --- .../markassk/fishonmcextras/mixin/ReconfiguringMixin.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java b/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java index 84d76ea0..732e49be 100644 --- a/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java +++ b/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java @@ -3,7 +3,9 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ReconfiguringScreen; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.multiplayer.ConnectScreen; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.network.ServerAddress; import net.minecraft.client.network.ServerInfo; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; @@ -36,10 +38,10 @@ private void addForceReconnectButton(CallbackInfo ci) { } // Reconnect instantly - net.minecraft.client.network.ServerAddress addr = - net.minecraft.client.network.ServerAddress.parse(last.address); + ServerAddress addr = + ServerAddress.parse(last.address); - net.minecraft.client.gui.screen.multiplayer.ConnectScreen.connect( + ConnectScreen.connect( this, client, addr, last, false, null ); }).dimensions(this.width / 2 - 100, this.height - 40, 200, 20).build();