DeluxeGroups/src/main/java/xyz/etztech/deluxegroups/listeners/AsyncPlayerChatListener.java

121 lines
4.1 KiB
Java

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<String> 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>", group.getName()).replace("<message>", chat);
}
String color = plugin.getConfig().getString("format.color");
if (StringUtils.isNotBlank(color)) {
chat = ChatColor.getByChar(color.replace("&", "")) + chat;
}
List<String> 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<String> trimmed(List<String> list) {
for (int i = 0; i < list.size(); i++) {
list.set(i, list.get(i).trim());
}
return list;
}
}