package tv.mineinthebox.essentials.commands;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import tv.mineinthebox.essentials.xEssentials;
import tv.mineinthebox.essentials.enums.PermissionKey;
import tv.mineinthebox.essentials.interfaces.CommandTemplate;
public class CmdGive extends CommandTemplate {
private final xEssentials pl;
public CmdGive(xEssentials pl, Command cmd, CommandSender sender) {
super(pl, cmd, sender);
this.pl = pl;
}
private List<String> getContainedMaterials(String material) {
List<String> list = new ArrayList<String>();
for(String mat : pl.getConfiguration().getMaterials()) {
if(mat.startsWith(material.toUpperCase())) {
list.add(mat);
}
}
return list;
}
public List<String> onTabComplete(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("give")) {
if(sender.hasPermission(PermissionKey.CMD_GIVE.getPermission())) {
if(args.length == 2) {
List<String> list = getContainedMaterials(args[1]);
return list;
} else if(args.length == 3) {
List<String> list = getContainedMaterials(args[1]);
return list;
}
}
}
return null;
}
@SuppressWarnings("deprecation")
public boolean execute(CommandSender sender, Command cmd, String[] args) {
if(cmd.getName().equalsIgnoreCase("give")) {
if(sender.hasPermission(PermissionKey.CMD_GIVE.getPermission())) {
if(args.length == 0) {
showHelp();
} else if(args.length == 1) {
if(args[0].equalsIgnoreCase("help")) {
showHelp();
} else {
sendMessage("we don't know much about this argument!");
}
} else if(args.length == 2) {
try {
Player p = Bukkit.getPlayer(args[0]);
if(p instanceof Player) {
if(args[1].contains(":")) {
String[] data = args[1].split(":");
if(isNumberic(data[0])) {
if(!isNumberic(data[1])) {
sendMessage("the sub data value needs to be a number!");
return false;
}
Material mat = Material.getMaterial(Integer.parseInt(data[0]));
Short dura = Short.parseShort(data[1]);
ItemStack item = new ItemStack(mat, 1);
item.setDurability(dura);
sendMessage("giving " + item.getType().name() + ":"+dura + " amount: 1 to player " + p.getName());
try {
p.getInventory().addItem(item);
sendMessageTo(p,"you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
} else {
Material mat = Material.getMaterial(data[0].toUpperCase());
if(!isNumberic(data[1])) {
sendMessage("the sub data value needs to be a number!");
return false;
}
Short dura = Short.parseShort(data[1]);
ItemStack item = new ItemStack(mat, 1);
item.setDurability(dura);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
}
} else {
if(isNumberic(args[1])) {
Material mat = Material.getMaterial(Integer.parseInt(args[1]));
ItemStack item = new ItemStack(mat, 1);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
} else {
Material mat = Material.getMaterial(args[1].toUpperCase());
ItemStack item = new ItemStack(mat, 1);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
}
}
} else {
sendMessage("this player is not online!");
}
} catch(NullPointerException e) {
sendMessage("invalid item!");
}
} else if(args.length == 3) {
try {
Player p = Bukkit.getPlayer(args[0]);
if(p instanceof Player) {
if(isNumberic(args[2])) {
int amount = Integer.parseInt(args[2]);
if(args[1].contains(":")) {
String[] data = args[1].split(":");
if(isNumberic(data[0])) {
if(!isNumberic(data[1])) {
sendMessage("the sub data value needs to be a number!");
return false;
}
Material mat = Material.getMaterial(Integer.parseInt(data[0]));
Short dura = Short.parseShort(data[1]);
ItemStack item = new ItemStack(mat, amount);
item.setDurability(dura);
sendMessage("giving " + item.getType().name() + ":"+dura + " amount: 1 to player " + p.getName());
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
} else {
Material mat = Material.getMaterial(data[0].toUpperCase());
if(!isNumberic(data[1])) {
sendMessage("the sub data value needs to be a number!");
return false;
}
Short dura = Short.parseShort(data[1]);
ItemStack item = new ItemStack(mat, amount);
item.setDurability(dura);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
}
} else {
if(isNumberic(args[1])) {
Material mat = Material.getMaterial(Integer.parseInt(args[1]));
ItemStack item = new ItemStack(mat, amount);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
} else {
Material mat = Material.getMaterial(args[1].toUpperCase());
ItemStack item = new ItemStack(mat, amount);
try {
p.getInventory().addItem(item);
sendMessageTo(p, "you retrieved items from " + sender.getName());
} catch(IllegalArgumentException e) {
sendMessage(p.getName() + " is to full");
}
}
}
} else {
sendMessage("invalid amount given in!");
}
} else {
sendMessage("this player is not online!");
}
} catch(NullPointerException e) {
sendMessage("invalid item!");
}
}
} else {
getWarning(WarningType.NO_PERMISSION);
}
}
return false;
}
private Boolean isNumberic(String s) {
try {
Integer i = Integer.parseInt(s);
if(i != null) {
return true;
}
} catch(NumberFormatException e) {
}
return false;
}
@Override
public void showHelp() {
sender.sendMessage(ChatColor.GOLD + ".oO___[give help]___Oo.");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/give " + ChatColor.WHITE + ": shows help");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/give help " + ChatColor.WHITE + ": shows help");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/give <player> <item:subdata> " + ChatColor.WHITE + ": gives the player one item");
sender.sendMessage(ChatColor.RED + "Admin: " + ChatColor.GRAY + "/give <player> <item:subdata> <amount> " + ChatColor.WHITE + " gives the player a item with a custom amount!");
}
}