package dev.encode42.myserver.mixin; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.SpriteIconButton; import net.minecraft.client.gui.components.events.GuiEventListener; import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @Mixin(TitleScreen.class) public class SpriteMultiplayerButton { @ModifyArg( 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 ), index = 0 ) private GuiEventListener rebuildMultiplayerButton(GuiEventListener guiEventListener) { if (guiEventListener instanceof Button button) { Button.OnPress onPress = ((ButtonAccessor) button).myserver$getOnPress(); SpriteIconButton spriteIconButton = SpriteIconButton.builder(button.getMessage(), onPress, true) .sprite(Identifier.withDefaultNamespace("icon/search"), 15, 15) .width(button.getHeight()) .build(); spriteIconButton.setPosition(button.getX() + 180, button.getY()); spriteIconButton.active = button.isActive(); return spriteIconButton; } return guiEventListener; } }