From 23e3beedf6d814016b39eddcaafe2cd0d9e03c3e Mon Sep 17 00:00:00 2001 From: aPunch Date: Wed, 29 Feb 2012 07:05:25 -0600 Subject: [PATCH] added list command --- .../command/command/NPCCommands.java | 69 +++++++++++++++++-- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index cf10a825d..bfc3842f0 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -1,5 +1,8 @@ package net.citizensnpcs.command.command; +import java.util.ArrayList; +import java.util.List; + import net.citizensnpcs.Citizens; import net.citizensnpcs.Settings.Setting; import net.citizensnpcs.api.npc.NPC; @@ -17,6 +20,7 @@ import net.citizensnpcs.command.exception.NoPermissionsException; import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.trait.LookClose; import net.citizensnpcs.util.Messaging; +import net.citizensnpcs.util.Paginator; import net.citizensnpcs.util.StringHelper; import org.bukkit.ChatColor; @@ -72,7 +76,7 @@ public class NPCCommands { if (args.hasValueFlag("char")) { String character = args.getFlag("char").toLowerCase(); if (characterManager.getInstance(character, create) == null) { - Messaging.sendError(player, "The character '" + args.getFlag("char") + "' does not exist. " + Messaging.sendError(player, "'" + args.getFlag("char") + "' is not a valid character. " + create.getName() + " was created at your location without a character."); success = false; } else { @@ -285,14 +289,69 @@ public class NPCCommands { @Command( aliases = { "npc" }, - usage = "list (--type (type) --char (char)", + usage = "list (page) (--owner (owner) --type (type) --char (char))", desc = "List NPCs", modifiers = { "list" }, - min = 2, - max = 5, + min = 1, + max = 2, permission = "npc.list") @Requirements - public void list(CommandContext args, Player player, NPC npc) { + public void list(CommandContext args, Player player, NPC npc) throws CommandException { + List npcs = new ArrayList(); + if (args.getValueFlags().size() == 0 && args.argsLength() == 1 || args.argsLength() == 2) { + for (NPC add : npcManager) + if (add.getTrait(Owner.class).getOwner().equalsIgnoreCase(player.getName())) + npcs.add(add); + } else { + if (args.hasValueFlag("owner")) { + String name = args.getFlag("owner"); + for (NPC add : npcManager) + if (add.getTrait(Owner.class).getOwner().equalsIgnoreCase(name)) + npcs.add(add); + } + + if (args.hasValueFlag("type")) { + String type = args.getFlag("type"); + try { + EntityType.valueOf(type.toUpperCase().replace('-', '_')); + } catch (IllegalArgumentException ex) { + throw new CommandException("'" + type + "' is not a valid mob type."); + } + + for (NPC add : npcManager) + if (!npcs.contains(add) && add.getTrait(MobType.class).getType().equalsIgnoreCase(type)) + npcs.add(add); + } + + if (args.hasValueFlag("char")) { + String character = args.getFlag("char"); + if (characterManager.getInstance(character) == null) + throw new CommandException("'" + character + "' is not a valid character."); + + for (NPC add : npcManager.getNPCs(characterManager.getInstance(character).getClass())) + if (!npcs.contains(add) && add.getCharacter() != null + && add.getCharacter().getName().equals(character.toLowerCase())) + npcs.add(add); + } + } + + Paginator paginator = new Paginator(); + paginator.setHeaderText("NPCs"); + paginator.addLine("Key: ID Name"); + for (int i = 0; i < npcs.size(); i += 2) {// 0,2,4,6,etc, size=3 + String line = "" + npcs.get(i).getId() + " " + npcs.get(i).getName(); + if (npcs.size() >= i + 2) + line += " " + "" + npcs.get(i + 1).getId() + " " + npcs.get(i + 1).getName(); + paginator.addLine(line); + } + + int page = 1; + try { + page = args.getInteger(1); + } catch (Exception ex) { + } + if (!paginator.sendPage(player, page)) + throw new CommandException("The page '" + page + "' does not exist."); } } \ No newline at end of file