package xyz.etztech.deluxegroups.listeners; import org.apache.commons.lang.StringUtils; import org.bukkit.ChatColor; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.dynmap.DynmapAPI; import org.dynmap.DynmapCommonAPI; import xyz.etztech.core.api.IMinecraftManager; import xyz.etztech.deluxegroups.DeluxeGroup; import xyz.etztech.deluxegroups.DeluxeGroups; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class AsyncPlayerChatListener implements Listener { private DeluxeGroups plugin; private List groupPrefixes; public AsyncPlayerChatListener(DeluxeGroups deluxeGroups) { this.plugin = deluxeGroups; reload(); } public void reload() { this.groupPrefixes = new ArrayList<>(); this.groupPrefixes.addAll(trimmed(this.plugin.getConfig().getStringList("prefix"))); } @EventHandler(priority=EventPriority.HIGH) public void onChat(AsyncPlayerChatEvent event) { Player sender = event.getPlayer(); String chat = event.getMessage(); if (!sender.hasPermission("deluxegroups.group.chat")) { return; } DynmapAPI dynmap = DeluxeGroups.getDynmap(); IMinecraftManager minecraftManager = DeluxeGroups.getMinecraftManager(); if (DeluxeGroups.getDatabase().inGroup(sender.getUniqueId().toString())) { boolean groupChat = false; for (String prefix : this.groupPrefixes) { // If chat starts with 1 prefix, it is group chat. if (chat.startsWith(prefix)) { groupChat = true; chat = chat.substring(1); // If chat still starts with the prefix, it means there were two and we are delegating to normal chat if (chat.startsWith(prefix)) { event.setMessage(chat); // Normal chat normalChat(event, sender, chat, dynmap, minecraftManager); return; } break; } } if (groupChat) { DeluxeGroup group = DeluxeGroups.getDatabase().getPlayerGroup(sender.getUniqueId().toString()); group.log(sender.getPlayer().getName(), chat); String format = plugin.getConfig().getString("format.custom"); if (StringUtils.isNotBlank(format)) { chat = format.replace("", group.getName()).replace("", chat); } String color = plugin.getConfig().getString("format.color"); if (StringUtils.isNotBlank(color)) { chat = ChatColor.getByChar(color.replace("&", "")) + chat; } List uuids = group.getUUIDList(); Iterator recipients = event.getRecipients().iterator(); while (recipients.hasNext()) { Player player = (Player) recipients.next(); if (!uuids.contains(player.getUniqueId().toString())) { recipients.remove(); } } event.setMessage(chat); return; } } // Normal chat normalChat(event, sender, chat, dynmap, minecraftManager); } private void normalChat(AsyncPlayerChatEvent event, Player sender, String chat, DynmapAPI dynmap, IMinecraftManager minecraftManager) { if (!event.isCancelled()) { if (dynmap != null) { dynmap.postPlayerMessageToWeb(sender.getName(), sender.getName(), chat); } if (minecraftManager != null) { minecraftManager.globalLog(sender, chat); } } } private List trimmed(List list) { for (int i = 0; i < list.size(); i++) { list.set(i, list.get(i).trim()); } return list; } }