package me.desht.scrollingmenusign.commands;
import me.desht.dhutils.MiscUtil;
import me.desht.scrollingmenusign.SMSException;
import me.desht.scrollingmenusign.SMSMenu;
import me.desht.scrollingmenusign.SMSMenuItem;
import me.desht.scrollingmenusign.ScrollingMenuSign;
import me.desht.scrollingmenusign.util.SMSUtil;
import me.desht.scrollingmenusign.views.action.RemoveItemAction;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
import java.util.List;
public class RemoveItemCommand extends SMSAbstractCommand {
public RemoveItemCommand() {
super("sms remove", 2, 2);
setPermissionNode("scrollingmenusign.commands.remove");
setUsage(new String[]{
"/sms remove <menu-name> @<pos>",
"/sms remove <menu-name> <item-label>"
});
setQuotedArgs(true);
}
@Override
public boolean execute(Plugin plugin, CommandSender sender, String[] args) {
String menuName = args[0];
String itemLabel = SMSUtil.unEscape(args[1]);
if (itemLabel.matches("@[0-9]+")) {
// backwards compatibility - numeric indices should be prefixed with a '@'
// but we'll allow raw numbers to be used
itemLabel = itemLabel.substring(1);
}
try {
SMSMenu menu = getMenu(sender, menuName);
menu.ensureAllowedToModify(sender);
int pos = menu.indexOfItem(itemLabel);
SMSMenuItem menuItem = menu.getItemAt(pos);
menu.removeItem(pos);
menu.notifyObservers(new RemoveItemAction(sender, menuItem));
MiscUtil.statusMessage(sender, "Menu entry &f#" + itemLabel + "&- removed from &e" + menu.getName());
} catch (IndexOutOfBoundsException e) {
throw new SMSException("Item index " + itemLabel + " out of range");
} catch (IllegalArgumentException e) {
throw new SMSException(e.getMessage());
}
return true;
}
@Override
public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) {
switch (args.length) {
case 1:
return getMenuCompletions(plugin, sender, args[0]);
case 2:
SMSMenu menu = ((ScrollingMenuSign) plugin).getMenuManager().getMenu(args[0]);
return getMenuItemCompletions(sender, menu, args[1]);
default:
showUsage(sender);
return noCompletions(sender);
}
}
}