From 763cf8dbda743f3cfecd2c316341d65325d4e34b Mon Sep 17 00:00:00 2001 From: Moo0 Date: Sun, 8 May 2011 18:44:08 +0100 Subject: [PATCH 1/2] Add ability to filter '/region list' by user. --- .../bukkit/commands/RegionCommands.java | 62 +++++++++++++++---- 1 file changed, 51 insertions(+), 11 deletions(-) mode change 100644 => 100755 src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java diff --git a/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java b/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java old mode 100644 new mode 100755 index 4909334b..43d2d40e --- a/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java @@ -437,22 +437,40 @@ public static void info(CommandContext args, WorldGuardPlugin plugin, } @Command(aliases = {"list"}, - usage = "[page] [world]", + usage = "[.player] [page] [world]", desc = "Get a list of regions", - flags = "", min = 0, max = 2) - @CommandPermissions({"worldguard.region.list"}) + flags = "", min = 0, max = 3) +// @CommandPermissions({"worldguard.region.list"}) public static void list(CommandContext args, WorldGuardPlugin plugin, CommandSender sender) throws CommandException { World world; int page = 0; + int argl = 0; + String name = ""; + boolean own = false; + LocalPlayer localPlayer = null; - if (args.argsLength() > 0) { - page = Math.max(0, args.getInteger(0) - 1); + if (args.argsLength() > 0 && args.getString(0).startsWith(".")) { + name = args.getString(0).substring(1).toLowerCase(); + argl = 1; + if (name.equals("me") || name.isEmpty() || + name.equals(plugin.checkPlayer(sender).getDisplayName().toLowerCase())) { + plugin.checkPermission(sender, "worldguard.region.list.own"); + name = plugin.checkPlayer(sender).getDisplayName().toLowerCase(); + localPlayer = plugin.wrapPlayer(plugin.checkPlayer(sender)); + own = true; + } + } + if (!own) + plugin.checkPermission(sender, "worldguard.region.list"); + + if (args.argsLength() > 0 + argl) { + page = Math.max(0, args.getInteger(0 + argl) - 1); } - if (args.argsLength() > 1) { - world = plugin.matchWorld(sender, args.getString(1)); + if (args.argsLength() > 1 + argl) { + world = plugin.matchWorld(sender, args.getString(1 + argl)); } else { world = plugin.checkPlayer(sender).getWorld(); } @@ -461,18 +479,40 @@ public static void list(CommandContext args, WorldGuardPlugin plugin, RegionManager mgr = plugin.getGlobalRegionManager().get(world); Map regions = mgr.getRegions(); + int size = regions.size(); - int pages = (int) Math.ceil(size / (float) listSize); String[] regionIDList = new String[size]; int index = 0; for (String id : regions.keySet()) { - regionIDList[index] = id; - index++; + boolean show = false; + if (name.isEmpty()) { + show = true; + } + else { + if (own) { + if (regions.get(id).isOwner(localPlayer)) { + show = true; + } + } + else { + if (regions.get(id).getOwners().getPlayers().contains(name)) + show = true; + } + } + if (show) { + regionIDList[index] = id; + index++; + } } + if (!name.isEmpty()) + regionIDList = Arrays.copyOf(regionIDList, index); Arrays.sort(regionIDList); + size = index; + int pages = (int) Math.ceil(size / (float) listSize); - sender.sendMessage(ChatColor.RED + "Regions (page " + sender.sendMessage(ChatColor.RED + + (name == "" ? "Regions (page " : "Regions for " + name + " (page ") + (page + 1) + " of " + pages + "):"); if (page < pages) { From 943bbd9889bd939dfcff4207a1145a6de0cca58b Mon Sep 17 00:00:00 2001 From: Moo0 Date: Sun, 8 May 2011 18:55:48 +0100 Subject: [PATCH 2/2] Show regions user is member of, as well as those user is owner of. --- .../bukkit/commands/RegionCommands.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java b/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java index 43d2d40e..5de12dbc 100755 --- a/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/commands/RegionCommands.java @@ -484,8 +484,11 @@ public static void list(CommandContext args, WorldGuardPlugin plugin, String[] regionIDList = new String[size]; int index = 0; + boolean show = false; + String prefix = ""; for (String id : regions.keySet()) { - boolean show = false; + show = false; + prefix = ""; if (name.isEmpty()) { show = true; } @@ -493,15 +496,26 @@ public static void list(CommandContext args, WorldGuardPlugin plugin, if (own) { if (regions.get(id).isOwner(localPlayer)) { show = true; + prefix += "+"; + } + else if (regions.get(id).isMember(localPlayer)) { + show = true; + prefix += "-"; } } else { - if (regions.get(id).getOwners().getPlayers().contains(name)) + if (regions.get(id).getOwners().getPlayers().contains(name)) { show = true; + prefix += "+"; + } + if (regions.get(id).getMembers().getPlayers().contains(name)) { + show = true; + prefix += "-"; + } } } if (show) { - regionIDList[index] = id; + regionIDList[index] = prefix + " " + id; index++; } } @@ -521,7 +535,7 @@ public static void list(CommandContext args, WorldGuardPlugin plugin, break; } sender.sendMessage(ChatColor.YELLOW.toString() + (i + 1) + - ". " + regionIDList[i]); + "." + regionIDList[i]); } } }