2018-09-12 15:49:58 +00:00
|
|
|
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;
|
2018-09-29 04:14:20 +00:00
|
|
|
import org.dynmap.DynmapAPI;
|
2018-09-12 15:49:58 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2018-10-20 06:36:57 +00:00
|
|
|
DynmapAPI dynmap = DeluxeGroups.getDynmap();
|
2018-09-12 15:49:58 +00:00
|
|
|
IMinecraftManager minecraftManager = DeluxeGroups.getMinecraftManager();
|
|
|
|
|
|
|
|
|
2018-10-20 06:36:57 +00:00
|
|
|
if (DeluxeGroups.getDatabase().inGroup(sender.getUniqueId().toString())) {
|
2018-09-12 15:49:58 +00:00
|
|
|
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
|
2018-10-20 06:36:57 +00:00
|
|
|
normalChat(event, sender, chat, dynmap, minecraftManager);
|
2018-09-12 15:49:58 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (groupChat) {
|
2018-10-20 06:36:57 +00:00
|
|
|
DeluxeGroup group = DeluxeGroups.getDatabase().getPlayerGroup(sender.getUniqueId().toString());
|
2018-09-12 15:49:58 +00:00
|
|
|
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
|
2018-10-20 06:36:57 +00:00
|
|
|
normalChat(event, sender, chat, dynmap, minecraftManager);
|
|
|
|
}
|
|
|
|
|
|
|
|
private void normalChat(AsyncPlayerChatEvent event, Player sender, String chat, DynmapAPI dynmap, IMinecraftManager minecraftManager) {
|
2018-09-12 15:49:58 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|