package tv.mineinthebox.essentials.commands;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.PermissionKey;
import tv.mineinthebox.essentials.instances.RestrictedCommand;
import tv.mineinthebox.essentials.interfaces.CommandTemplate;
import tv.mineinthebox.essentials.interfaces.XOfflinePlayer;
public class CmdCommandRestrict extends CommandTemplate {
private final xEssentials pl;
public CmdCommandRestrict(xEssentials pl, Command cmd, CommandSender sender) {
super(pl, cmd, sender);
this.pl = pl;
}
public boolean execute(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("CommandRestrict")) {
if(sender.hasPermission(PermissionKey.CMD_COMMAND_RESTRICT.getPermission())) {
if(args.length == 0) {
showHelp();
} else if(args.length == 1) {
if(args[0].equalsIgnoreCase("help")) {
showHelp();
} else {
createRestriction(args, sender);
}
} else if(args.length == 2) {
if(args[0].equalsIgnoreCase("list")) {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[1]);
if(off.hasCommandRestrictions()) {
sender.sendMessage(ChatColor.GOLD + ".oO___[Restricted command list for player " + off.getName() + "]___Oo.");
for(int i = 0; i < off.getCommandRestrictions().size(); i++) {
sender.sendMessage(ChatColor.GREEN +""+ i + ChatColor.GRAY + ": " + off.getCommandRestrictions().get(i).getCommand());
}
} else {
sendMessage(off.getName() + " doesn't have any command restrictions!");
}
} else {
createRestriction(args, sender);
}
} else if(args.length == 3) {
if(args[0].equalsIgnoreCase("remove")) {
if(pl.getManagers().getPlayerManager().isEssentialsPlayer(args[1])) {
if(isNumeric(args[2])) {
try {
Integer i = Integer.parseInt(args[2]);
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(args[1]);
RestrictedCommand restriction = off.getCommandRestrictions().get(i);
off.removeCommandRestriction(restriction);
sendMessage("you have successfully removed the command restriction of player " + off.getName());
} catch(IndexOutOfBoundsException e) {
sendMessage("this id does not exist!");
}
} else {
sendMessage("the third argument is not a number!");
}
} else {
getWarning(WarningType.NEVER_PLAYED_BEFORE);
}
} else {
createRestriction(args, sender);
}
} else {
createRestriction(args, sender);
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
}
return false;
}
private void createRestriction(String[] args, CommandSender sender) {
String arg = toString(args);
if(arg.contains(":")) {
String[] split = arg.split(":");
if(split.length == 3) {
String playername = split[0];
String restrictedCommand = split[1];
String message = split[2];
if(pl.getManagers().getPlayerManager().isEssentialsPlayer(playername)) {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(playername);
if(!off.hasContainedRestriction(restrictedCommand)) {
off.setCommandRestriction(restrictedCommand, message, null);
sendMessage("you have successfully set the restricted command for player " + off.getName());
} else {
sendMessage("this player has already this command restricted!");
}
} else {
sendMessage("this player has never played before!");
}
} else if(split.length == 4) {
String playername = split[0];
String restrictedCommand = split[1];
String message = split[2];
String taskcommand = split[3];
if(pl.getManagers().getPlayerManager().isEssentialsPlayer(playername)) {
XOfflinePlayer off = pl.getManagers().getPlayerManager().getOfflinePlayer(playername);
if(!off.hasContainedRestriction(restrictedCommand)) {
off.setCommandRestriction(restrictedCommand, message, taskcommand);
sendMessage("you have successfully set the restricted command for player " + off.getName());
} else {
sendMessage("this player has already this command restricted!");
}
} else {
sendMessage("this player has never played before!");
}
} else {
sendMessage("invalid arguments!");
}
} else {
sendMessage("we don't know much about these arguments!");
}
}
private boolean isNumeric(String s) {
try {
Integer i = Integer.parseInt(s);
if(i != null) {
return true;
}
} catch(NumberFormatException e) {
return false;
}
return false;
}
private String toString(String[] args) {
StringBuilder build = new StringBuilder();
for(int i = 0; i<args.length;i++) {
if(i == args.length) {
build.append(args[i].replace(",", ""));
} else {
build.append(args[i].replace(",", "") + " ");
}
}
return build.toString();
}
@Override
public void showHelp() {
sender.sendMessage(ChatColor.GOLD + ".oO___[CommandRestriction help]___Oo.");
sender.sendMessage(ChatColor.RED + "warning, use this inside one line!, do not create this with spaces!");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/commandrestrict <player:command>:<message>" + ChatColor.WHITE + ": restrict a command specific for this player, with a custom message");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/commandrestrict <player:command>:<message>:<taskcommand> " + ChatColor.WHITE + ": restrict a command specific for this player, with a custom task");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/commandrestrict list <player> " + ChatColor.WHITE + ": shows a list with id's of current restricted commands of the player");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/commandrestrict remove <player> <id> " + ChatColor.WHITE + ": remove a id from the list of this player");
}
}