package org.buckit.commands.admin; import java.util.Arrays; import java.util.List; import java.util.logging.Logger; import org.buckit.Config; import org.buckit.model.UserDataHolder; import org.buckit.util.TimeFormat; import org.bukkit.Server; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class BanCommand extends Command { private final Server server; private static Logger log = Logger.getLogger(BanCommand.class.getName()); public BanCommand(String name, Server server) { super(name); this.description = "Ban a player."; this.usageMessage = "Usage: /ban [player] <weeks|days|hours|minutes|seconds> <time> <reason>"; this.accessname = "buckit.admin.ban"; this.server = server; } @Override public boolean execute(CommandSender sender, String currentAlias, String[] args) { if (args.length < 1) { sender.sendMessage(Config.DEFAULT_ERROR_COLOR + "Insufficient arguments specified."); sender.sendMessage(Config.DEFAULT_ERROR_COLOR + this.getUsage()); return true; } String playername = args[0].toLowerCase(); UserDataHolder data = server.getDataSourceManager().getUserDataSource().getUserData(playername); if(data == null){ sender.sendMessage(Config.DEFAULT_ERROR_COLOR + "No player with name '" + playername + "' ever logged into this server."); return true; } int time = 0; int multiplier = 0; if(args.length > 1){ if(args[1].equalsIgnoreCase("weeks")) multiplier = TimeFormat.WEEK; else if(args[1].equalsIgnoreCase("days")) multiplier = TimeFormat.DAY; else if(args[1].equalsIgnoreCase("hours")) multiplier = TimeFormat.HOUR; else if(args[1].equalsIgnoreCase("minutes")) multiplier = TimeFormat.MINUTE; else multiplier = 1; } if(args.length > 2){ try{ time = Integer.parseInt(args[2]); } catch (NumberFormatException e) { sender.sendMessage(Config.DEFAULT_ERROR_COLOR + "Invalid time amount."); return true; } } time *= multiplier; String reason = ""; if(args.length > 3){ for(String part : Arrays.copyOfRange(args, 3, args.length)) reason += part + " "; } List<Player> list = server.matchPlayer(playername); Player player = null; for(Player p : list) if(p.getName().equalsIgnoreCase(playername)) player = p; if(time == 0){ data.setBantime(-1); server.getDataSourceManager().getUserDataSource().updateUserBanTime(data); if(player != null)player.kickPlayer("You have been permabanned."); log.info("Player '" + playername + "' has been permabanned by " + (sender instanceof Player ? ((Player)sender).getName() : "CONSOLE" ) + (!reason.equals("") ? " with reason " + reason : "") +"."); } else { data.setBantime(time + (int)(System.currentTimeMillis()/1000)); server.getDataSourceManager().getUserDataSource().updateUserBanTime(data); if(player != null)player.kickPlayer("You have been banned for " + TimeFormat.formatRemaining(time) + "."); log.info("Player '" + playername + "' has been banned for " + TimeFormat.formatRemaining(time) + " by " + (sender instanceof Player ? ((Player)sender).getName() : "CONSOLE" ) + (!reason.equals("") ? " with reason " + reason : "") +"."); } sender.sendMessage(Config.DEFAULT_INFO_COLOR + "Player '" + playername + "' is now banned " + (time != 0 ? "for " + TimeFormat.formatRemaining(time) : "permanently") + "."); return true; } }