package tv.mineinthebox.essentials.commands;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import org.bukkit.BanList.Type;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.LogType;
import tv.mineinthebox.essentials.enums.PermissionKey;
import tv.mineinthebox.essentials.interfaces.CommandTemplate;
import tv.mineinthebox.essentials.interfaces.XOfflinePlayer;
import tv.mineinthebox.essentials.interfaces.XPlayer;
public class CmdTempban extends CommandTemplate {
private final xEssentials pl;
public CmdTempban(xEssentials pl, Command cmd, CommandSender sender) {
super(pl, cmd, sender);
this.pl = pl;
}
@SuppressWarnings("deprecation")
public boolean execute(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("tempban")) {
if(sender.hasPermission(PermissionKey.CMD_TEMP_BAN.getPermission())) {
if(args.length == 0) {
showHelp();
} else if(args.length == 1) {
if(args[0].equalsIgnoreCase("help")) {
showHelp();
} else {
if(pl.getManagers().getPlayerManager().isOnline(args[0])) {
XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(args[0]);
Date date = new Date(System.currentTimeMillis());
date.setDate(date.getDate()+1);
xp.setTempbanned(date.getTime(), "the ban hammer has spoken!", sender.getName());
xp.getBukkitPlayer().kickPlayer("the ban hammer has spoken!");
sendMessage("player successfully tempbanned for 1 day");
} else {
try {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]);
Date date = new Date(System.currentTimeMillis());
date.setDate(date.getDate()+1);
off.setTempbanned(date.getTime(), "the ban hammer has spoken!", sender.getName());
sendMessage("player successfully tempbanned for 1 day");
} catch(NullPointerException e) {
try {
File f = new File(pl.getDataFolder() + File.separator + "players" + File.separator + args[0].toLowerCase() + ".yml");
FileConfiguration con = YamlConfiguration.loadConfiguration(f);
Date date = new Date(System.currentTimeMillis());
date.setDate(date.getDate()+1);
Bukkit.getServer().getBanList(Type.NAME).addBan(args[0], "the ban hammer has been spoken!", date, sender.getName()).save();
con.set("isDefault", true);
con.set("ip", "unknown");
con.set("user", args[0]);
con.set("banned.isBanned", false);
con.set("banned.reason", "none");
con.set("tempbanned.isBanned", true);
con.set("tempbanned.till", date.getTime());
con.set("tempbanned.message", "the ban hammer has been spoken!");
con.set("fly", false);
con.set("torch", false);
con.set("firefly", false);
con.save(f);
sendMessage("successfully temp banned player " + args[0] + " however keep in mind this player has never played before");
} catch(Exception r) {
r.printStackTrace();
}
}
}
}
} else if(args.length > 1) {
if(pl.getManagers().getPlayerManager().isOnline(args[0])) {
XPlayer xp = pl.getManagers().getPlayerManager().getPlayer(args[0]);
Date date = convertArgsToDate(args);
String[] newArgs = getClearDescription(args);
String banMessage = Arrays.toString(newArgs).replace(args[0], "").replace("[", "").replace(",", "").replace("]", "");
xp.setTempbanned(date.getTime(), banMessage, sender.getName());
xp.getBukkitPlayer().kickPlayer(banMessage);
sendMessage("successfully tempbanned player " + xp.getName() + " till " + date.toString());
} else {
try {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[0]);
Date date = convertArgsToDate(args);
String[] newArgs = getClearDescription(args);
String banMessage = Arrays.toString(newArgs).replace(args[0], "").replace("[", "").replace(",", "").replace("]", "");
off.setTempbanned(date.getTime(), banMessage, sender.getName());
sendMessage("successfully tempbanned player " + off.getName() + " till " + date.toString());
} catch(NullPointerException e) {
try {
File f = new File(pl.getDataFolder() + File.separator + "players" + File.separator + args[0].toLowerCase() + ".yml");
FileConfiguration con = YamlConfiguration.loadConfiguration(f);
Date date = convertArgsToDate(args);
String[] newArgs = getClearDescription(args);
String banMessage = Arrays.toString(newArgs).replace(args[0], "").replace("[", "").replace(",", "").replace("]", "");
Bukkit.getServer().getBanList(Type.NAME).addBan(args[0], banMessage, date, sender.getName()).save();
con.set("isDefault", true);
con.set("ip", "unknown");
con.set("user", args[0]);
con.set("banned.isBanned", false);
con.set("banned.reason", "none");
con.set("tempbanned.isBanned", true);
con.set("tempbanned.till", date.getTime());
con.set("tempbanned.message", banMessage);
con.set("fly", false);
con.set("torch", false);
con.set("firefly", false);
con.save(f);
sendMessage("successfully temp banned player " + args[0] + " however keep in mind this player has never played before");
} catch(Exception r) {
r.printStackTrace();
}
}
}
}
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
return false;
}
@SuppressWarnings({ "deprecation" })
private Date convertArgsToDate(String[] args) {
Date date = new Date(System.currentTimeMillis());
for(String argument : args) {
if(argument.length() == 2) {
String TimeType = argument.substring(1);
String number = argument.replace(TimeType, "");
if(isNumeric(number)) {
Integer i = Integer.parseInt(number);
if(TimeType.equalsIgnoreCase("d")) {
date.setDate(date.getDate()+i);
} else if(TimeType.equalsIgnoreCase("y")) {
date.setYear(date.getYear()+i);
} else if(TimeType.equalsIgnoreCase("m")) {
date.setMonth(date.getMonth()+i);
}
}
} else if(argument.length() == 3) {
String TimeType = argument.substring((argument.length()-1));
String number = argument.replace(TimeType, "");
if(isNumeric(number)) {
Integer i = Integer.parseInt(number);
if(TimeType.equalsIgnoreCase("d")) {
date.setDate(date.getDate()+i);
} else if(TimeType.equalsIgnoreCase("y")) {
date.setYear(date.getYear()+i);
} else if(TimeType.equalsIgnoreCase("m")) {
date.setMonth(date.getMonth()+i);
}
}
} else if(argument.length() == 4) {
String TimeType = argument.substring((argument.length()-1));
String number = argument.replace(TimeType, "");
if(isNumeric(number)) {
Integer i = Integer.parseInt(number);
if(TimeType.equalsIgnoreCase("d")) {
date.setDate(date.getDate()+i);
} else if(TimeType.equalsIgnoreCase("y")) {
date.setYear(date.getYear()+i);
} else if(TimeType.equalsIgnoreCase("m")) {
date.setMonth(date.getMonth()+i);
}
}
} else {
xEssentials.log("Player is not tempbanned because, you used to many arguments!", LogType.SEVERE);
}
}
return date;
}
private String[] getClearDescription(String[] args) {
ArrayList<String> newArgs = new ArrayList<String>();
for(String argument : args) {
if(argument.length() == 2) {
String TimeType = argument.substring(1);
String number = argument.replace(TimeType, "");
if(!isNumeric(number)) {
newArgs.add(argument);
}
} else {
newArgs.add(argument);
}
}
return newArgs.toArray(new String[newArgs.size()]);
}
@SuppressWarnings("unused")
private boolean isNumeric(String number) {
try {
Integer i = Integer.parseInt(number);
return true;
} catch(NumberFormatException e) {
return false;
}
}
@Override
public void showHelp() {
sender.sendMessage(ChatColor.GOLD + ".oO___[tempban help]___Oo.");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/tempban <player> " + ChatColor.WHITE + ": tempban a player");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/tempban <player> <message> " + ChatColor.WHITE + ": tempban a player with a desired message!");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/tempban <player> <message> <1D> " + ChatColor.WHITE + "tempban a player with a disered message for one day!");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "variables for ban time are: 1Y, 1M, 1D");
}
}