package me.desht.scrollingmenusign.commands; import java.util.ArrayList; import java.util.List; import me.desht.dhutils.MessagePager; import me.desht.dhutils.MiscUtil; import me.desht.scrollingmenusign.SMSHandler; import me.desht.scrollingmenusign.SMSMenu; import me.desht.scrollingmenusign.ScrollingMenuSign; import me.desht.scrollingmenusign.views.SMSView; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.plugin.Plugin; public class ListMenusCommand extends SMSAbstractCommand { public ListMenusCommand() { super("sms list", 0, 1); setPermissionNode("scrollingmenusign.commands.list"); setUsage("/sms list [<menu-name>]"); setQuotedArgs(true); } @Override public boolean execute(Plugin plugin, CommandSender sender, String[] args) { MessagePager pager = MessagePager.getPager(sender).clear(); SMSHandler handler = ((ScrollingMenuSign) plugin).getHandler(); if (args.length > 0) { SMSMenu menu = getMenu(sender, args[0]); listMenu(pager, menu, true); } else { List<SMSMenu> menus = handler.listMenus(true); if (menus.size() == 0) { MiscUtil.statusMessage(sender, "No menu signs exist."); } else { pager.add("Use /sms list <menu-name> to see all the views for a menu"); for (SMSMenu menu : menus) { listMenu(pager, menu, false); } } } pager.showPage(); return true; } @Override public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) { if (args.length == 1) { return getMenuCompletions(plugin, sender, args[0]); } else { showUsage(sender); return noCompletions(sender); } } private void listMenu(MessagePager pager, SMSMenu menu, boolean listViews) { List<SMSView> views = ScrollingMenuSign.getInstance().getViewManager().getViewsForMenu(menu, true); ChatColor itemCol = menu.getItemCount() > 0 ? ChatColor.YELLOW : ChatColor.GOLD; ChatColor viewCol = views.size() > 0 ? ChatColor.YELLOW : ChatColor.GOLD; String ms = menu.getItemCount() == 1 ? "" : "s"; String vs = views.size() == 1 ? "" : "s"; String message = String.format(MessagePager.BULLET + " %s \"%s" + ChatColor.WHITE + "\" %s[%d item%s] %s[%d view%s]", menu.getName(), menu.getTitle(), itemCol, menu.getItemCount(), ms, viewCol.toString(), views.size(), vs); List<String> lines = new ArrayList<String>(); lines.add(message); if (listViews) { for (SMSView v : views) { lines.add(String.format(" " + MessagePager.BULLET + " %s: " + ChatColor.YELLOW + "%s", v.getName(), v.toString())); } } pager.add(lines); } }