PlasmaVNGaming

EasyAntiChat.java

Jan 18th, 2017
614
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.83 KB | None | 0 0
  1. package com.gmail.plasmavn.eaa;
  2.  
  3. import java.text.Normalizer;
  4. import java.util.ArrayList;
  5. import java.util.HashMap;
  6. import java.util.HashSet;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Set;
  10. import java.util.regex.Pattern;
  11.  
  12. import org.bukkit.ChatColor;
  13. import org.bukkit.command.Command;
  14. import org.bukkit.command.CommandSender;
  15. import org.bukkit.configuration.file.FileConfiguration;
  16. import org.bukkit.event.EventHandler;
  17. import org.bukkit.event.Listener;
  18. import org.bukkit.event.player.AsyncPlayerChatEvent;
  19. import org.bukkit.plugin.java.JavaPlugin;
  20.  
  21. public class EasyAntiChat extends JavaPlugin implements Listener {
  22.    
  23.     private String antiads, antiswear, prefix, reload;
  24.     private boolean swear, ads, fcads, fcswear;
  25.     private final Set<Pattern> ps = new HashSet<Pattern>();
  26.     private final Set<String> ss = new HashSet<String>();
  27.    
  28.     public void onEnable() {
  29.         saveDefaultConfig();
  30.         reload();
  31.         getCommand("easyantichat").setExecutor(this);
  32.         this.getServer().getPluginManager().registerEvents(this, this);
  33.     }
  34.    
  35.     public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
  36.         if (label.equalsIgnoreCase("easyantichat") && s.hasPermission("EasyAntiChat.Reload")) {
  37.             reload();
  38.             s.sendMessage(prefix + reload);
  39.         }
  40.         return true;
  41.     }
  42.    
  43.     private void reload() {
  44.         reloadConfig();
  45.         final FileConfiguration d = getConfig();
  46.         swear = d.getBoolean("anti-swear.enable", false);
  47.         fcswear = d.getBoolean("anti-swear.full-check", false);
  48.         ads = d.getBoolean("anti-ads.enable", false);
  49.         fcads = d.getBoolean("anti-ads.full-check", false);
  50.         antiads = ChatColor.translateAlternateColorCodes('&', d.getString("message.anti-ads"));
  51.         antiswear = ChatColor.translateAlternateColorCodes('&', d.getString("message.anti-swear"));
  52.         prefix = ChatColor.translateAlternateColorCodes('&', d.getString("message.prefix"));
  53.         reload = ChatColor.translateAlternateColorCodes('&', d.getString("message.reload"));
  54.         if (ads) loadAds(d);
  55.         if (swear) loadSwear(d);
  56.     }
  57.    
  58.     private void loadSwear(FileConfiguration d) {
  59.         if (!d.isList("anti-swear.words")) return;
  60.         ss.clear();
  61.         for (String s : d.getStringList("anti-swear.words")) {
  62.             if (fcswear) ss.add(unAccent(s).toLowerCase());
  63.             else ss.add(s.toLowerCase());
  64.         }
  65.     }
  66.    
  67.     private void loadAds(FileConfiguration d) {
  68.         ps.clear();
  69.         final Set<String> iplist = d.isList("anti-ads.ip-list") ? new HashSet<String>(d.getStringList("anti-ads.ip-list")) : new HashSet<String>();
  70.         if (iplist.isEmpty()) return;
  71.         final Map<Integer, Map<Integer, List<String>>> matches = new HashMap<Integer, Map<Integer, List<String>>>();
  72.         final List<String> ips = new ArrayList<String>();
  73.         for (String ip : iplist) {
  74.             String[] split = ip.toLowerCase().split("[.]");
  75.             if (split.length > 1) {
  76.                 Map<Integer, List<String>> map = matches.containsKey(split.length) ? matches.get(split.length) : new HashMap<Integer, List<String>>();
  77.                 for (int i = 0; i < split.length; i ++) {
  78.                     if (split[i] == null) return;
  79.                     List<String> m = map.containsKey(i) ? map.get(i) : new ArrayList<String>();
  80.                     m.add(split[i]);
  81.                     map.put(i, m);
  82.                 }
  83.                 matches.put(split.length, map);
  84.             }
  85.             else ips.add(split[0]);
  86.         }
  87.         if (!ips.isEmpty()) {
  88.             Map<Integer, List<String>> m = new HashMap<Integer, List<String>>();
  89.             m.put(0, ips);
  90.             matches.put(1, m);
  91.         }
  92.         for (int i = 0; i < matches.keySet().size(); i++) {
  93.             String matchesip = "";
  94.             Map<Integer, List<String>> map = matches.get(i + 1);
  95.             for (int j = 0; j < map.keySet().size(); j++) {
  96.                 String m = "";
  97.                 List<String> ms = map.get(j);
  98.                 if (ms != null) for (int t = 0; t < ms.size(); t++) {
  99.                     if (t == 0) m = ms.get(t);
  100.                     else m = m + "|" + ms.get(t);
  101.                 }
  102.                 if (m != "") matchesip = matchesip + "(" + m + ")";
  103.             }
  104.             if (matchesip != "") ps.add(Pattern.compile(matchesip.replace(")(", ")([.,;:'\"-_=+ ]|)+(")));
  105.         }
  106.     }
  107.    
  108.    
  109.     private boolean isAds(String message) {
  110.         if (fcads) message = unAccent(message);
  111.         for (Pattern p : ps) if (p.matcher(message).find()) return true;
  112.         return false;
  113.     }
  114.    
  115.     private boolean isSwear(String message) {
  116.         if (fcswear) message = unAccent(message);
  117.         for (String s : ss) if (message.contains(s)) return true;
  118.         return false;
  119.     }
  120.    
  121.     private String unAccent(String s) {
  122.         return Pattern.compile("\\p{InCombiningDiacriticalMarks}+").
  123.                 matcher(Normalizer.normalize(s, Normalizer.Form.NFD)).
  124.                 replaceAll("").replaceAll("Đ", "D").replaceAll("đ", "d");
  125.     }
  126.    
  127.     @EventHandler
  128.     public void onChat(AsyncPlayerChatEvent e) {
  129.         if (e.getPlayer().isOp()) return;
  130.         if (ads && isAds(e.getMessage().toLowerCase())) {
  131.             e.setCancelled(true);
  132.             e.getPlayer().sendMessage(prefix + antiads);
  133.             return;
  134.         }
  135.         if (swear && isSwear(e.getMessage().toLowerCase())) {
  136.             e.setCancelled(true);
  137.             e.getPlayer().sendMessage(prefix + antiswear);
  138.             return;
  139.         }
  140.     }
  141.  
  142. }
Advertisement
Add Comment
Please, Sign In to add comment