package dev.encode42.myserver.mixin; import dev.encode42.myserver.gui.CommonButtons; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.ConnectScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen; import net.minecraft.client.multiplayer.ServerData; import net.minecraft.client.multiplayer.resolver.ServerAddress; import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(TitleScreen.class) public class JoinButton extends Screen { protected JoinButton(Minecraft minecraft, Font font, Component title) { super(minecraft, font, title); } @Inject( method = "createNormalMenuOptions", at = @At( value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/TitleScreen;addRenderableWidget(Lnet/minecraft/client/gui/components/events/GuiEventListener;)Lnet/minecraft/client/gui/components/events/GuiEventListener;", ordinal = 1 ) ) private void injectJoinButton(int topPos, int spacing, CallbackInfoReturnable cir) { ServerData data = new ServerData("daxecraft", "daxecraft.modrinth.gg", ServerData.Type.OTHER); Button joinServerButton = CommonButtons.joinServer(200 - 24, (button) -> { Screen joinMultiplayerScreen = new JoinMultiplayerScreen(this); ConnectScreen.startConnecting(joinMultiplayerScreen, this.minecraft, ServerAddress.parseString(data.ip), data, false, null); }); joinServerButton.setPosition(this.width / 2 - 100, topPos); this.addRenderableWidget(joinServerButton); } }