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..732e49be --- /dev/null +++ b/src/main/java/io/github/markassk/fishonmcextras/mixin/ReconfiguringMixin.java @@ -0,0 +1,52 @@ +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.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; +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 + ServerAddress addr = + ServerAddress.parse(last.address); + + 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