From 5236e676cb37b4fb9ef6556f96dde38ee4922a69 Mon Sep 17 00:00:00 2001 From: Rosa Date: Tue, 19 May 2026 17:48:44 -0400 Subject: linear backoff & the button actually works --- .../club/eviltransgenders/autoreconnect/AutoReconnect.java | 9 ++++++++- .../autoreconnect/mixin/DisconnectedScreenMixin.java | 14 +++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java b/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java index d756c23..f04fff9 100644 --- a/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java +++ b/src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java @@ -16,6 +16,7 @@ import net.minecraft.network.chat.Component; public final class AutoReconnect implements ClientModInitializer { private static AutoReconnect instance; private long reconnectTimer; + private int reconnectAttempts = 0; public ServerData lastServerData; @Override @@ -26,8 +27,10 @@ public final class AutoReconnect implements ClientModInitializer { public void afterScreenInit(Minecraft client, Screen screen, int scaledWidth, int scaledHeight) { if (screen instanceof DisconnectedScreen) { - this.reconnectTimer = 5 * 20; + this.reconnectTimer = 5 * 20 * (long)++reconnectAttempts; ScreenEvents.afterTick(screen).register(this::afterScreenTick); + } else if (screen instanceof JoinMultiplayerScreen) { + this.reconnectAttempts = 0; } } @@ -39,6 +42,10 @@ public final class AutoReconnect implements ClientModInitializer { } } + public void resetAttempts() { + this.reconnectAttempts = 0; + } + public static AutoReconnect getInstance() { return instance; } diff --git a/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java b/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java index 99a59f9..975fd36 100644 --- a/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java @@ -1,12 +1,20 @@ package club.eviltransgenders.autoreconnect.mixin; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.layouts.LinearLayout; +import net.minecraft.client.gui.screens.ConnectScreen; import net.minecraft.client.gui.screens.DisconnectedScreen; +import net.minecraft.client.gui.screens.TitleScreen; +import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; +import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import club.eviltransgenders.autoreconnect.AutoReconnect; + import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,7 +27,11 @@ public abstract class DisconnectedScreenMixin { @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/layouts/LinearLayout;visitWidgets(Ljava/util/function/Consumer;)V"), method = "init") private void addAutoReconnectButtons(CallbackInfo ci) { - Button reconnectButton = Button.builder(Component.translatable("gui.autoreconnect.reconnect"), btn -> {}).width(200).build(); + Button reconnectButton = Button.builder(Component.translatable("gui.autoreconnect.reconnect"), btn -> { + AutoReconnect ar = AutoReconnect.getInstance(); + ar.resetAttempts(); + ConnectScreen.startConnecting(new JoinMultiplayerScreen(new TitleScreen()), Minecraft.getInstance(), ServerAddress.parseString(ar.lastServerData.ip), ar.lastServerData, false, null); + }).width(200).build(); this.layout.addChild(reconnectButton); this.layout.arrangeElements(); } -- cgit v1.3.1