diff --git a/pom.xml b/pom.xml index 85bc166..93b6b6a 100644 --- a/pom.xml +++ b/pom.xml @@ -1,34 +1,43 @@ - - 4.0.0 - net.tylermurphy - HideAndSeek - 1.0.0 - Hide and Seek Plugin - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - - +4.0.0 + net.tylermurphy + HideAndSeek + 1.2.0 + Hide and Seek Plugin + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.8 + 1.8 + + + + + - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/public/ + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/public/ - - - - org.spigotmc - spigot-api - 1.17.1-R0.1-SNAPSHOT - jar - provided - + + dmulloy2-repo + https://repo.dmulloy2.net/repository/public/ + + + + + org.spigotmc + spigot-api + 1.17.1-R0.1-SNAPSHOT + jar + provided + + + com.comphenix.protocol + ProtocolLib + 4.7.0 + \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/CommandManager.java b/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java similarity index 76% rename from src/main/java/net/tylermurphy/hideAndSeek/manager/CommandManager.java rename to src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java index b50247a..2703145 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/CommandManager.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java @@ -1,20 +1,24 @@ -package net.tylermurphy.hideAndSeek.manager; +package net.tylermurphy.hideAndSeek; import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map; import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.tylermurphy.hideAndSeek.ICommand; -import net.tylermurphy.hideAndSeek.commands.*; +import net.tylermurphy.hideAndSeek.commands.About; +import net.tylermurphy.hideAndSeek.commands.Help; +import net.tylermurphy.hideAndSeek.commands.SetBorder; +import net.tylermurphy.hideAndSeek.commands.SetSpawnLocation; +import net.tylermurphy.hideAndSeek.commands.Start; +import net.tylermurphy.hideAndSeek.commands.Stop; +import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; -public class CommandManager implements CommandExecutor { +public class CommandHandler { public static Map COMMAND_REGISTER = new LinkedHashMap(); @@ -29,10 +33,8 @@ public class CommandManager implements CommandExecutor { registerCommand(new Help()); registerCommand(new Start()); registerCommand(new Stop()); - registerCommand(new SetSeeker()); registerCommand(new SetSpawnLocation()); registerCommand(new SetBorder()); - registerCommand(new EnableBorder()); } public static boolean handleCommand(CommandSender sender, Command cmd, String label, String[] args) { @@ -54,7 +56,7 @@ public class CommandManager implements CommandExecutor { } public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - return CommandManager.handleCommand(sender, command, label, args); + return CommandHandler.handleCommand(sender, command, label, args); } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java b/src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java new file mode 100644 index 0000000..778850f --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java @@ -0,0 +1,36 @@ +package net.tylermurphy.hideAndSeek; + +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; + +public class CommandTabCompleter{ + + public static List handleTabComplete(CommandSender sender, Command command, String label, String[] args) { + if(args.length == 1) { + return new ArrayList(CommandHandler.COMMAND_REGISTER.keySet()); + } 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("")) { + return null;//playerList.values().stream().map(p -> p.getName()).collect(Collectors.toList()); + } else { + List temp = new ArrayList(); + temp.add(parameter.replace("<", "").replace(">", "")); + return temp; + } + } else { + return null; + } + } + } + return null; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java index d35ece8..508f4d1 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -2,6 +2,8 @@ package net.tylermurphy.hideAndSeek; import static net.tylermurphy.hideAndSeek.Store.*; +import java.util.List; + import org.bukkit.Bukkit; import org.bukkit.command.Command; @@ -11,22 +13,19 @@ import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.util.Vector; -import net.tylermurphy.hideAndSeek.manager.BoardManager; -import net.tylermurphy.hideAndSeek.manager.CommandManager; -import net.tylermurphy.hideAndSeek.manager.EventManager; -import net.tylermurphy.hideAndSeek.manager.TickManager; +import net.tylermurphy.hideAndSeek.events.EventListener; +import net.tylermurphy.hideAndSeek.events.EventTick; public class Main extends JavaPlugin implements Listener { public static Main plugin; - private int tickTaskId; public void onEnable() { plugin = this; // Setup Initial Player Count - getServer().getPluginManager().registerEvents(new EventManager(), this); + getServer().getPluginManager().registerEvents(new EventListener(), this); for (Player player : Bukkit.getServer().getOnlinePlayers()) { playerList.put(player.getName(), player); } @@ -45,38 +44,32 @@ public class Main extends JavaPlugin implements Listener { } worldborderEnabled = getConfig().getBoolean("borderEnabled"); - // Init Gamerules - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule sendCommandFeedback false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule doImmediateRespawn true"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule logAdminCommands false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule naturalRegeneration false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule keepInventory true"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule showDeathMessages false"); - // Register Commands - CommandManager.registerCommands(); - - // Init Scoreboard - if(Bukkit.getScoreboardManager() != null) { - BoardManager.loadScoreboard(); - } + CommandHandler.registerCommands(); // Start Tick Timer - tickTaskId = Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){ + Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){ public void run(){ - TickManager.onTick(); + try{ + EventTick.onTick(); + } catch (Exception e) { + e.printStackTrace(); + } } - },0,1).getTaskId(); + },0,1); } public void onDisable() { - Bukkit.getServer().getScheduler().cancelTask(tickTaskId); saveConfig(); } public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { - return CommandManager.handleCommand(sender, cmd, label, args); + return CommandHandler.handleCommand(sender, cmd, label, args); + } + + public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + return CommandTabCompleter.handleTabComplete(sender, command, label, args); } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Store.java b/src/main/java/net/tylermurphy/hideAndSeek/Store.java index 05122b3..85cef2a 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Store.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Store.java @@ -1,33 +1,37 @@ package net.tylermurphy.hideAndSeek; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; +import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.scoreboard.Scoreboard; import org.bukkit.scoreboard.Team; import org.bukkit.util.Vector; -import net.md_5.bungee.api.ChatColor; - public class Store { public static Map playerList = new HashMap(); - public static List loadedPlayers = new ArrayList(); - public static Scoreboard board; + + public static Scoreboard board; public static Team Hider,Seeker,Spectator; + public static String status = "Setup"; + public static String messagePrefix = String.format("%sHide and Seek > %s", ChatColor.BLUE, ChatColor.WHITE); public static String errorPrefix = String.format("%sError > %s", ChatColor.RED, ChatColor.WHITE); - public static Vector spawnPosition,worldborderPosition; + + public static Vector spawnPosition; + + public static Vector worldborderPosition; public static int worldborderSize,worldborderDelay,currentWorldborderSize; public static boolean worldborderEnabled = false, decreaseBorder = false; + public static String tauntPlayer = ""; - public static HashMap playerData = new HashMap(); - public static int startTaskId; + + public static int glowTime = 0; + public static int gameId = 0; public static FileConfiguration getConfig() { @@ -38,20 +42,4 @@ public class Store { Main.plugin.saveConfig(); } - public static int getPlayerData(String playerName, String key) { - if(playerData.get(playerName + " " + key) == null) { - return 0; - } else { - return playerData.get(playerName + " " + key); - } - } - - public static void setPlayerData(String playerName, String key, int value) { - playerData.put(playerName + " " + key, value); - } - - public static void resetPlayerData(String playerName, boolean giveItems) { - playerData.put(playerName+" Death", 0); - playerData.put(playerName+" GiveStatus", (giveItems) ? 1 : 0); - } -} +} \ No newline at end of file diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java index 91cc430..c500dd6 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java @@ -3,13 +3,13 @@ package net.tylermurphy.hideAndSeek.commands; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import net.tylermurphy.hideAndSeek.ICommand; +import net.tylermurphy.hideAndSeek.util.ICommand; public class About implements ICommand { public void execute(CommandSender sender, String[] args) { sender.sendMessage( - String.format("%s%sHide and Seek %s(1.0.0%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) + + String.format("%s%sHide and Seek %s(1.2.0%s)\n", ChatColor.AQUA, ChatColor.BOLD, ChatColor.GRAY,ChatColor.WHITE,ChatColor.GRAY) + String.format("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) + String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE) ); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java deleted file mode 100644 index 6c925e2..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java +++ /dev/null @@ -1,49 +0,0 @@ -package net.tylermurphy.hideAndSeek.commands; - -import org.bukkit.command.CommandSender; - -import net.tylermurphy.hideAndSeek.ICommand; -import net.tylermurphy.hideAndSeek.manager.WorldborderManager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -public class EnableBorder implements ICommand { - - public void execute(CommandSender sender, String[] args) { - if(!status.equals("Standby") && !status.equals("Setup")) { - sender.sendMessage(errorPrefix + "Game is currently in session"); - return; - } - if(worldborderPosition == null) { - sender.sendMessage(errorPrefix + "Please setup worldborder info before enabling"); - return; - } - boolean bool; - try { bool = Boolean.parseBoolean(args[0]); } catch (Exception e) { - sender.sendMessage(errorPrefix + "Please enter true or false"); - return; - } - if(spawnPosition != null && worldborderPosition != null && spawnPosition.distance(worldborderPosition) > 100) { - sender.sendMessage(errorPrefix + "Cannot enable worldborder, spawn position is outside 100 blocks from worldborder"); - return; - } - sender.sendMessage(messagePrefix + "Set worldborder to "+args[0]); - getConfig().set("borderEnabled", bool); - worldborderEnabled = bool; - saveConfig(); - WorldborderManager.reset(); - } - - public String getLabel() { - return "enableBorder"; - } - - public String getUsage() { - return ""; - } - - public String getDescription() { - return "Enables or disables worldborder"; - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java index 1839e41..a74464e 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java @@ -3,14 +3,14 @@ package net.tylermurphy.hideAndSeek.commands; import org.bukkit.command.CommandSender; import net.md_5.bungee.api.ChatColor; -import net.tylermurphy.hideAndSeek.ICommand; -import net.tylermurphy.hideAndSeek.manager.CommandManager; +import net.tylermurphy.hideAndSeek.CommandHandler; +import net.tylermurphy.hideAndSeek.util.ICommand; public class Help implements ICommand { public void execute(CommandSender sender, String[] args) { String message = ""; - for(ICommand command : CommandManager.COMMAND_REGISTER.values()) { + for(ICommand command : CommandHandler.COMMAND_REGISTER.values()) { message += String.format("%s/hs %s%s %s%s\n %s%s%s", ChatColor.AQUA, ChatColor.WHITE, command.getLabel().toLowerCase(), ChatColor.BLUE, command.getUsage(), ChatColor.GRAY, ChatColor.ITALIC, command.getDescription()+"\n"); } message = message.substring(0, message.length()-2); diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java index 6482c45..a485c91 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java @@ -4,8 +4,8 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import net.tylermurphy.hideAndSeek.ICommand; -import net.tylermurphy.hideAndSeek.manager.WorldborderManager; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; @@ -21,7 +21,11 @@ public class SetBorder implements ICommand { return; } if(args.length < 2) { - sender.sendMessage(errorPrefix + "Please enter worldborder size and delay"); + getConfig().set("borderEnabled", false); + worldborderEnabled = false; + saveConfig(); + sender.sendMessage(messagePrefix + "Disabled worldborder."); + Functions.resetWorldborder(); return; } int num,delay; @@ -53,8 +57,10 @@ public class SetBorder implements ICommand { getConfig().set("borderPosition", newWorldborderPosition); getConfig().set("borderSize", num); getConfig().set("borderDelay", delay); + getConfig().set("borderEnabled", false); + worldborderEnabled = true; saveConfig(); - WorldborderManager.reset(); + Functions.resetWorldborder(); } public String getLabel() { @@ -66,7 +72,7 @@ public class SetBorder implements ICommand { } public String getDescription() { - return "Sets worldboarder's center location, size in blocks, and delay in minutes"; + return "Sets worldboarder's center location, size in blocks, and delay in minutes per shrink. Add no arguments to disable."; } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java deleted file mode 100644 index 5a2fc4b..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java +++ /dev/null @@ -1,47 +0,0 @@ -package net.tylermurphy.hideAndSeek.commands; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import net.tylermurphy.hideAndSeek.ICommand; - -public class SetSeeker implements ICommand { - - public void execute(CommandSender sender, String[] args) { - if(!status.equals("Standby") && !status.equals("Setup")) { - sender.sendMessage(errorPrefix + "Game is currently in session"); - return; - } - String playerName; - if(args.length < 1) { - playerName = sender.getName(); - } else { - playerName = args[0]; - } - Player player = playerList.get(playerName); - if(player == null) { - sender.sendMessage(errorPrefix + "Invalid player: " + playerName); - return; - } - for(Player temp : playerList.values()) { - Hider.addEntry(temp.getName()); - } - Seeker.addEntry(player.getName()); - sender.sendMessage(String.format("%s Set %s as the seaker.", messagePrefix, playerName)); - } - - public String getLabel() { - return "setSeeker"; - } - - public String getUsage() { - return ""; - } - - public String getDescription() { - return "Sets the current or select player as the seeker"; - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java index 821d469..48a8d60 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java @@ -1,11 +1,10 @@ package net.tylermurphy.hideAndSeek.commands; -import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.util.Vector; -import net.tylermurphy.hideAndSeek.ICommand; +import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; @@ -26,8 +25,8 @@ public class SetSpawnLocation implements ICommand { sender.sendMessage(messagePrefix + "Set spawn position to current location"); getConfig().set("spawnPosition", newSpawnPosition); saveConfig(); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("setworldspawn %s %s %s", player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ())); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("spawnpoint @a %s %s %s", player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ())); +// Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("setworldspawn %s %s %s", player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ())); +// Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("spawnpoint @a %s %s %s", player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ())); } public String getLabel() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java index 5bf1c13..45797b8 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java @@ -9,14 +9,13 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import net.tylermurphy.hideAndSeek.ICommand; import net.tylermurphy.hideAndSeek.Main; -import net.tylermurphy.hideAndSeek.manager.TauntManager; -import net.tylermurphy.hideAndSeek.manager.WorldborderManager; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; -import java.util.HashMap; +import java.util.Random; public class Start implements ICommand { @@ -29,24 +28,28 @@ public class Start implements ICommand { sender.sendMessage(errorPrefix + "Game is already in session"); return; } - if(Hider.getSize() < 1) { - sender.sendMessage(errorPrefix + "No Hiders were found"); + if(playerList.size() < 2) { + sender.sendMessage(errorPrefix + "You must have at least 2 players to start"); return; } - if(Seeker.getSize() < 1) { - sender.sendMessage(errorPrefix + "No Seekers were found"); - return; - } - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule sendCommandFeedback false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule doImmediateRespawn true"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule logAdminCommands false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule naturalRegeneration false"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule keepInventory true"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "gamerule showDeathMessages false"); - playerData = new HashMap(); + String seekerName; + if(args.length < 1) { + seekerName = playerList.values().stream().skip(new Random().nextInt(playerList.values().size())).findFirst().get().getName(); + } else { + seekerName = args[0]; + } + Player seeker = playerList.get(seekerName); + if(seeker == null) { + sender.sendMessage(errorPrefix + "Invalid player: " + seekerName); + return; + } + for(Player temp : playerList.values()) { + Hider.addEntry(temp.getName()); + } + Seeker.addEntry(seeker.getName()); + for(Player player : playerList.values()) { - resetPlayerData(player.getName(),true); player.getInventory().clear(); player.setGameMode(GameMode.ADVENTURE); player.teleport(new Location(player.getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); @@ -54,7 +57,7 @@ public class Start implements ICommand { player.removePotionEffect(effect.getType()); } } - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("spawnpoint @a %s %s %s", spawnPosition.getBlockX(), spawnPosition.getBlockY(), spawnPosition.getBlockZ())); + //Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("spawnpoint @a %s %s %s", spawnPosition.getBlockX(), spawnPosition.getBlockY(), spawnPosition.getBlockZ())); for(String playerName : Seeker.getEntries()) { Player player = playerList.get(playerName); if(player != null) { @@ -68,40 +71,68 @@ public class Start implements ICommand { player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false)); } } - WorldborderManager.reset(); + Functions.resetWorldborder(); status = "Starting"; - startTaskId = Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ + int temp = gameId; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 30 seconds to hide!"); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { public void run() { - int temp = gameId; - Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 30 seconds to hide!"); - try { Thread.sleep(10*1000); } catch (InterruptedException e) {} if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 20 seconds to hide!"); - try { Thread.sleep(10*1000); } catch (InterruptedException e) {} + } + }, 20 * 10); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 10 seconds to hide!"); - try { Thread.sleep(5*1000); } catch (InterruptedException e) {} + } + }, 20 * 20); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 5 seconds to hide!"); - try { Thread.sleep(2*1000); } catch (InterruptedException e) {} + } + }, 20 * 25); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 3 seconds to hide!"); - try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + } + }, 20 * 27); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 2 seconds to hide!"); - try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + } + }, 20 * 28); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 1 seconds to hide!"); - try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + } + }, 20 * 29); + + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { if(temp != gameId) return; Bukkit.getServer().broadcastMessage(messagePrefix + "Attetion SEEKERS, its time to find the hiders!"); status = "Playing"; + for(Player player : playerList.values()) { + Functions.resetPlayer(player); + } } - }).getTaskId(); + }, 20 * 30); + if(worldborderEnabled) { - WorldborderManager.schedule(); + Functions.scheduleWorldborder(); } - TauntManager.schedule(); + Functions.scheduleTaunt(); } public String getLabel() { @@ -109,11 +140,11 @@ public class Start implements ICommand { } public String getUsage() { - return ""; + return ""; } public String getDescription() { - return "Starts the game"; + return "Starts the game either with a random seeker or chosen one"; } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java index b4ccca4..1c31ccd 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java @@ -10,14 +10,15 @@ import org.bukkit.entity.Player; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import net.tylermurphy.hideAndSeek.ICommand; -import net.tylermurphy.hideAndSeek.manager.WorldborderManager; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.ICommand; public class Stop implements ICommand { public void execute(CommandSender sender, String[] args) { if(status.equals("Starting") || status.equals("Playing")) { - onStop(true); + Bukkit.broadcastMessage(messagePrefix + "Game has been force stopped."); + onStop(); } else { sender.sendMessage(errorPrefix + "There is no game in progress"); @@ -29,15 +30,10 @@ public class Stop implements ICommand { return "stop"; } - public static void onStop(boolean forced) { + public static void onStop() { if(status.equals("Standby") || status.equals("Setup")) return; - if(forced) { - Bukkit.broadcastMessage(messagePrefix + "Game has been force stopped."); - } else { - Bukkit.broadcastMessage(messagePrefix + "Game over! All hiders have been found."); - } status = "Standby"; - Bukkit.getServer().getScheduler().cancelTask(startTaskId); + gameId++; for(Player player : playerList.values()) { player.setGameMode(GameMode.ADVENTURE); Hider.addEntry(player.getName()); @@ -47,9 +43,11 @@ public class Stop implements ICommand { player.removePotionEffect(effect.getType()); } player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100)); + for(Player temp : playerList.values()) { + Functions.setGlow(player, temp, false); + } } - WorldborderManager.reset(); - gameId++; + Functions.resetWorldborder(); } public String getUsage() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java new file mode 100644 index 0000000..7c095b1 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java @@ -0,0 +1,115 @@ +package net.tylermurphy.hideAndSeek.events; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.attribute.Attribute; +import org.bukkit.entity.Player; +import org.bukkit.entity.Snowball; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.event.entity.ProjectileLaunchEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.potion.PotionEffect; + +import net.md_5.bungee.api.ChatColor; +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.util.Functions; + +public class EventListener implements Listener { + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + if(status.equals("Playing") || status.equals("Starting")) { + Spectator.addEntry(event.getPlayer().getName()); + event.getPlayer().sendMessage(messagePrefix + "You have joined mid game, and thus have been placed on the spectator team."); + event.getPlayer().setGameMode(GameMode.SPECTATOR); + event.getPlayer().getInventory().clear(); + for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){ + event.getPlayer().removePotionEffect(effect.getType()); + } + event.getPlayer().teleport(new Location(event.getPlayer().getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } else if(status.equals("Setup") || status.equals("Standby")) { + Hider.addEntry(event.getPlayer().getName()); + } + playerList.put(event.getPlayer().getName(), event.getPlayer()); + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + playerList.remove(event.getPlayer().getName()); + Hider.removeEntry(event.getPlayer().getName()); + Seeker.removeEntry(event.getPlayer().getName()); + Spectator.removeEntry(event.getPlayer().getName()); + } + + @EventHandler + public void onPlayerDamage(EntityDamageEvent event) { + if(event.getEntity() instanceof Player) { + if(!status.equals("Playing")) { + event.setCancelled(true); + return; + } + Player player = (Player) event.getEntity(); + if(player.getHealth()-event.getDamage() < 0) { + if(spawnPosition == null) return; + event.setCancelled(true); + player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); + player.teleport(new Location(player.getWorld(), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); + Functions.playSound(player, Sound.ENTITY_PLAYER_DEATH, 1, 1); + if(Hider.hasEntry(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s has died and become a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE)); + } + if(Seeker.hasEntry(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s has been beat by a hider", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE)); + } + Seeker.addEntry(player.getName()); + Functions.resetPlayer(player); + } + } + + } + + @EventHandler + public void onProjectile(ProjectileLaunchEvent event) { + if(!status.equals("Playing")) return; + if(event.getEntity() instanceof Snowball) { + Snowball snowball = (Snowball) event.getEntity(); + if(snowball.getShooter() instanceof Player) { + Player player = (Player) snowball.getShooter(); + if(Hider.hasEntry(player.getName())) { + glowTime++; + snowball.remove(); + player.getInventory().remove(Material.SNOWBALL); + int temp = gameId; + Bukkit.getServer().getScheduler().runTaskLater(Main.plugin, new Runnable() { + public void run() { + if(temp != gameId) return; + glowTime--; + } + }, 20 * 30); + } + } + } + } + + @EventHandler + public void onFoodLevelChange(FoodLevelChangeEvent event) { + event.setCancelled(true); + } + + @EventHandler + public void onPlayerRegainHealth(EntityRegainHealthEvent event) { + if(event.getRegainReason() == RegainReason.SATIATED || event.getRegainReason() == RegainReason.REGEN) + event.setCancelled(true); + } +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java b/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java new file mode 100644 index 0000000..a0bf36a --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java @@ -0,0 +1,139 @@ +package net.tylermurphy.hideAndSeek.events; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldBorder; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Firework; +import org.bukkit.entity.Player; +import org.bukkit.inventory.meta.FireworkMeta; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import net.tylermurphy.hideAndSeek.commands.Stop; +import net.tylermurphy.hideAndSeek.util.Functions; + +public class EventTick { + + static int tick = 0; + + public static void onTick() { + + if(board == null) { + Functions.loadScoreboard(); + } + + Functions.emptyOfflinePlayers(); + + if(status.equals("Starting")) { + onStarting(); + } else if(status.equals("Playing")) { + onPlaying(); + } + + tick ++; + + if(( status.equals("Starting") || status.equals("Playing") ) && Hider.getSize() < 1) { + Bukkit.broadcastMessage(messagePrefix + "Game over! All hiders have been found."); + Stop.onStop(); + } + if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.getSize() < 1) { + Bukkit.broadcastMessage(messagePrefix + "Game has ended as all seekers have quit."); + Stop.onStop(); + } + } + + private static void onStarting() { + for(String playerName : Seeker.getEntries()) { + Player player = playerList.get(playerName); + if(player != null) { + player.teleport(new Location(player.getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } + } + } + + private static void onPlaying() { + if(decreaseBorder) { + World world = Bukkit.getWorld("world"); + WorldBorder border = world.getWorldBorder(); + border.setSize(border.getSize()-100,30); + decreaseBorder = false; + } + if(!tauntPlayer.equals("")) { + Player taunted = playerList.get(tauntPlayer); + if(taunted != null) { + Firework fw = (Firework) taunted.getLocation().getWorld().spawnEntity(taunted.getLocation(), EntityType.FIREWORK); + FireworkMeta fwm = fw.getFireworkMeta(); + fwm.setPower(4); + fwm.addEffect(FireworkEffect.builder() + .withColor(Color.BLUE) + .withColor(Color.RED) + .withColor(Color.YELLOW) + .with(FireworkEffect.Type.STAR) + .with(FireworkEffect.Type.BALL) + .with(FireworkEffect.Type.BALL_LARGE) + .flicker(true) + .withTrail() + .build()); + fw.setFireworkMeta(fwm); + Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + "Taunt >" + ChatColor.WHITE + " Taunt has been activated"); + } + tauntPlayer = ""; + } + for(Player player : playerList.values()) { + player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false)); + } + for(String playerName : Seeker.getEntries()) { + Player player = playerList.get(playerName); + if(player != null) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1000000, 2, false, false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1000000, 1, false, false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false)); + } + } + for(String playerName : Hider.getEntries()) { + Player player = playerList.get(playerName); + if(player != null) { + player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 1, false, false)); + } + int distance = 100; + for(String seekerName : Seeker.getEntries()) { + Player seeker = playerList.get(seekerName); + int temp = (int) player.getLocation().distance(seeker.getLocation()); + if(distance > temp) { + distance = temp; + } + if(glowTime > 0) { + Functions.setGlow(player, seeker, true); + } else { + Functions.setGlow(player, seeker, false); + } + } + switch(tick%10) { + case 0: + if(distance < 30) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f); + if(distance < 10) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 3: + if(distance < 30) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f); + if(distance < 10) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 6: + if(distance < 10) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 9: + if(distance < 20) Functions.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + } + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java deleted file mode 100644 index db618b5..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java +++ /dev/null @@ -1,40 +0,0 @@ -package net.tylermurphy.hideAndSeek.manager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.scoreboard.Team.Option; -import org.bukkit.scoreboard.Team.OptionStatus; - -public class BoardManager { - - public static void loadScoreboard() { - - ScoreboardManager manager = Bukkit.getScoreboardManager(); - Scoreboard mainBoard = manager.getMainScoreboard(); - - try { mainBoard.registerNewTeam("Seeker");} catch(Exception e) {} - Seeker = mainBoard.getTeam("Seeker"); - Seeker.setColor(ChatColor.RED); - Seeker.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Seeker.setAllowFriendlyFire(false); - - try { mainBoard.registerNewTeam("Hider");} catch(Exception e) {} - Hider = mainBoard.getTeam("Hider"); - Hider.setColor(ChatColor.GOLD); - Hider.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Hider.setAllowFriendlyFire(false); - - try { mainBoard.registerNewTeam("Spectator");} catch(Exception e) {} - Spectator = mainBoard.getTeam("Spectator"); - Spectator.setColor(ChatColor.GRAY); - Spectator.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Spectator.setAllowFriendlyFire(false); - - board = mainBoard; - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java deleted file mode 100644 index 00c59d2..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java +++ /dev/null @@ -1,61 +0,0 @@ -package net.tylermurphy.hideAndSeek.manager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.Bukkit; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.potion.PotionEffect; - -import net.md_5.bungee.api.ChatColor; - -public class EventManager implements Listener { - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event) { - if(status.equals("Playing") || status.equals("Starting")) { - Spectator.addEntry(event.getPlayer().getName()); - resetPlayerData(event.getPlayer().getName(), false); - event.getPlayer().sendMessage(messagePrefix + "You have joined mid game, and thus have been placed on the spectator team."); - event.getPlayer().setGameMode(GameMode.SPECTATOR); - event.getPlayer().getInventory().clear(); - for(PotionEffect effect : event.getPlayer().getActivePotionEffects()){ - event.getPlayer().removePotionEffect(effect.getType()); - } - event.getPlayer().teleport(new Location(event.getPlayer().getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); - } else if(status.equals("Setup") || status.equals("Standby")) { - Hider.addEntry(event.getPlayer().getName()); - } - playerList.put(event.getPlayer().getName(), event.getPlayer()); - if(board == null) BoardManager.loadScoreboard(); - } - - @EventHandler - public void onQuit(PlayerQuitEvent event) { - playerList.remove(event.getPlayer().getName()); - Hider.removeEntry(event.getPlayer().getName()); - Seeker.removeEntry(event.getPlayer().getName()); - Spectator.removeEntry(event.getPlayer().getName()); - } - - @EventHandler - public void onDeath(PlayerDeathEvent event) { - if(status.equals("Playing")) { - if(Hider.hasEntry(event.getEntity().getName())) { - Bukkit.getServer().broadcastMessage(String.format(messagePrefix + "%s%s%s has died and become a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE)); - } - if(Seeker.hasEntry(event.getEntity().getName())) { - Bukkit.getServer().broadcastMessage(String.format(messagePrefix + "%s%s%s has been beat by a hider", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE)); - } - - setPlayerData(event.getEntity().getName(), "Death", 1); - setPlayerData(event.getEntity().getName(), "GiveStatus", 1); - } - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/TauntManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/TauntManager.java deleted file mode 100644 index 6465e44..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/TauntManager.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.tylermurphy.hideAndSeek.manager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; - -import net.tylermurphy.hideAndSeek.Main; - -public class TauntManager { - -public static void schedule() { - - Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ - - public void run() { - int temp = gameId; - while(true) { - if(tauntPlayer != null && !tauntPlayer.equals("")) { - try { Thread.sleep(1000); } catch (InterruptedException e) {} - if(gameId != temp) break; - continue; - } - try { Thread.sleep(1000*60); } catch (InterruptedException e) {} - if(gameId != temp) break; - if(Math.random() > .9) { - Player taunted = null; - int rand = (int) (Math.random()*Hider.getEntries().size()); - for(Player player : playerList.values()) { - if(Hider.hasEntry(player.getName())) { - rand--; - if(rand==0) { - taunted = player; - break; - } - } - } - if(taunted != null) { - taunted.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "Oh no! You have been chosed to be taunted."); - Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + "Taunt >" + ChatColor.WHITE + " A random hider will be taunted in the next 30s"); - try { Thread.sleep(1000*30); } catch (InterruptedException e) {} - if(gameId != temp) break; - tauntPlayer = taunted.getName(); - } - } - } - } - }); - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/TickManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/TickManager.java deleted file mode 100644 index 7b6cedf..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/TickManager.java +++ /dev/null @@ -1,245 +0,0 @@ -package net.tylermurphy.hideAndSeek.manager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Color; -import org.bukkit.FireworkEffect; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Firework; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.FireworkMeta; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.potion.PotionType; -import org.bukkit.scoreboard.Team.Option; -import org.bukkit.scoreboard.Team.OptionStatus; - -import net.tylermurphy.hideAndSeek.commands.Stop; - -public class TickManager { - - static int tick = 0; - - public static void onTick() { - - if(board == null) return; - - checkTeams(); - - for(Player player : playerList.values()) { - player.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 1000000, 127, false, false)); - } - - if(status.equals("Standby") || status.equals("Setup")) { - onStandby(); - } else if(status.equals("Starting")) { - onStarting(); - } else if(status.equals("Playing")) { - onPlaying(); - } - - tick ++; - tick %= 10; - - if(Hider.getSize() < 1) { - Stop.onStop(false); - } - if(Seeker.getSize() < 1) { - Stop.onStop(false); - } - } - - private static void checkTeams() { - - try { Hider.getSize(); } - catch (Exception e) { - board.registerNewTeam("Hider"); - Hider = board.getTeam("Hider"); - Hider.setColor(ChatColor.GOLD); - Hider.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Hider.setAllowFriendlyFire(false); - } - - try { Seeker.getSize(); } - catch (Exception e) { - board.registerNewTeam("Seeker"); - Seeker = board.getTeam("Seeker"); - Seeker.setColor(ChatColor.RED); - Seeker.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Seeker.setAllowFriendlyFire(false); - } - - try { Spectator.getSize(); } - catch (Exception e) { - board.registerNewTeam("Spectator"); - Spectator = board.getTeam("Spectator"); - Spectator.setColor(ChatColor.GRAY); - Spectator.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); - Spectator.setAllowFriendlyFire(false); - } - - for(String entry : Hider.getEntries()) { - if(!playerList.containsKey(entry)) { - Hider.removeEntry(entry); - } - } - - for(String entry : Seeker.getEntries()) { - if(!playerList.containsKey(entry)) { - Seeker.removeEntry(entry); - } - } - - for(String entry : Spectator.getEntries()) { - if(!playerList.containsKey(entry)) { - Spectator.removeEntry(entry); - } - } - } - - private static void onStandby() { - for(Player player : playerList.values()) { - player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 1000000, 127, false, false)); - } - } - - private static void onStarting() { - for(String playerName : Seeker.getEntries()) { - Player player = playerList.get(playerName); - if(player != null) { - player.teleport(new Location(player.getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); - } - } - } - - private static void onPlaying() { - if(decreaseBorder) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "worldborder add -100 30"); - decreaseBorder = false; - } - if(!tauntPlayer.equals("")) { - Player taunted = playerList.get(tauntPlayer); - if(taunted != null) { - Firework fw = (Firework) taunted.getLocation().getWorld().spawnEntity(taunted.getLocation(), EntityType.FIREWORK); - FireworkMeta fwm = fw.getFireworkMeta(); - fwm.setPower(2); - fwm.addEffect(FireworkEffect.builder() - .withColor(Color.BLUE) - .withColor(Color.RED) - .withColor(Color.YELLOW) - .with(FireworkEffect.Type.STAR) - .with(FireworkEffect.Type.BALL) - .with(FireworkEffect.Type.BALL_LARGE) - .flicker(true) - .withTrail() - .build()); - fw.setFireworkMeta(fwm); - Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + "Taunt >" + ChatColor.WHITE + " Taunt has been activated"); - } - tauntPlayer = ""; - } - for(Player player : playerList.values()) { - player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false)); - if(getPlayerData(player.getName(),"Death") > 0) { - setPlayerData(player.getName(),"Death",0); - Seeker.addEntry(player.getName()); - } - if(getPlayerData(player.getName(),"GiveStatus") > 0) { - setPlayerData(player.getName(),"GiveStatus",0); - player.getInventory().clear(); - for(PotionEffect effect : player.getActivePotionEffects()){ - player.removePotionEffect(effect.getType()); - } - if(Seeker.getEntries().contains(player.getName())){ - ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD,1); - diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1); - ItemMeta diamondSwordMeta = diamondSword.getItemMeta(); - diamondSwordMeta.setDisplayName("Seeker Sword"); - diamondSwordMeta.setUnbreakable(true); - diamondSword.setItemMeta(diamondSwordMeta); - player.getInventory().addItem(diamondSword); - - ItemStack wackyStick = new ItemStack(Material.STICK,1); - wackyStick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 3); - ItemMeta wackyStickMeta = wackyStick.getItemMeta(); - wackyStickMeta.setDisplayName("Wacky Stick"); - wackyStick.setItemMeta(wackyStickMeta); - player.getInventory().addItem(wackyStick); - } - else if(Hider.getEntries().contains(player.getName())){ - ItemStack stoneSword = new ItemStack(Material.STONE_SWORD,1); - stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2); - ItemMeta stoneSwordMeta = stoneSword.getItemMeta(); - stoneSwordMeta.setDisplayName("Hider Sword"); - stoneSwordMeta.setUnbreakable(true); - stoneSword.setItemMeta(stoneSwordMeta); - player.getInventory().addItem(stoneSword); - - ItemStack splashPotion = new ItemStack(Material.SPLASH_POTION,1); - PotionMeta splashPotionMeta = (PotionMeta) splashPotion.getItemMeta(); - splashPotionMeta.setBasePotionData(new PotionData(PotionType.REGEN)); - splashPotion.setItemMeta(splashPotionMeta); - player.getInventory().addItem(splashPotion); - - ItemStack potion = new ItemStack(Material.POTION,2); - PotionMeta potionMeta = (PotionMeta) potion.getItemMeta(); - potionMeta.setBasePotionData(new PotionData(PotionType.INSTANT_HEAL)); - potion.setItemMeta(potionMeta); - player.getInventory().addItem(potion); - } - } - } - for(String playerName : Seeker.getEntries()) { - Player player = playerList.get(playerName); - if(player != null) { - player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 1000000, 2, false, false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 1000000, 1, false, false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false)); - player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false)); - } - } - for(String playerName : Hider.getEntries()) { - Player player = playerList.get(playerName); - if(player != null) { - player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 1, false, false)); - } - int distance = 100; - for(String seekerName : Seeker.getEntries()) { - Player seeker = playerList.get(seekerName); - int temp = (int) player.getLocation().distance(seeker.getLocation()); - if(distance > temp) { - distance = temp; - } - } - int x = player.getLocation().getBlockX(); - int y = player.getLocation().getBlockY(); - int z = player.getLocation().getBlockZ(); - switch(tick) { - case 0: - if(distance < 30) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.basedrum master %s %s %s %s .5 1",player.getName(),x,y,z)); - if(distance < 10) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.bit master %s %s %s %s .3 1",player.getName(),x,y,z)); - break; - case 3: - if(distance < 30) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.basedrum master %s %s %s %s 3.31",player.getName(),x,y,z)); - if(distance < 10) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.bit master %s %s %s %s .3 1",player.getName(),x,y,z)); - break; - case 6: - if(distance < 10) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.bit master %s %s %s %s .3 1",player.getName(),x,y,z)); - break; - case 9: - if(distance < 20) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("playsound minecraft:block.note_block.bit master %s %s %s %s .3 1",player.getName(),x,y,z)); - break; - } - } - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/WorldborderManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/WorldborderManager.java deleted file mode 100644 index aa0011c..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/manager/WorldborderManager.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.tylermurphy.hideAndSeek.manager; - -import static net.tylermurphy.hideAndSeek.Store.*; - -import org.bukkit.Bukkit; - -import net.md_5.bungee.api.ChatColor; -import net.tylermurphy.hideAndSeek.Main; - -public class WorldborderManager { - - public static void schedule() { - - Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ - - public void run() { - int temp = gameId; - while(true) { - try { Thread.sleep(1000*60*worldborderDelay); } catch (InterruptedException e) {} - if(gameId != temp) break; - if(currentWorldborderSize-100 > 100) { - Bukkit.getServer().broadcastMessage(ChatColor.RED + "World Border> " + ChatColor.WHITE + "Worldborder decreacing by 100 blocks over the next 30s"); - currentWorldborderSize -= 100; - decreaseBorder = true; - } else { - break; - } - } - } - }); - } - - public static void reset() { - if(worldborderEnabled) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "worldborder set "+worldborderSize); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), String.format("worldborder center %s %s",worldborderPosition.getBlockX(),worldborderPosition.getBlockZ())); - currentWorldborderSize = worldborderSize; - } else { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "worldborder set 30000000"); - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "worldborder center 0 0"); - } - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java new file mode 100644 index 0000000..73d6e94 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java @@ -0,0 +1,265 @@ +package net.tylermurphy.hideAndSeek.util; + +import static net.tylermurphy.hideAndSeek.Store.Hider; +import static net.tylermurphy.hideAndSeek.Store.Seeker; +import static net.tylermurphy.hideAndSeek.Store.Spectator; +import static net.tylermurphy.hideAndSeek.Store.board; +import static net.tylermurphy.hideAndSeek.Store.currentWorldborderSize; +import static net.tylermurphy.hideAndSeek.Store.decreaseBorder; +import static net.tylermurphy.hideAndSeek.Store.gameId; +import static net.tylermurphy.hideAndSeek.Store.playerList; +import static net.tylermurphy.hideAndSeek.Store.tauntPlayer; +import static net.tylermurphy.hideAndSeek.Store.worldborderDelay; +import static net.tylermurphy.hideAndSeek.Store.worldborderEnabled; +import static net.tylermurphy.hideAndSeek.Store.worldborderPosition; +import static net.tylermurphy.hideAndSeek.Store.worldborderSize; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.World; +import org.bukkit.WorldBorder; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionType; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; +import org.bukkit.scoreboard.Team.Option; +import org.bukkit.scoreboard.Team.OptionStatus; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.ProtocolManager; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory; +import com.comphenix.protocol.wrappers.WrappedDataWatcher; +import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry; +import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer; + +import net.tylermurphy.hideAndSeek.Main; + +public class Functions { + + private static ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); + + public static void resetPlayer(Player player) { + player.getInventory().clear(); + for(PotionEffect effect : player.getActivePotionEffects()){ + player.removePotionEffect(effect.getType()); + } + if(Seeker.getEntries().contains(player.getName())){ + ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD,1); + diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1); + ItemMeta diamondSwordMeta = diamondSword.getItemMeta(); + diamondSwordMeta.setDisplayName("Seeker Sword"); + diamondSwordMeta.setUnbreakable(true); + diamondSword.setItemMeta(diamondSwordMeta); + player.getInventory().addItem(diamondSword); + + ItemStack wackyStick = new ItemStack(Material.STICK,1); + wackyStick.addUnsafeEnchantment(Enchantment.KNOCKBACK, 3); + ItemMeta wackyStickMeta = wackyStick.getItemMeta(); + wackyStickMeta.setDisplayName("Wacky Stick"); + wackyStick.setItemMeta(wackyStickMeta); + player.getInventory().addItem(wackyStick); + } + else if(Hider.getEntries().contains(player.getName())){ + ItemStack stoneSword = new ItemStack(Material.STONE_SWORD,1); + stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2); + ItemMeta stoneSwordMeta = stoneSword.getItemMeta(); + stoneSwordMeta.setDisplayName("Hider Sword"); + stoneSwordMeta.setUnbreakable(true); + stoneSword.setItemMeta(stoneSwordMeta); + player.getInventory().addItem(stoneSword); + + ItemStack splashPotion = new ItemStack(Material.SPLASH_POTION,1); + PotionMeta splashPotionMeta = (PotionMeta) splashPotion.getItemMeta(); + splashPotionMeta.setBasePotionData(new PotionData(PotionType.REGEN)); + splashPotion.setItemMeta(splashPotionMeta); + player.getInventory().addItem(splashPotion); + + ItemStack potion = new ItemStack(Material.POTION,2); + PotionMeta potionMeta = (PotionMeta) potion.getItemMeta(); + potionMeta.setBasePotionData(new PotionData(PotionType.INSTANT_HEAL)); + potion.setItemMeta(potionMeta); + player.getInventory().addItem(potion); + + ItemStack snowball = new ItemStack(Material.SNOWBALL,1); + ItemMeta snowballMeta = snowball.getItemMeta(); + snowballMeta.setDisplayName("Glow Powerup"); + List snowballLore = new ArrayList(); + snowballLore.add("Throw to make all seekers glow"); + snowballLore.add("Last 30s, all hiders can see it"); + snowballLore.add("Time stacks on multi use"); + snowballMeta.setLore(snowballLore); + player.getInventory().addItem(snowball); + } + } + + public static void emptyOfflinePlayers() { + + for(String entry : Hider.getEntries()) { + if(!playerList.containsKey(entry)) { + Hider.removeEntry(entry); + } + } + + for(String entry : Seeker.getEntries()) { + if(!playerList.containsKey(entry)) { + Seeker.removeEntry(entry); + } + } + + for(String entry : Spectator.getEntries()) { + if(!playerList.containsKey(entry)) { + Spectator.removeEntry(entry); + } + } + } + + public static void loadScoreboard() { + + ScoreboardManager manager = Bukkit.getScoreboardManager(); + Scoreboard mainBoard = manager.getMainScoreboard(); + + try { mainBoard.registerNewTeam("Seeker");} catch(Exception e) {} + Seeker = mainBoard.getTeam("Seeker"); + Seeker.setColor(ChatColor.RED); + Seeker.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + Seeker.setAllowFriendlyFire(false); + + try { mainBoard.registerNewTeam("Hider");} catch(Exception e) {} + Hider = mainBoard.getTeam("Hider"); + Hider.setColor(ChatColor.GOLD); + Hider.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + Hider.setAllowFriendlyFire(false); + + try { mainBoard.registerNewTeam("Spectator");} catch(Exception e) {} + Spectator = mainBoard.getTeam("Spectator"); + Spectator.setColor(ChatColor.GRAY); + Spectator.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + Spectator.setAllowFriendlyFire(false); + + board = mainBoard; + } + + public static void playSound(Player player, Sound sound, float volume, float pitch) { + PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.NAMED_SOUND_EFFECT); + packet.getSoundCategories().write(0, SoundCategory.MASTER); + packet.getSoundEffects().write(0, sound); + packet.getIntegers().write(0, (int)(player.getLocation().getX() * 8.0)); + packet.getIntegers().write(1, (int)(player.getLocation().getY() * 8.0)); + packet.getIntegers().write(2, (int)(player.getLocation().getZ() * 8.0)); + packet.getFloat().write(0, volume); + packet.getFloat().write(1, pitch); + try { + protocolManager.sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static void setGlow(Player player, Player target, boolean glowing) { + PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.ENTITY_METADATA); + packet.getIntegers().write(0, target.getEntityId()); + WrappedDataWatcher watcher = new WrappedDataWatcher(); + Serializer serializer = Registry.get(Byte.class); + watcher.setEntity(target); + if(glowing) { + watcher.setObject(0, serializer, (byte) (0x40)); + } else { + watcher.setObject(0, serializer, (byte) (0x0)); + } + packet.getWatchableCollectionModifier().write(0, watcher.getWatchableObjects()); + try { + protocolManager.sendServerPacket(player, packet); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } + } + + public static void scheduleTaunt() { + Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ + + public void run() { + int temp = gameId; + while(true) { + if(tauntPlayer != null && !tauntPlayer.equals("")) { + try { Thread.sleep(1000); } catch (InterruptedException e) {} + if(gameId != temp) break; + continue; + } + try { Thread.sleep(1000*60); } catch (InterruptedException e) {} + if(gameId != temp) break; + if(Math.random() > .8) { + Player taunted = null; + int rand = (int) (Math.random()*Hider.getEntries().size()); + for(Player player : playerList.values()) { + if(Hider.hasEntry(player.getName())) { + rand--; + if(rand==0) { + taunted = player; + break; + } + } + } + if(taunted != null) { + taunted.sendMessage(ChatColor.RED + "" + ChatColor.ITALIC + "Oh no! You have been chosed to be taunted."); + Bukkit.getServer().broadcastMessage(ChatColor.YELLOW + "Taunt >" + ChatColor.WHITE + " A random hider will be taunted in the next 30s"); + try { Thread.sleep(1000*30); } catch (InterruptedException e) {} + if(gameId != temp) break; + tauntPlayer = taunted.getName(); + } + } + } + } + }); + } + + public static void scheduleWorldborder() { + + Bukkit.getServer().getScheduler().runTaskAsynchronously(Main.plugin, new Runnable(){ + + public void run() { + int temp = gameId; + while(true) { + try { Thread.sleep(1000*60*worldborderDelay); } catch (InterruptedException e) {} + if(gameId != temp) break; + if(currentWorldborderSize-100 > 100) { + Bukkit.getServer().broadcastMessage(ChatColor.RED + "World Border> " + ChatColor.WHITE + "Worldborder decreacing by 100 blocks over the next 30s"); + currentWorldborderSize -= 100; + decreaseBorder = true; + } else { + break; + } + } + } + }); + } + + public static void resetWorldborder() { + if(worldborderEnabled) { + World world = Bukkit.getWorld("world"); + WorldBorder border = world.getWorldBorder(); + border.setSize(worldborderSize); + border.setCenter(worldborderPosition.getX(), worldborderPosition.getZ()); + currentWorldborderSize = worldborderSize; + } else { + World world = Bukkit.getWorld("world"); + WorldBorder border = world.getWorldBorder(); + border.setSize(30000000); + border.setCenter(0, 0); + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/ICommand.java b/src/main/java/net/tylermurphy/hideAndSeek/util/ICommand.java similarity index 84% rename from src/main/java/net/tylermurphy/hideAndSeek/ICommand.java rename to src/main/java/net/tylermurphy/hideAndSeek/util/ICommand.java index 304384f..373096f 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/ICommand.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/ICommand.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek; +package net.tylermurphy.hideAndSeek.util; import org.bukkit.command.CommandSender; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ea176f0..4250258 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,8 +1,10 @@ name: HideAndSeek main: net.tylermurphy.hideAndSeek.Main -version: 1.0 +version: 1.2.0 author: KenshinEto load: STARTUP +api-version: 1.17 +depend: [ProtocolLib] commands: hideandseek: description: Hide and Seek command