package com.alttd.chat.handler; import com.alttd.chat.ChatPlugin; import com.alttd.chat.config.Config; import com.alttd.chat.managers.ChatUserManager; import com.alttd.chat.managers.RegexManager; import com.alttd.chat.objects.ChatUser; import com.alttd.chat.objects.channels.CustomChannel; import com.alttd.chat.util.GalaxyUtility; import com.alttd.chat.util.Utility; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.placeholder.Replacement; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import java.util.*; import java.util.concurrent.TimeUnit; public class ChatHandler { private final ChatPlugin plugin; private final Component GCNOTENABLED; public ChatHandler() { plugin = ChatPlugin.getInstance(); GCNOTENABLED = Utility.parseMiniMessage(Config.GCNOTENABLED); } public void privateMessage(Player player, String target, String message) { // ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); // user.setReplyTarget(target); String updatedMessage = RegexManager.replaceText(player.getName(), player.getUniqueId(), message); // todo a better way for this if(updatedMessage == null) { GalaxyUtility.sendBlockedNotification("DM Language", player, message, target); return; // the message was blocked } if(!player.hasPermission("chat.format")) { updatedMessage = Utility.stripTokens(updatedMessage); } else { updatedMessage = Utility.parseColors(updatedMessage); } if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); updatedMessage = Utility.formatText(updatedMessage); Map> placeholders = new HashMap<>(); placeholders.put("message", Replacement.miniMessage(updatedMessage)); placeholders.put("sendername", Replacement.miniMessage(player.getName())); placeholders.put("receivername", Replacement.miniMessage(target)); placeholders.put("[i]", Replacement.component(itemComponent(player.getInventory().getItemInMainHand()))); Component component = Utility.parseMiniMessage("", placeholders); sendPrivateMessage(player, target, "privatemessage", component); Component spymessage = Utility.parseMiniMessage(Config.MESSAGESPY, placeholders); for(Player pl : Bukkit.getOnlinePlayers()) { if(pl.hasPermission(Config.SPYPERMISSION) && ChatUserManager.getChatUser(pl.getUniqueId()).isSpy() && !pl.equals(player) && !pl.getName().equalsIgnoreCase(target)) { pl.sendMessage(spymessage); } } } public void globalChat(Player player, String message) { ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); if(!Utility.hasPermission(player.getUniqueId(), Config.GCPERMISSION)) { player.sendMessage(GCNOTENABLED);// GC IS OFF INFORM THEM ABOUT THIS and cancel return; } if (isMuted(player, message, "[GC Muted] ")) { return; } long timeLeft = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - user.getGcCooldown()); if(timeLeft <= Config.GCCOOLDOWN && !player.hasPermission("chat.globalchat.cooldownbypass")) { // player is on cooldown and should wait x seconds Map> placeholders = new HashMap<>(); placeholders.put("cooldown", Replacement.miniMessage(Config.GCCOOLDOWN-timeLeft+"")); player.sendMessage(Utility.parseMiniMessage(Config.GCONCOOLDOWN, placeholders)); return; } Component senderName = user.getDisplayName(); Component prefix = user.getPrefix(); String updatedMessage = RegexManager.replaceText(player.getName(), player.getUniqueId(), message); // todo a better way for this if(updatedMessage == null) { GalaxyUtility.sendBlockedNotification("GC Language", player, message, ""); return; // the message was blocked } if(!player.hasPermission("chat.format")) { updatedMessage = Utility.stripTokens(updatedMessage); } else { updatedMessage = Utility.parseColors(updatedMessage); } if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); updatedMessage = Utility.formatText(updatedMessage); Map> placeholders = new HashMap<>(); placeholders.put("sender", Replacement.component(senderName)); placeholders.put("prefix", Replacement.component(prefix)); placeholders.put("message", Replacement.miniMessage(updatedMessage)); placeholders.put("server", Replacement.miniMessage(Bukkit.getServerName())); placeholders.put("[i]", Replacement.component(itemComponent(player.getInventory().getItemInMainHand()))); Component component = Utility.parseMiniMessage(Config.GCFORMAT, placeholders); user.setGcCooldown(System.currentTimeMillis()); sendPluginMessage(player, "globalchat", component); } public void chatChannel(Player player, CustomChannel channel, String message) { if (!player.hasPermission(channel.getPermission())) { player.sendMessage(Utility.parseMiniMessage("You don't have permission to use this channel.")); return; } if (isMuted(player, message, "[" + channel.getChannelName() + " Muted] ")) return; ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); Component senderName = user.getDisplayName(); String updatedMessage = RegexManager.replaceText(player.getName(), player.getUniqueId(), message); if(updatedMessage == null) { GalaxyUtility.sendBlockedNotification(channel.getChannelName() + " Language", player, message, ""); return; // the message was blocked } if(!player.hasPermission("chat.format")) { updatedMessage = Utility.stripTokens(updatedMessage); } if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); updatedMessage = Utility.formatText(updatedMessage); Map> placeholders = new HashMap<>(); placeholders.put("sender", Replacement.component(senderName)); placeholders.put("message", Replacement.miniMessage(updatedMessage)); placeholders.put("server", Replacement.miniMessage(Bukkit.getServerName())); placeholders.put("channel", Replacement.miniMessage(channel.getChannelName())); placeholders.put("[i]", Replacement.component(itemComponent(player.getInventory().getItemInMainHand()))); Component component = Utility.parseMiniMessage(channel.getFormat(), placeholders); if (channel.isProxy()) { sendChatChannelMessage(player, channel.getChannelName(), "chatchannel", component); } else { sendChatChannelMessage(channel, player.getUniqueId(), component); } } public void partyMessage(Player player, String message) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("party"); out.writeUTF(player.getUniqueId().toString()); out.writeUTF(message); out.writeUTF(GsonComponentSerializer.gson().serialize( itemComponent(player.getInventory().getItemInMainHand()) )); player.sendPluginMessage(plugin, Config.MESSAGECHANNEL, out.toByteArray()); // if (isMuted(player, message, "[" + party.getPartyName() + " Muted] ")) return; // // ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); // Component senderName = user.getDisplayName(); // // String updatedMessage = RegexManager.replaceText(player.getName(), player.getUniqueId(), message); // if(updatedMessage == null) { // GalaxyUtility.sendBlockedNotification("Party Language", player, message, ""); // return; // the message was blocked // } // // if(!player.hasPermission("chat.format")) { // updatedMessage = Utility.stripTokens(updatedMessage); // } // // if(updatedMessage.contains("[i]")) updatedMessage = updatedMessage.replace("[i]", "<[i]>"); // // updatedMessage = Utility.formatText(updatedMessage); // // List