package com.sijobe.spc.command;
import com.sijobe.spc.util.FontColour;
import com.sijobe.spc.validation.Parameter;
import com.sijobe.spc.validation.ParameterInteger;
import com.sijobe.spc.validation.ParameterString;
import com.sijobe.spc.validation.Parameters;
import com.sijobe.spc.wrapper.CommandException;
import com.sijobe.spc.wrapper.CommandSender;
import com.sijobe.spc.wrapper.Item;
import java.util.List;
/**
* The enchant command adds the specified enchantment to the currently selected
* item in the players inventory
*
* @author simo_415
* @version 1.0
*/
@Command (
name = "enchant",
description = "Enchants the currently selected item",
example = "add protection 10",
videoURL = "http://www.youtube.com/watch?v=zd9mPAU5TG8",
version = "1.0"
)
public class Enchant extends StandardCommand {
/**
* The parameters of the command
*/
private static final Parameters PARAMETERS = new Parameters (
new Parameter[] {
new ParameterString("<list|remove|add <TYPE> [LEVEL]>", false, new String[] {"list","add","remove"}),
new ParameterString("", true),
new ParameterInteger("", true)
}
);
/**
* @see com.sijobe.spc.wrapper.CommandBase#execute(com.sijobe.spc.wrapper.CommandSender, java.util.List)
*/
@Override
public void execute(CommandSender sender, List<?> params) throws CommandException {
String argument = (String)params.get(0);
if (argument.equalsIgnoreCase("list")) {
String list = "";
for (String i : Item.getEnchantments()) {
if (i != null) {
list += i + " (" + getEnchantmentId(i) + "), ";
}
}
list = list.substring(0, list.length() - 2);
sender.sendMessageToPlayer(FontColour.GREEN + "Enchantments [name (id)]:");
sender.sendMessageToPlayer(list);
} else if (argument.equalsIgnoreCase("add")) {
if (params.size() == 1) {
throw new CommandException(getUsage(sender));
}
int id = -1;
try {
id = Integer.parseInt((String)params.get(1));
} catch (Exception e) {
id = getEnchantmentId((String)params.get(1));
}
if (id < 0) {
throw new CommandException("Invalid enchantment specified.");
}
int level = 1;
if (params.size() == 3) {
level = (Integer)params.get(2);
}
String name = null;
if ((name = Item.addEnchantmentToCurrentItem(getSenderAsPlayer(sender), id, level)) == null) {
throw new CommandException("Unable to add the specified enchantment with ID " + id);
}
getSenderAsPlayer(sender).sendChatMessage("The " + FontColour.AQUA +
name + FontColour.WHITE + " command was successfully added.");
} else {
Item.removeEnchantmentsOnCurrentItem(getSenderAsPlayer(sender));
getSenderAsPlayer(sender).sendChatMessage("Enchantment(s) for the current item were removed");
}
}
/**
* Gets the ID of the enchantment specified
*
* @param enchantment - The enchantment name
* @return The ID of the enchantment, or -1 if not found
*/
public int getEnchantmentId(String enchantment) {
return Item.getEnchantments().indexOf(enchantment);
}
/**
* @see com.sijobe.spc.wrapper.CommandBase#getParameters()
*/
@Override
public Parameters getParameters() {
return PARAMETERS;
}
}