package club.eviltransgenders.autoreconnect; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.ConnectScreen; import net.minecraft.client.gui.screens.DisconnectedScreen; import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.network.chat.Component; public final class AutoReconnect implements ClientModInitializer { private static AutoReconnect instance; private long reconnectTimer; public ServerData lastServerData; @Override public void onInitializeClient() { instance = this; ScreenEvents.AFTER_INIT.register(this::afterScreenInit); } public void afterScreenInit(Minecraft client, Screen screen, int scaledWidth, int scaledHeight) { if (screen instanceof DisconnectedScreen) { this.reconnectTimer = 5 * 20; ScreenEvents.afterTick(screen).register(this::afterScreenTick); } } public void afterScreenTick(Screen screen) { if (--this.reconnectTimer <= 0) { ConnectScreen.startConnecting(new JoinMultiplayerScreen(new TitleScreen()), Minecraft.getInstance(), ServerAddress.parseString(this.lastServerData.ip), this.lastServerData, false, null); } else { ((Button) screen.children().getLast()).setMessage(Component.translatable("gui.autoreconnect.reconnect", this.reconnectTimer / 20)); } } public static AutoReconnect getInstance() { return instance; } }