package dev.conorthedev.mediamod.util; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.gameevent.TickEvent; import java.util.concurrent.ConcurrentLinkedQueue; public class PlayerMessager { public static final PlayerMessager INSTANCE = new PlayerMessager(); private static final ConcurrentLinkedQueue<String> queuedMessages = new ConcurrentLinkedQueue<>(); private static final ConcurrentLinkedQueue<IChatComponent> messages = new ConcurrentLinkedQueue<>(); private PlayerMessager() { TickScheduler.INSTANCE.schedule(0, this::check); } public static void sendMessage(IChatComponent message) { if(Minecraft.getMinecraft().thePlayer == null) return; if (message == null) message = new ChatComponentText(""); messages.add(message); } public static void sendMessage(IChatComponent message, boolean header) { if(Minecraft.getMinecraft().thePlayer == null) return; if (message == null) message = new ChatComponentText(""); if (header) { messages.add(new ChatComponentText(ChatColor.translateAlternateColorCodes('&', "&c[&fMediaMod&c]&r ")).appendSibling(message)); } else { messages.add(message); } } public static void sendMessage(String message) { if (message == null || Minecraft.getMinecraft().thePlayer == null) return; sendMessage(ChatColor.translateAlternateColorCodes('&', message), true); } public static void sendMessage(String message, boolean header) { if (message == null || Minecraft.getMinecraft().thePlayer == null) return; if (header) { Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText(ChatColor.translateAlternateColorCodes('&', "&c[&fMediaMod&c]&r " + message))); } else { Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText(ChatColor.translateAlternateColorCodes('&', message))); } } public void queue(String chat) { queuedMessages.add(chat); } private void check() { if (!queuedMessages.isEmpty()) { EntityPlayerSP player = Minecraft.getMinecraft().thePlayer; if (player != null && queuedMessages.peek() != null) { String poll = queuedMessages.poll(); sendMessage(poll); } } } @SubscribeEvent public void tick(TickEvent.ClientTickEvent event) { if (Minecraft.getMinecraft().thePlayer == null) { return; } while (!messages.isEmpty()) { Minecraft.getMinecraft().thePlayer.addChatComponentMessage(messages.poll()); } while (!queuedMessages.isEmpty()) { sendMessage(queuedMessages.poll()); } } }