diff options
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util')
4 files changed, 141 insertions, 39 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Board.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Board.java index 9d856b5..6b0c7b5 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Board.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Board.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import net.tylermurphy.hideAndSeek.game.Status; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -25,8 +26,8 @@ import net.tylermurphy.hideAndSeek.Main; public class Board { private List<String> Hider, Seeker, Spectator; - private Map<String, Player> playerList = new HashMap<String,Player>(); - private Map<String, CustomBoard> customBoards = new HashMap<String, CustomBoard>(); + private Map<String, Player> playerList = new HashMap<>(); + private Map<String, CustomBoard> customBoards = new HashMap<>(); public boolean isPlayer(Player player) { return playerList.containsKey(player.getName()); @@ -120,31 +121,9 @@ public class Board { } public void reload() { - Hider = new ArrayList<String>(); - Seeker = new ArrayList<String>(); - Spectator = new ArrayList<String>(); - } - - public void reset() { - Hider.clear(); - Seeker.clear(); - Spectator.clear(); - } - - private void createTeamsForBoard(Scoreboard board) { - Team hiderTeam = board.registerNewTeam("Hider"); - for(String name : Hider) - hiderTeam.addEntry(name); - Team seekerTeam = board.registerNewTeam("Seeker"); - for(String name : Seeker) - seekerTeam.addEntry(name); - if(nametagsVisible) { - hiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OWN_TEAM); - seekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OTHER_TEAMS); - } else { - hiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - seekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - } + Hider = new ArrayList<>(); + Seeker = new ArrayList<>(); + Spectator = new ArrayList<>(); } public void createLobbyBoard(Player player) { @@ -157,12 +136,20 @@ public class Board { board = new CustomBoard(player, "&l&eHIDE AND SEEK"); board.updateTeams(); } - board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER%" + ChatColor.WHITE + getHiderPercent()); - board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER%" + ChatColor.WHITE + getSeekerPercent()); + board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDER %" + ChatColor.WHITE + getHiderPercent()); + board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKER %" + ChatColor.WHITE + getSeekerPercent()); board.addBlank(); board.setLine("players", "Players: " + playerList.values().size()); board.addBlank(); - board.setLine("waiting", "Waiting to start..."); + if(lobbyCountdownEnabled){ + if(Main.plugin.game.countdownTime == -1){ + board.setLine("waiting", "Waiting for players..."); + } else { + board.setLine("waiting", "Starting in: "+ChatColor.GREEN + Main.plugin.game.countdownTime+"s"); + } + } else { + board.setLine("waiting", "Waiting for gamemaster..."); + } board.display(); customBoards.put(player.getName(), board); } @@ -175,38 +162,39 @@ public class Board { CustomBoard board = customBoards.get(player.getName()); if(recreate) { board = new CustomBoard(player, "&l&eHIDE AND SEEK"); + board.updateTeams(); } board.setLine("hiders", ChatColor.BOLD + "" + ChatColor.YELLOW + "HIDERS:" + ChatColor.WHITE + " " + Hider.size()); board.setLine("seekers", ChatColor.BOLD + "" + ChatColor.RED + "SEEKERS:" + ChatColor.WHITE + " " + Seeker.size()); board.addBlank(); if(glowEnabled){ - if(Main.plugin.glow == null || Main.plugin.status.equals("Starting") || !Main.plugin.glow.isRunning()) + if(Main.plugin.game.glow == null || Main.plugin.status == Status.STARTING || !Main.plugin.game.glow.isRunning()) board.setLine("glow", "Glow: " + ChatColor.RED + "Inactive"); else board.setLine("glow", "Glow: " + ChatColor.GREEN + "Active"); } if(tauntEnabled && tauntCountdown){ - if(Main.plugin.taunt == null || Main.plugin.status.equals("Starting")) + if(Main.plugin.game.taunt == null || Main.plugin.status == Status.STARTING) board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "0m0s"); else if(!tauntLast && Hider.size() == 1){ board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Expired"); - } else if(!Main.plugin.taunt.isRunning()) - board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Main.plugin.taunt.getDelay()/60 + "m" + Main.plugin.taunt.getDelay()%60 + "s"); + } else if(!Main.plugin.game.taunt.isRunning()) + board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + Main.plugin.game.taunt.getDelay()/60 + "m" + Main.plugin.game.taunt.getDelay()%60 + "s"); else board.setLine("taunt", "Taunt: " + ChatColor.YELLOW + "Active"); } if(worldborderEnabled){ - if(Main.plugin.worldborder == null || Main.plugin.status.equals("Starting")){ + if(Main.plugin.game.worldborder == null || Main.plugin.status == Status.STARTING){ board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "0m0s"); - } else if(!Main.plugin.worldborder.isRunning()) { - board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + Main.plugin.worldborder.getDelay()/60 + "m" + Main.plugin.worldborder.getDelay()%60 + "s"); + } else if(!Main.plugin.game.worldborder.isRunning()) { + board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + Main.plugin.game.worldborder.getDelay()/60 + "m" + Main.plugin.game.worldborder.getDelay()%60 + "s"); } else { board.setLine("board", "WorldBorder: " + ChatColor.YELLOW + "Decreasing"); } } if(glowEnabled || (tauntEnabled && tauntCountdown) || worldborderEnabled) board.addBlank(); - board.setLine("time", "Time Left: " + ChatColor.GREEN + Main.plugin.timeLeft/60 + "m" + Main.plugin.timeLeft%60 + "s"); + board.setLine("time", "Time Left: " + ChatColor.GREEN + Main.plugin.game.timeLeft/60 + "m" + Main.plugin.game.timeLeft%60 + "s"); board.addBlank(); board.setLine("team", "Team: " + getTeam(player)); board.display(); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java new file mode 100644 index 0000000..56084dd --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/CommandHandler.java @@ -0,0 +1,73 @@ +package net.tylermurphy.hideAndSeek.util; + +import static net.tylermurphy.hideAndSeek.configuration.Config.*; +import static net.tylermurphy.hideAndSeek.configuration.Localization.*; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import net.tylermurphy.hideAndSeek.command.*; + +public class CommandHandler { + + public static Map<String,ICommand> COMMAND_REGISTER = new LinkedHashMap<String,ICommand>(); + + private static void registerCommand(ICommand command) { + if(!COMMAND_REGISTER.containsKey(command.getLabel())) { + COMMAND_REGISTER.put(command.getLabel().toLowerCase(), command); + } + } + + public static void registerCommands() { + registerCommand(new About()); + registerCommand(new Help()); + registerCommand(new Setup()); + registerCommand(new Start()); + registerCommand(new Stop()); + registerCommand(new SetSpawnLocation()); + registerCommand(new SetLobbyLocation()); + registerCommand(new SetExitLocation()); + registerCommand(new SetBorder()); + registerCommand(new Reload()); + registerCommand(new SaveMap()); + registerCommand(new SetBounds()); + registerCommand(new Join()); + registerCommand(new Leave()); + } + + public static boolean handleCommand(CommandSender sender, Command cmd, String label, String[] args) { + if(sender instanceof Player == false) { + sender.sendMessage(errorPrefix + message("COMMAND_PLAYER_ONLY")); + } else if(args.length < 1 || !COMMAND_REGISTER.containsKey(args[0].toLowerCase()) ) { + if(permissionsRequired && !sender.hasPermission("hideandseek.about")) { + sender.sendMessage(errorPrefix + LOCAL.get("")); + } else { + COMMAND_REGISTER.get("about").execute(sender, null); + } + } else { + if(!args[0].toLowerCase().equals("about") && !args[0].toLowerCase().equals("help") && SaveMap.runningBackup) { + sender.sendMessage(errorPrefix + message("MAPSAVE_INPROGRESS")); + } else if(permissionsRequired && !sender.hasPermission("hideandseek."+args[0].toLowerCase())) { + sender.sendMessage(errorPrefix + message("COMMAND_NOT_ALLOWED")); + } else { + try { + COMMAND_REGISTER.get(args[0].toLowerCase()).execute(sender,Arrays.copyOfRange(args, 1, args.length)); + } catch (Exception e) { + sender.sendMessage(errorPrefix + "An error has occured."); + e.printStackTrace(); + } + } + } + return true; + } + + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + return CommandHandler.handleCommand(sender, command, label, args); + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java b/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java new file mode 100644 index 0000000..667f597 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/TabCompleter.java @@ -0,0 +1,41 @@ +package net.tylermurphy.hideAndSeek.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.stream.Collectors; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class TabCompleter{ + + public static List<String> handleTabComplete(CommandSender sender, Command command, String label, String[] args) { + if(args.length == 1) { + return new ArrayList<String>(CommandHandler.COMMAND_REGISTER.keySet()) + .stream() + .filter(handle -> sender.hasPermission("hideandseek."+handle.toLowerCase()) && handle.toLowerCase().startsWith(args[0].toLowerCase(Locale.ROOT))) + .collect(Collectors.toList()); + } else if(args.length > 1) { + if(!CommandHandler.COMMAND_REGISTER.containsKey(args[0].toLowerCase())) { + return null; + } else { + String[] usage = CommandHandler.COMMAND_REGISTER.get(args[0].toLowerCase()).getUsage().split(" "); + if(args.length - 2 < usage.length) { + String parameter = usage[args.length-2]; + if(parameter.equals("<player>")) { + return null; + } else { + List<String> temp = new ArrayList<String>(); + temp.add(parameter.replace("<", "").replace(">", "")); + return temp; + } + } else { + return null; + } + } + } + return null; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Util.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Util.java index c24936b..f3bee71 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Util.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Util.java @@ -45,7 +45,7 @@ public class Util { public static void sendDelayedMessage(String message, int gameId, int delay) { Bukkit.getScheduler().runTaskLaterAsynchronously(Main.plugin, new Runnable() { public void run() { - if(gameId == Main.plugin.gameId) + if(gameId == Main.plugin.game.gameId) Util.broadcastMessage(message); } }, delay); |