package tv.mineinthebox.essentials.events.chat;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.LogType;
import tv.mineinthebox.essentials.interfaces.EventTemplate;
@SuppressWarnings("deprecation")
public class AntiSwearEvent extends EventTemplate implements Listener {
private final HashMap<String, Integer> warnings = new HashMap<String, Integer>();
public AntiSwearEvent(xEssentials pl) {
super(pl, "Anti Swear");
}
@EventHandler
public void onChat(PlayerChatEvent e) {
if(e.isCancelled()) {
return;
}
boolean warning = false;
Pattern pat = Pattern.compile("[A-Za-z]");
Pattern p = Pattern.compile(pl.getConfiguration().getChatConfig().getSwearWords(), Pattern.CASE_INSENSITIVE);
StringBuilder build = new StringBuilder(e.getMessage());
Matcher match = p.matcher(e.getMessage());
while(match.find()) {
if(pl.getConfiguration().getChatConfig().isSwearWarningEnabled()) {
if(match.group().length() > 0) {
if(!warning) { //if true it means we ignore it because a chat could have more swear words than just one we count 1 warning per message.
warning = true;
if(warnings.containsKey(e.getPlayer().getName())) {
int level = warnings.get(e.getPlayer().getName());
if((level+1) > pl.getConfiguration().getChatConfig().getMaxWarningLevel()) {
warnings.remove(e.getPlayer().getName());
if(pl.getConfiguration().getDebugConfig().isEnabled()) {
xEssentials.log("the console should now sent this command: " + pl.getConfiguration().getChatConfig().getWarningCommand().replaceAll("%p", e.getPlayer().getName()), LogType.DEBUG);
}
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), pl.getConfiguration().getChatConfig().getWarningCommand().replaceAll("%p", e.getPlayer().getName()));
e.setCancelled(true);
return; //no need to go futher within the message.
} else {
warnings.put(e.getPlayer().getName(), (level+1));
sendMessage(e.getPlayer(), pl.getConfiguration().getChatConfig().getWarningMessage().replaceAll("%w", (level+1)+"/"+pl.getConfiguration().getChatConfig().getMaxWarningLevel()));
}
} else {
warnings.put(e.getPlayer().getName(), 1);
sendMessage(e.getPlayer(), pl.getConfiguration().getChatConfig().getWarningMessage().replaceAll("%w", "1" + "/"+pl.getConfiguration().getChatConfig().getMaxWarningLevel()));
}
}
}
}
build.replace(match.start(), match.end(), pat.matcher(match.group()).replaceAll("*"));
}
e.setMessage(build.toString());
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
if(warnings.containsKey(e.getPlayer().getName())) {
warnings.remove(e.getPlayer().getName());
}
}
@EventHandler
public void onQuit(PlayerKickEvent e) {
if(warnings.containsKey(e.getPlayer().getName())) {
warnings.remove(e.getPlayer().getName());
}
}
}