Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.gmail.plasmavn.eaa;
- import java.text.Normalizer;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Set;
- import java.util.regex.Pattern;
- import org.bukkit.ChatColor;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.AsyncPlayerChatEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- public class EasyAntiChat extends JavaPlugin implements Listener {
- private String antiads, antiswear, prefix, reload;
- private boolean swear, ads, fcads, fcswear;
- private final Set<Pattern> ps = new HashSet<Pattern>();
- private final Set<String> ss = new HashSet<String>();
- public void onEnable() {
- saveDefaultConfig();
- reload();
- getCommand("easyantichat").setExecutor(this);
- this.getServer().getPluginManager().registerEvents(this, this);
- }
- public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
- if (label.equalsIgnoreCase("easyantichat") && s.hasPermission("EasyAntiChat.Reload")) {
- reload();
- s.sendMessage(prefix + reload);
- }
- return true;
- }
- private void reload() {
- reloadConfig();
- final FileConfiguration d = getConfig();
- swear = d.getBoolean("anti-swear.enable", false);
- fcswear = d.getBoolean("anti-swear.full-check", false);
- ads = d.getBoolean("anti-ads.enable", false);
- fcads = d.getBoolean("anti-ads.full-check", false);
- antiads = ChatColor.translateAlternateColorCodes('&', d.getString("message.anti-ads"));
- antiswear = ChatColor.translateAlternateColorCodes('&', d.getString("message.anti-swear"));
- prefix = ChatColor.translateAlternateColorCodes('&', d.getString("message.prefix"));
- reload = ChatColor.translateAlternateColorCodes('&', d.getString("message.reload"));
- if (ads) loadAds(d);
- if (swear) loadSwear(d);
- }
- private void loadSwear(FileConfiguration d) {
- if (!d.isList("anti-swear.words")) return;
- ss.clear();
- for (String s : d.getStringList("anti-swear.words")) {
- if (fcswear) ss.add(unAccent(s).toLowerCase());
- else ss.add(s.toLowerCase());
- }
- }
- private void loadAds(FileConfiguration d) {
- ps.clear();
- final Set<String> iplist = d.isList("anti-ads.ip-list") ? new HashSet<String>(d.getStringList("anti-ads.ip-list")) : new HashSet<String>();
- if (iplist.isEmpty()) return;
- final Map<Integer, Map<Integer, List<String>>> matches = new HashMap<Integer, Map<Integer, List<String>>>();
- final List<String> ips = new ArrayList<String>();
- for (String ip : iplist) {
- String[] split = ip.toLowerCase().split("[.]");
- if (split.length > 1) {
- Map<Integer, List<String>> map = matches.containsKey(split.length) ? matches.get(split.length) : new HashMap<Integer, List<String>>();
- for (int i = 0; i < split.length; i ++) {
- if (split[i] == null) return;
- List<String> m = map.containsKey(i) ? map.get(i) : new ArrayList<String>();
- m.add(split[i]);
- map.put(i, m);
- }
- matches.put(split.length, map);
- }
- else ips.add(split[0]);
- }
- if (!ips.isEmpty()) {
- Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
- m.put(0, ips);
- matches.put(1, m);
- }
- for (int i = 0; i < matches.keySet().size(); i++) {
- String matchesip = "";
- Map<Integer, List<String>> map = matches.get(i + 1);
- for (int j = 0; j < map.keySet().size(); j++) {
- String m = "";
- List<String> ms = map.get(j);
- if (ms != null) for (int t = 0; t < ms.size(); t++) {
- if (t == 0) m = ms.get(t);
- else m = m + "|" + ms.get(t);
- }
- if (m != "") matchesip = matchesip + "(" + m + ")";
- }
- if (matchesip != "") ps.add(Pattern.compile(matchesip.replace(")(", ")([.,;:'\"-_=+ ]|)+(")));
- }
- }
- private boolean isAds(String message) {
- if (fcads) message = unAccent(message);
- for (Pattern p : ps) if (p.matcher(message).find()) return true;
- return false;
- }
- private boolean isSwear(String message) {
- if (fcswear) message = unAccent(message);
- for (String s : ss) if (message.contains(s)) return true;
- return false;
- }
- private String unAccent(String s) {
- return Pattern.compile("\\p{InCombiningDiacriticalMarks}+").
- matcher(Normalizer.normalize(s, Normalizer.Form.NFD)).
- replaceAll("").replaceAll("Đ", "D").replaceAll("đ", "d");
- }
- @EventHandler
- public void onChat(AsyncPlayerChatEvent e) {
- if (e.getPlayer().isOp()) return;
- if (ads && isAds(e.getMessage().toLowerCase())) {
- e.setCancelled(true);
- e.getPlayer().sendMessage(prefix + antiads);
- return;
- }
- if (swear && isSwear(e.getMessage().toLowerCase())) {
- e.setCancelled(true);
- e.getPlayer().sendMessage(prefix + antiswear);
- return;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment