From ffc019eb8cd0ff5cfe2696065d0f2ecd06037161 Mon Sep 17 00:00:00 2001 From: Spencer Date: Sat, 30 Dec 2017 21:39:52 -0500 Subject: [PATCH] Finish ListCommand changes --- .../mapparser/command/ListCommand.java | 135 +++++++++++++----- 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java index 75aad6395..7998433f9 100644 --- a/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java +++ b/Plugins/Mineplex.MapParser/src/mineplex/mapparser/command/ListCommand.java @@ -1,6 +1,9 @@ package mineplex.mapparser.command; -import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -17,11 +20,15 @@ import mineplex.mapparser.MapParser; */ public class ListCommand extends BaseCommand { - private boolean _colorSwitch = false; - + //private static final List AUTHOR_ALISES = Arrays.asList("author", "creator", "a"); + private static final List NAME_ALIASES = Arrays.asList("name", "mapname", "title", "n"); + private static final List TYPE_ALIASES = Arrays.asList("type", "game", "gametype", "g"); + public ListCommand(MapParser plugin) { super(plugin, "list"); + + setUsage("/list "); } @Override @@ -36,26 +43,58 @@ public class ListCommand extends BaseCommand for (GameType gameType : GameType.values()) { if (gameType == GameType.InProgress) + { continue; - - if (listMaps(player, gameType, colorSwitch)) + } + + if (listMapsForGameType(player, gameType, colorSwitch)) + { colorSwitch = !colorSwitch; + } } } else if (args.length == 1) { - String input = args[0]; + message(player, F.elem(getUsage())); + } + else + { + String subCommand = args[0].toLowerCase(); - GameType gameType = getGameType(input); - - if (gameType != null) + if (TYPE_ALIASES.contains(subCommand)) { + String input = args[1]; + + GameType gameType = getGameType(input); + + if (gameType == null) + { + getPlugin().sendValidGameTypes(player); + return true; + } + UtilPlayerBase.message(player, F.main("Parser", "Listing Maps for gametype " + F.elem(gameType.GetName()))); - listMaps(player, gameType, false); - return true; + listMapsForGameType(player, gameType, false); } + else + { + String search = Arrays.asList(args).subList(1, args.length).stream().collect(Collectors.joining()); + if (NAME_ALIASES.contains(subCommand)) + { + List mapNames = GameType.getAllMapNames() + .stream() + .filter(n -> n.toLowerCase().contains(search)) + .collect(Collectors.toList()); + message(player, "Listing maps whose name contains " + F.elem(search) + C.mBody + ":"); + message(player, getMapsMessage(mapNames, false)); + } + else + { + message(player, "Invalid sub-command."); + } + } } return true; @@ -83,44 +122,68 @@ public class ListCommand extends BaseCommand return gameType; } - private boolean listMaps(Player player, GameType gameType, boolean colorSwitch) + private String getMapsMessage(List mapNames, boolean colorSwitch) { - String maps = ""; - ChatColor color = ChatColor.AQUA; - if (colorSwitch) - color = ChatColor.GREEN; + StringBuilder maps = new StringBuilder(); + ChatColor color = ChatColor.AQUA; + if (colorSwitch) + color = ChatColor.GREEN; - File mapsFolder = new File("map" + File.separator + gameType.GetName()); - if (!mapsFolder.exists()) - return false; + for (String name : mapNames) + { + maps.append(color).append(name).append(" "); - for (File file : mapsFolder.listFiles()) + if (color == ChatColor.AQUA) + color = ChatColor.DARK_AQUA; + else if (color == ChatColor.DARK_AQUA) + color = ChatColor.AQUA; + else if (color == ChatColor.GREEN) + color = ChatColor.DARK_GREEN; + else color = ChatColor.GREEN; + } + + return maps.toString(); + } + + private boolean listMapsForGameType(Player player, GameType gameType, boolean colorSwitch) + { + List mapNames = gameType.getMapNames(); + + if (mapNames == null) { - if (!file.isDirectory()) - continue; - - maps += color + file.getName() + " "; - - if (color == ChatColor.AQUA) - color = ChatColor.DARK_AQUA; - else if (color == ChatColor.DARK_AQUA) - color = ChatColor.AQUA; - - else if (color == ChatColor.GREEN) - color = ChatColor.DARK_GREEN; - else if (color == ChatColor.DARK_GREEN) - color = ChatColor.GREEN; + return false; } + String maps = getMapsMessage(mapNames, colorSwitch); + // Print line of maps for specific gametype if (maps.length() > 0) { - maps = F.elem(ChatColor.RESET + C.Scramble + "!" + ChatColor.RESET + C.Bold + gameType.name()) + "> " + maps; - player.sendMessage(maps); + player.sendMessage(F.elem(ChatColor.RESET + C.Scramble + "!" + ChatColor.RESET + C.Bold + gameType.name()) + "> " + maps); return true; } return false; } + + public List getAllMapData() + { + List mapNames = GameType.getAllMapNames(); + List mapData = new ArrayList<>(); + + for (String mapName : mapNames) + { + MapData data = getPlugin().getData(mapName); + + if (data == null) + { + continue; + } + + mapData.add(data); + } + + return mapData; + } }