package net.diamonddominion.esaych.global; import java.util.ArrayList; import net.diamonddominion.esaych.CustomPlugin; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerCommandPreprocessEvent; public class FullMute { private CustomPlugin plugin; public FullMute(CustomPlugin plugin) { this.plugin = plugin; } ChatSQL sql; @SuppressWarnings("static-access") public void enable() { // plugin.getServer().getPluginManager().registerEvents(this, plugin); sql = plugin.chat.sql; blockedCommands.add("/me"); log("Enabled"); } public ArrayList<String> blockedCommands = new ArrayList<String>(); // @SuppressWarnings("unchecked") // public void onEnable() { // plugin.getServer().getPluginManager().registerEvents(this, plugin); // saveMuted(); // try { // log("Loading Muted Players..."); // reloadMuted(); // } catch (Exception e) { // log("Could not load the config file!!"); // } // blockedCommands = (ArrayList<String>)getMuteTime().getList("blocked-commands"); // // log("FullMute Plugin Enabled"); // } // // public void onDisable() { // log("FullMute Plugin Disabled"); // } @SuppressWarnings("static-access") public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (label.equalsIgnoreCase("mute")) { if (sender instanceof Player){ Player player = (Player)sender; if (!player.hasPermission("fullmute.mute")){ msg(player, "Insufficient Permissions"); return true; } } if (args.length >= 1) { if (args.length >= 2) { mute(sender, args[0], args[1], false); } else { mute(sender, args[0], null, false); } } else { msg(sender, "Try /mute [Player]"); } return true; } else if (label.equalsIgnoreCase("me")) { if (sender instanceof Player){ Player player = (Player)sender; if (player.hasPermission("mchat.me")) { if (args.length != 0) { String meMsg = args[0]; for (int x = 1; x < args.length; x++) { meMsg += " " + args[x]; } meMsg = plugin.chat.utils.removeCussWords(meMsg, true, player, !player.hasPermission("ddchat.censorbypass"), ChatColor.YELLOW + ""); if (player.hasPermission("ddchat.color")) { meMsg = ChatColor.translateAlternateColorCodes('&', meMsg); } else { meMsg = plugin.chat.utils.changeCussColors(meMsg); } if (!player.hasPermission("ddchat.caps")) meMsg = plugin.chat.utils.removeCAPS(meMsg); plugin.getServer().broadcastMessage(ChatColor.DARK_RED + "*" + player.getPlayerListName().substring(0, 2) + player.getName() + ChatColor.YELLOW + " " + meMsg); } else { player.sendMessage(ChatColor.RED + "Correct usage: /me <message>"); } } else { player.sendMessage(ChatColor.RED + "You do not have permission to use /me"); } } else { msg(sender, "You just try to do /me console :P YOU CAN'T"); } return true; } return false; } public void mute(CommandSender sender, String player, String time, boolean def) { Player realPlayer = Bukkit.getPlayer(player); if (playerMuted(player)) { sql.setMuteTime(realPlayer.getName(), 0); if (realPlayer != null) msg(realPlayer, "You are now free to talk."); msg(sender, player + " successfully unmuted."); return; } if (realPlayer == null) { msg(sender, "Player Not Found!"); return; } player = realPlayer.getName(); if (time == null) { if (!playerMuted(player)) { for (Player on : Bukkit.getOnlinePlayers()) { if (on.hasPermission("fullmute.mute")) { if (sender instanceof Player && on == (Player) sender) msg(on, player + " muted for the default 5 minutes"); else { if (sender instanceof Player) msg(on, player + " muted for the default 5 minutes by: " + ((Player) sender).getName()); else msg(on, player + " muted for the default 5 minutes by: Console"); } } } if (!(sender instanceof Player)) msg(sender, player + " muted for the default 5 minutes"); msg(realPlayer, "You have been muted for 5 minutes."); msg(sender, "To specify a time, type /mute <player> <time>s,m,h"); } mute(sender, player, "5m", true); return; } if (getTimeStamp(time) == -1) msg(sender, "Invalid time format, Ex. 20m"); if (getTimeStamp(time) == -2) msg(sender, "Unknown time value, accepts s,m,h"); if (getTimeStamp(time) == -3) msg(sender, "Time too long! Max allowed time is 5 hours (5h)"); if (getTimeStamp(time) < 0) return; sql.setMuteTime(realPlayer.getName(), (int) getTimeStamp(time)); int left = (int)(sql.getMuteTime(realPlayer.getName()) - System.currentTimeMillis() / 1000); msg(realPlayer, "You were muted for " + timeLeft(left)); if (!def) for (Player on : Bukkit.getOnlinePlayers()) { if (on.hasPermission("ddchat.prefix")) { msg(on, player + " muted for " + timeLeft(left)); } } if (!(sender instanceof Player)) msg(sender, realPlayer.getName() + " successfully muted."); } // @EventHandler // public void onPlayerChat(AsyncPlayerChatEvent event){ // Player player = event.getPlayer(); // log("HA"); // if (playerMuted(player.getName())) { // log("A"); // if (checkTime(event.getPlayer().getName())) { // int left = (int)(plugin.chat.sql.getMuteTime("muted-players." + player.getName()) - System.currentTimeMillis() / 1000); // msg(event.getPlayer(), "You are muted, and will stay muted for the remaining:"); // msg(event.getPlayer(), timeLeft(left)); // try { // event.setCancelled(true); // } catch (Exception e) { // event.setMessage(""); // } // } // } // } // @EventHandler(priority=EventPriority.HIGHEST) public void onCommandPreProcess(PlayerCommandPreprocessEvent event) { Player player = event.getPlayer(); if (playerMuted(player.getName())){ for (int i = 0; i < blockedCommands.size(); i++) { if (event.getMessage().startsWith(blockedCommands.get(i))) { if (checkTime(event.getPlayer().getName())) { int left = (int)(sql.getMuteTime(player.getName()) - System.currentTimeMillis() / 1000); msg(event.getPlayer(), "You are muted, and will stay muted for the remaining:"); msg(event.getPlayer(), timeLeft(left)); event.setCancelled(true); } } } } } public void msg(CommandSender sender, String msg){ if (sender instanceof Player) { Player player = (Player) sender; player.sendMessage("[" + ChatColor.RED + "Mute" + ChatColor.WHITE + "] " + ChatColor.AQUA + msg); } else { log(msg); } } public boolean playerMuted(String player) { return sql.getMuteTime(player) != 0; } public int getTimeStamp(String time) { int timestamp = (int) (System.currentTimeMillis() / 1000); String unit = time.substring(time.length() - 1, time.length()); String input = time.substring(0, time.length() - 1); int add = 0; try { add = Integer.parseInt(input); } catch (Exception e) { return -1; } if (unit.equalsIgnoreCase("s")) { timestamp += add; } else if (unit.equalsIgnoreCase("m")) { timestamp += add*60; } else if (unit.equalsIgnoreCase("h")) { timestamp += add*60*60; } else { return -2; } if (timestamp - System.currentTimeMillis() / 1000 > 60*60*5) return -3; return timestamp; } public boolean checkTime(String player) { int time = sql.getMuteTime(player); if (System.currentTimeMillis() / 1000 > time) { mute(null, player, null, false); return false; } return true; } public String timeLeft(int time) { String msg = ""; int divid = 0; if (time >= 60*60) { divid = time / (60*60); msg += divid + " hour"; if (divid > 1) msg+= "s"; time -= divid * (60*60); if (time != 0) msg += ", "; log(divid + ", " + time); } if (time >= 60) { divid = time / 60; msg += divid + " minute"; if (divid > 1) msg+= "s"; time -= divid * 60; if (time != 0) msg += ", "; if (time != 0) msg += "and "; } if (time != 0) { divid = time; msg += divid + " second"; if (divid > 1) msg+= "s"; } return msg; } public void log(String info) { plugin.getLogger().info("<FullMute> " + info); } }