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; @Mixin(DisconnectedScreen.class) public abstract class DisconnectedScreenMixin { @Shadow @Final private LinearLayout layout; @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 -> { 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(); } }