package net.girlonthe.chattweaks.mixin; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.ChatComponent; import net.minecraft.client.multiplayer.chat.GuiMessage; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.HoverEvent; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; import net.minecraft.network.chat.contents.objects.PlayerSprite; import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.player.Player; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Mixin(ChatComponent.class) public abstract class ChatComponentMixin { @ModifyArg( method = "addMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/ChatComponent;addMessageToDisplayQueue(Lnet/minecraft/client/multiplayer/chat/GuiMessage;)V") ) private GuiMessage rosasChatTweaks$applyComponentModifications(GuiMessage original) { MutableComponent modifiedContent = Component.empty(); for (Component component : original.content().toFlatList()) { if ((component.getStyle().getHoverEvent() != null) && (component.getStyle().getHoverEvent().action() == HoverEvent.Action.SHOW_ENTITY)) { HoverEvent.ShowEntity hoverEvent = (HoverEvent.ShowEntity) component.getStyle().getHoverEvent(); if (hoverEvent.entity().type.equals(EntityTypes.PLAYER)) { Player maybePlayer = Minecraft.getInstance().level.getPlayerInAnyDimension(hoverEvent.entity().uuid); if (maybePlayer != null) { modifiedContent.append(Component.object(new PlayerSprite(maybePlayer.getProfile(), true))) .append(" "); } } } modifiedContent.append(component); } Component finalComponent = Component.empty() .append( Component.literal(DateTimeFormatter.ofPattern("HH:mm:ss ").format(LocalDateTime.now())) .setStyle(Style.EMPTY.withColor(ChatFormatting.GRAY)) ) .append(modifiedContent); return new GuiMessage(original.addedTime(), finalComponent, original.signature(), original.source(), original.tag()); } }