summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRosa <rosaontheweb@proton.me>2026-05-19 17:48:44 -0400
committerRosa <rosaontheweb@proton.me>2026-05-19 17:48:44 -0400
commit5236e676cb37b4fb9ef6556f96dde38ee4922a69 (patch)
tree72d842f54ec7495b9afb8002d2f4b573c16c0e33 /src
parentcdb7b6faffa3d708a936b36197996d0beb5be82c (diff)
linear backoff & the button actually works
Diffstat (limited to 'src')
-rw-r--r--src/main/java/club/eviltransgenders/autoreconnect/AutoReconnect.java9
-rw-r--r--src/main/java/club/eviltransgenders/autoreconnect/mixin/DisconnectedScreenMixin.java14
2 files changed, 21 insertions, 2 deletions
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();
}