Advertisement
TechBug2012

SwearToggle Main Class

Jan 30th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.75 KB | None | 0 0
  1. package net.extrillius.sweartoggle;
  2.  
  3. import org.apache.commons.lang3.StringUtils;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.command.Command;
  6. import org.bukkit.command.CommandSender;
  7. import org.bukkit.entity.Player;
  8. import org.bukkit.event.EventHandler;
  9. import org.bukkit.event.Listener;
  10. import org.bukkit.event.player.AsyncPlayerChatEvent;
  11. import org.bukkit.event.player.PlayerJoinEvent;
  12. import org.bukkit.plugin.PluginManager;
  13. import org.bukkit.plugin.java.JavaPlugin;
  14.  
  15. import java.util.*;
  16. import java.util.regex.Matcher;
  17. import java.util.regex.Pattern;
  18.  
  19. /**
  20.  * Created by TechBug2012 on 1/20/16.
  21.  */
  22.  
  23. public class SwearToggle extends JavaPlugin implements Listener {
  24.     private ConfigAccessor playerAccessor;
  25.     private ConfigAccessor wordAccessor;
  26.     private ConfigAccessor pardonedAccessor;
  27.     private List<String> wordList;
  28.     private List<String> usernameList;
  29.     private List<String> pardonedList;
  30.  
  31.     @Override
  32.     public void onEnable() {
  33.  
  34.         this.playerAccessor = new ConfigAccessor(this, "players.yml");
  35.         this.playerAccessor.getConfig().addDefault("usernames", new ArrayList<String>());
  36.         usernameList = this.playerAccessor.getConfig().getStringList("usernames");
  37.  
  38.         this.wordAccessor = new ConfigAccessor(this, "words.yml");
  39.         this.wordAccessor.getConfig().addDefault("banned-words", new ArrayList<String>());
  40.         wordList = this.wordAccessor.getConfig().getStringList("banned-words");
  41.  
  42.         this.pardonedAccessor = new ConfigAccessor(this, "pardoned.yml");
  43.         this.pardonedAccessor.getConfig().addDefault("pardoned", new ArrayList<String>());
  44.         pardonedList = this.pardonedAccessor.getConfig().getStringList("pardoned");
  45.  
  46.         this.playerAccessor.getConfig().options().copyDefaults(true);
  47.         this.playerAccessor.saveConfig();
  48.         this.playerAccessor.reloadConfig();
  49.         this.wordAccessor.getConfig().options().copyDefaults(true);
  50.         this.wordAccessor.saveConfig();
  51.         this.wordAccessor.reloadConfig();
  52.         this.pardonedAccessor.getConfig().options().copyDefaults(true);
  53.         this.pardonedAccessor.saveConfig();
  54.         this.pardonedAccessor.reloadConfig();
  55.         getConfig().options().copyDefaults(true);
  56.         saveConfig();
  57.         reloadConfig();
  58.  
  59.         registerEvents();
  60.     }
  61.  
  62.     private void registerEvents() {
  63.         PluginManager pm = getServer().getPluginManager();
  64.  
  65.         pm.registerEvents(this, this);
  66.     }
  67.  
  68.     @EventHandler
  69.     public void onPlayerJoin(PlayerJoinEvent e) {
  70.         if (usernameList.contains(e.getPlayer().getName())) {
  71.             e.getPlayer().sendMessage(ChatColor.GREEN + "Swearing is filtered.");
  72.         } else {
  73.             e.getPlayer().sendMessage(ChatColor.GREEN + "Swearing is unfiltered.");
  74.         }
  75.     }
  76.  
  77.     @EventHandler
  78.     public void onChat(AsyncPlayerChatEvent event) {
  79.         Set<Player> filteredPlayers = new HashSet<>();
  80.         String newMessage = event.getMessage();
  81.  
  82.         for (String word : wordList) {
  83.             Pattern pattern = Pattern.compile(".*\\b(" + word + ")\\b.*", Pattern.CASE_INSENSITIVE);
  84.             Matcher matcher = pattern.matcher(newMessage);
  85.             if (matcher.find()) {
  86.                 StringBuilder sb = new StringBuilder();
  87.                 String match = matcher.group(1);
  88.                 for (int i = 0; i < match.length(); i++) {
  89.                     sb.append("*");
  90.                 }
  91.                 newMessage = newMessage.replaceAll(match, sb.toString());
  92.             }
  93.         }
  94.  
  95.         Iterator<Player> it = event.getRecipients().iterator();
  96.         while (it.hasNext()) {
  97.             Player p = it.next();
  98.             if (usernameList.contains(p.getName())) {
  99.                 it.remove();
  100.                 filteredPlayers.add(p);
  101.             }
  102.         }
  103.         newMessage = String.format(event.getFormat(), event.getPlayer().getDisplayName(), newMessage);
  104.         for (Player p : filteredPlayers) {
  105.             p.sendMessage(newMessage);
  106.         }
  107.     }
  108.  
  109.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
  110.         if (!(sender instanceof Player)) {
  111.             sender.sendMessage("You have to be a player to use this command!");
  112.             return false;
  113.         }
  114.         if (args.length == 1) {
  115.             if (args[0].equalsIgnoreCase("on")) {
  116.                 if (!(sender.hasPermission("swear.on"))) {
  117.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  118.                     return false;
  119.                 }
  120.                 if (!(usernameList.contains(sender.getName()))) {
  121.                     usernameList.add(sender.getName()); // Use UUIDs in the future.
  122.                     this.playerAccessor.getConfig().set("usernames", usernameList);
  123.                     this.playerAccessor.saveConfig();
  124.                     sender.sendMessage(ChatColor.GREEN + "Swearing is now " + ChatColor.DARK_AQUA + "filtered.");
  125.                 } else {
  126.                     sender.sendMessage(ChatColor.RED + "Swearing is already filtered!");
  127.                 }
  128.             } else if (args[0].equalsIgnoreCase("off")) {
  129.                 if (!(sender.hasPermission("swear.off"))) {
  130.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  131.                 }
  132.                 if (usernameList.contains(sender.getName())) {
  133.                     usernameList.remove(sender.getName()); // Again, use UUIDs in the future.
  134.                     this.playerAccessor.saveConfig();
  135.                     sender.sendMessage(ChatColor.GREEN + "Swearing is now " + ChatColor.DARK_AQUA + "unfiltered.");
  136.                 } else {
  137.                     sender.sendMessage(ChatColor.RED + "Swearing is already unfiltered!");
  138.                     return false;
  139.                 }
  140.             } else if (args[0].equalsIgnoreCase("reload")) {
  141.                 if (!(sender.hasPermission("swear.reload"))) {
  142.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  143.                     return false;
  144.                 }
  145.                 reloadConfig();
  146.                 saveConfig();
  147.                 this.playerAccessor.reloadConfig();
  148.                 this.playerAccessor.saveConfig();
  149.                 this.wordAccessor.reloadConfig();
  150.                 this.wordAccessor.saveConfig();
  151.                 sender.sendMessage(ChatColor.GREEN + "Config reloaded.");
  152.             } else if (args[0].equalsIgnoreCase("add")) {
  153.                 sender.sendMessage(ChatColor.RED + "Specify a word to add.");
  154.             } else if (args[0].equalsIgnoreCase("remove")) {
  155.                 sender.sendMessage(ChatColor.RED + "Specify a word to remove.");
  156.             } else {
  157.                 sender.sendMessage(ChatColor.GREEN + "Commands:");
  158.                 sender.sendMessage(ChatColor.GRAY + "/swear on: " + ChatColor.DARK_GRAY + "Filters swear words.");
  159.                 sender.sendMessage(ChatColor.GRAY + "/swear off: " + ChatColor.DARK_GRAY + "Unfilters swear words.");
  160.                 sender.sendMessage(ChatColor.GRAY + "/swear add: " + ChatColor.DARK_GRAY + "Adds a word to the list.");
  161.                 sender.sendMessage(ChatColor.GRAY + "/swear remove: " + ChatColor.DARK_GRAY + "Removes a word from the list.");
  162.                 sender.sendMessage(ChatColor.GRAY + "/swear reload: " + ChatColor.DARK_GRAY + "Reloads the plugin.");
  163.             }
  164.         }
  165.         if (args.length == 0) {
  166.             sender.sendMessage(ChatColor.GREEN + "Commands:");
  167.             sender.sendMessage(ChatColor.GRAY + "/swear on: " + ChatColor.DARK_GRAY + "Filters swear words.");
  168.             sender.sendMessage(ChatColor.GRAY + "/swear off: " + ChatColor.DARK_GRAY + "Unfilters swear words.");
  169.             sender.sendMessage(ChatColor.GRAY + "/swear add: " + ChatColor.DARK_GRAY + "Adds a word to the list.");
  170.             sender.sendMessage(ChatColor.GRAY + "/swear remove: " + ChatColor.DARK_GRAY + "Removes a word from the list.");
  171.             sender.sendMessage(ChatColor.GRAY + "/swear reload: " + ChatColor.DARK_GRAY + "Reloads the plugin.");
  172.         }
  173.         if (args.length == 2) {
  174.             if (args[0].equalsIgnoreCase("add")) {
  175.                 if (!(sender.hasPermission("swear.add"))) {
  176.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  177.                     return false;
  178.                 }
  179.                 if (!(wordList.contains(args[1]))) {
  180.                     wordList.add(args[1]);
  181.                     this.wordAccessor.getConfig().set("banned-words", wordList);
  182.                     this.wordAccessor.saveConfig();
  183.                     this.wordAccessor.reloadConfig();
  184.                     sender.sendMessage(ChatColor.DARK_AQUA + args[1] +
  185.                             ChatColor.GREEN + " has been added to the list of banned words.");
  186.                 } else {
  187.                     sender.sendMessage(ChatColor.RED + "That word has already been added!");
  188.                 }
  189.             } else if (args[0].equalsIgnoreCase("remove")) {
  190.                 if (!(sender.hasPermission("swear.remove"))) {
  191.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  192.                     return false;
  193.                 }
  194.                 if (wordList.contains(args[1])) {
  195.                     wordList.remove(args[1]);
  196.                     this.wordAccessor.getConfig().set("banned-words", wordList);
  197.                     this.wordAccessor.saveConfig();
  198.                     this.wordAccessor.reloadConfig();
  199.                     sender.sendMessage(ChatColor.DARK_AQUA + args[1] +
  200.                             ChatColor.GREEN + " has been removed from the list of banned words.");
  201.                 } else {
  202.                     sender.sendMessage(ChatColor.RED + "That word is not on the list!");
  203.                 }
  204.             } else if (args[0].equalsIgnoreCase("pardon")) {
  205.                 if (!(sender.hasPermission("swear.pardon"))) {
  206.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  207.                     return false;
  208.                 }
  209.                 if (!(pardonedList.contains(args[1]))) {
  210.                     pardonedList.add(args[1]);
  211.                     this.pardonedAccessor.getConfig().set("pardoned", pardonedList);
  212.                     this.pardonedAccessor.saveConfig();
  213.                     this.pardonedAccessor.reloadConfig();
  214.                     sender.sendMessage(ChatColor.DARK_AQUA + args[1] +
  215.                             ChatColor.GREEN + " will not be censored.");
  216.                 } else {
  217.                     sender.sendMessage(ChatColor.RED + "That word is already pardoned!");
  218.                 }
  219.             } else if (args[0].equalsIgnoreCase("unpardon")) {
  220.                 if (!(sender.hasPermission("swear.unpardon"))) {
  221.                     sender.sendMessage(ChatColor.RED + "You do not have permission to do this.");
  222.                     return false;
  223.                 }
  224.                 pardonedList.remove(args[1]);
  225.                 this.pardonedAccessor.getConfig().set("pardoned", pardonedList);
  226.                 this.pardonedAccessor.saveConfig();
  227.                 this.pardonedAccessor.reloadConfig();
  228.                 sender.sendMessage(ChatColor.DARK_AQUA + args[1] +
  229.                         ChatColor.GREEN + " will be censored.");
  230.             } else {
  231.                 sender.sendMessage(ChatColor.RED + "Invalid parameters!");
  232.                 sender.sendMessage(ChatColor.GREEN + "Usage:");
  233.                 sender.sendMessage(ChatColor.GRAY + "/swear add [word]");
  234.                 sender.sendMessage(ChatColor.GRAY + "/swear remove [word]");
  235.             }
  236.         }
  237.         if (args.length > 2) {
  238.             sender.sendMessage(ChatColor.RED + "Too many arguments!");
  239.             return false;
  240.         }
  241.         return true;
  242.     }
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement