diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2021-08-13 16:49:36 -0400 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2021-08-13 16:49:36 -0400 |
commit | 173d4b0e6a1eca9d088b0bcf8b81c82494d658d6 (patch) | |
tree | 0ea188aae579b99336b0df331422868cc9279e22 /src/main/java | |
download | kenshinshideandseek-173d4b0e6a1eca9d088b0bcf8b81c82494d658d6.tar.gz kenshinshideandseek-173d4b0e6a1eca9d088b0bcf8b81c82494d658d6.tar.bz2 kenshinshideandseek-173d4b0e6a1eca9d088b0bcf8b81c82494d658d6.zip |
1.0.0
Diffstat (limited to 'src/main/java')
17 files changed, 1087 insertions, 0 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/ICommand.java b/src/main/java/net/tylermurphy/hideAndSeek/ICommand.java new file mode 100644 index 0000000..304384f --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/ICommand.java @@ -0,0 +1,15 @@ +package net.tylermurphy.hideAndSeek; + +import org.bukkit.command.CommandSender; + +public interface ICommand { + + public void execute(CommandSender sender, String[] args); + + public String getLabel(); + + public String getUsage(); + + public String getDescription(); + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java new file mode 100644 index 0000000..2ce717b --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -0,0 +1,79 @@ +package net.tylermurphy.hideAndSeek; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +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; + +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); + for (Player player : Bukkit.getServer().getOnlinePlayers()) { + playerList.put(player.getName(), player); + } + + // Init Configuration + Vector spawnPositionVector = getConfig().getVector("spawnPosition"); + if(spawnPositionVector != null) { + spawnPosition = spawnPositionVector; + status = "Standby"; + } + Vector worldborderPositionVector = getConfig().getVector("borderPosition"); + if(worldborderPositionVector != null) { + worldborderPosition = worldborderPositionVector; + worldborderSize = getConfig().getInt("borderSize"); + worldborderDelay = getConfig().getInt("borderDelay"); + } + 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"); + + // Register Commands + CommandManager.registerCommands(); + + // Init Scoreboard + if(Bukkit.getScoreboardManager() != null) { + BoardManager.loadScoreboard(); + } + + // Start Tick Timer + tickTaskId = Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){ + public void run(){ + TickManager.onTick(); + } + },0,1).getTaskId(); + + } + + 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); + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Store.java b/src/main/java/net/tylermurphy/hideAndSeek/Store.java new file mode 100644 index 0000000..4c8666a --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/Store.java @@ -0,0 +1,70 @@ +package net.tylermurphy.hideAndSeek; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +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<String,Player> playerList = new HashMap<String,Player>(); + public static List<String> loadedPlayers = new ArrayList<String>(); + 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 int worldborderSize,worldborderDelay,currentWorldborderSize; + public static boolean worldborderEnabled = false, decreaseBorder = false; + public static String tauntPlayer = ""; + public static HashMap<String,HashMap<String,Integer>> playerData = new HashMap<String,HashMap<String,Integer>>(); + public static int startTaskId; + public static int gameId = 0; + + public static FileConfiguration getConfig() { + return Main.plugin.getConfig(); + } + + public static void saveConfig() { + Main.plugin.saveConfig(); + } + + public static int getPlayerData(String playerName, String key) { + HashMap<String,Integer> data = playerData.get(playerName); + if(data == null) { + data = new HashMap<String,Integer>(); + playerData.put(playerName, data); + return 0; + } + if(data.get(key) == null) { + data.put(key, 0); + return 0; + } + return data.get(key); + } + + public static void setPlayerData(String playerName, String key, int value) { + HashMap<String,Integer> data = playerData.get(playerName); + if(data == null) { + data = new HashMap<String,Integer>(); + } + data.put(key, value); + playerData.put(playerName, data); + } + + public static void resetPlayerData(String playerName, boolean giveItems) { + HashMap<String,Integer> data = new HashMap<String,Integer>(); + data.put("Death", 0); + data.put("GiveStatus", (giveItems) ? 1 : 0); + playerData.put(playerName, data); + } +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java new file mode 100644 index 0000000..91cc430 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java @@ -0,0 +1,30 @@ +package net.tylermurphy.hideAndSeek.commands; + +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import net.tylermurphy.hideAndSeek.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("%sAuthor: %s[KenshinEto]\n", ChatColor.GRAY, ChatColor.WHITE) + + String.format("%sHelp Command: %s/hs %shelp", ChatColor.GRAY, ChatColor.AQUA, ChatColor.WHITE) + ); + } + + public String getLabel() { + return "about"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Get information about the plugin"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java new file mode 100644 index 0000000..4aa44ad --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/EnableBorder.java @@ -0,0 +1,45 @@ +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(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 "<true/false>"; + } + + 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 new file mode 100644 index 0000000..1839e41 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java @@ -0,0 +1,32 @@ +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; + +public class Help implements ICommand { + + public void execute(CommandSender sender, String[] args) { + String message = ""; + for(ICommand command : CommandManager.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); + sender.sendMessage(message); + } + + public String getLabel() { + return "help"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Get the commands for the plugin"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java new file mode 100644 index 0000000..07e69bb --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java @@ -0,0 +1,68 @@ +package net.tylermurphy.hideAndSeek.commands; + +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 static net.tylermurphy.hideAndSeek.Store.*; + +public class SetBorder implements ICommand { + + public void execute(CommandSender sender, String[] args) { + if(spawnPosition == null) { + sender.sendMessage(errorPrefix + "Please set spawn position first"); + return; + } + if(args.length < 2) { + sender.sendMessage(errorPrefix + "Please enter worldborder size and delay"); + return; + } + int num,delay; + try { num = Integer.parseInt(args[0]); } catch (Exception e) { + sender.sendMessage(errorPrefix + "Invalid integer: "+args[0]); + return; + } + try { delay = Integer.parseInt(args[1]); } catch (Exception e) { + sender.sendMessage(errorPrefix + "Invalid integer: "+args[1]); + return; + } + if(num < 100) { + sender.sendMessage(errorPrefix + "Worldborder cannot be smaller than 100 blocks."); + return; + } + Vector newWorldborderPosition = new Vector(); + Player player = (Player) sender; + newWorldborderPosition.setX(player.getLocation().getBlockX()); + newWorldborderPosition.setY(0); + newWorldborderPosition.setZ(player.getLocation().getBlockZ()); + if(spawnPosition.distance(newWorldborderPosition) > 100) { + sender.sendMessage(errorPrefix + "Spawn position must be 100 from worldborder center"); + return; + } + worldborderPosition = newWorldborderPosition; + worldborderSize = num; + worldborderDelay = delay; + sender.sendMessage(messagePrefix + "Set border center to current location, size to "+num+", and delay to "+delay); + getConfig().set("borderPosition", newWorldborderPosition); + getConfig().set("borderSize", num); + getConfig().set("borderDelay", delay); + saveConfig(); + WorldborderManager.reset(); + } + + public String getLabel() { + return "setBorder"; + } + + public String getUsage() { + return "<size> <delay>"; + } + + public String getDescription() { + return "Sets worldboarder's center location, size in blocks, and delay in minutes"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java new file mode 100644 index 0000000..948b899 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSeeker.java @@ -0,0 +1,43 @@ +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) { + 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, args[0])); + } + + public String getLabel() { + return "setSeeker"; + } + + public String getUsage() { + return "<player>"; + } + + 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 new file mode 100644 index 0000000..821d469 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java @@ -0,0 +1,45 @@ +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 static net.tylermurphy.hideAndSeek.Store.*; + +public class SetSpawnLocation implements ICommand { + + public void execute(CommandSender sender, String[] args) { + Vector newSpawnPosition = new Vector(); + Player player = (Player) sender; + newSpawnPosition.setX(player.getLocation().getBlockX()); + newSpawnPosition.setY(player.getLocation().getBlockY()); + newSpawnPosition.setZ(player.getLocation().getBlockZ()); + if(worldborderEnabled && spawnPosition.distance(worldborderPosition) > 100) { + sender.sendMessage(errorPrefix + "Spawn position must be 100 from worldborder center"); + return; + } + spawnPosition = newSpawnPosition; + status = "Standby"; + 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())); + } + + public String getLabel() { + return "setspawn"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Sets hide and seeks spawn location to current position"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java new file mode 100644 index 0000000..8dc0f5f --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java @@ -0,0 +1,111 @@ +package net.tylermurphy.hideAndSeek.commands; + +import org.bukkit.Bukkit; + +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +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 static net.tylermurphy.hideAndSeek.Store.*; + +import java.util.HashMap; + +public class Start implements ICommand { + + public void execute(CommandSender sender, String[] args) { + if(status.equals("Setup")) { + sender.sendMessage(errorPrefix + "Please set spawn location first"); + return; + } + if(!status.equals("Standby")) { + sender.sendMessage(errorPrefix + "Game is already in session"); + return; + } + if(Hider.getSize() < 1) { + sender.sendMessage(errorPrefix + "No Hiders were found"); + return; + } + if(Seeker.getSize() < 1) { + sender.sendMessage(errorPrefix + "No Seekers were found"); + return; + } + playerData = new HashMap<String,HashMap<String,Integer>>(); + 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())); + for(PotionEffect effect : player.getActivePotionEffects()){ + player.removePotionEffect(effect.getType()); + } + } + for(String playerName : Seeker.getEntries()) { + Player player = playerList.get(playerName); + if(player != null) { + player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS,1000000,127,false,false)); + player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW,1000000,127,false,false)); + } + } + for(String playerName : Hider.getEntries()) { + Player player = playerList.get(playerName); + if(player != null) { + player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false)); + } + } + WorldborderManager.reset(); + status = "Starting"; + startTaskId = Bukkit.getServer().getScheduler().runTaskAsynchronously(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) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 10 seconds to hide!"); + try { Thread.sleep(5*1000); } catch (InterruptedException e) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 5 seconds to hide!"); + try { Thread.sleep(2*1000); } catch (InterruptedException e) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 3 seconds to hide!"); + try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 2 seconds to hide!"); + try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 1 seconds to hide!"); + try { Thread.sleep(1*1000); } catch (InterruptedException e) {} + if(temp != gameId) return; + Bukkit.getServer().broadcastMessage(messagePrefix + "Attetion SEEKERS, its time to find the hiders!"); + status = "Playing"; + } + }).getTaskId(); + if(worldborderEnabled) { + WorldborderManager.schedule(); + } + TauntManager.schedule(); + } + + public String getLabel() { + return "start"; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Starts the game"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java new file mode 100644 index 0000000..a1758c7 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java @@ -0,0 +1,63 @@ +package net.tylermurphy.hideAndSeek.commands; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +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; + +public class Stop implements ICommand { + + public void execute(CommandSender sender, String[] args) { + if(status.equals("Starting") || status.equals("Playing")) { + onStop(true); + + } else { + sender.sendMessage(errorPrefix + "There is no game in progress"); + return; + } + } + + public String getLabel() { + return "stop"; + } + + public static void onStop(boolean forced) { + if(status.equals("Standby")) 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); + for(Player player : playerList.values()) { + player.setGameMode(GameMode.ADVENTURE); + Hider.addEntry(player.getName()); + player.getInventory().clear(); + player.teleport(new Location(player.getWorld(), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + for(PotionEffect effect : player.getActivePotionEffects()){ + player.removePotionEffect(effect.getType()); + } + player.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 100)); + } + WorldborderManager.reset(); + gameId++; + } + + public String getUsage() { + return ""; + } + + public String getDescription() { + return "Stops the game"; + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java new file mode 100644 index 0000000..db618b5 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/BoardManager.java @@ -0,0 +1,40 @@ +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/CommandManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/CommandManager.java new file mode 100644 index 0000000..b50247a --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/CommandManager.java @@ -0,0 +1,60 @@ +package net.tylermurphy.hideAndSeek.manager; + +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 static net.tylermurphy.hideAndSeek.Store.*; + +public class CommandManager implements CommandExecutor { + + 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 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) { + if(sender instanceof Player == false) { + sender.sendMessage(errorPrefix + "This command can only be run as a player."); + } else if(args.length < 1) { + COMMAND_REGISTER.get("about").execute(sender, new String[0]); + } else if(!COMMAND_REGISTER.containsKey(args[0].toLowerCase())) { + COMMAND_REGISTER.get("about").execute(sender, Arrays.copyOfRange(args, 1, args.length)); + } 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 CommandManager.handleCommand(sender, command, label, args); + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java b/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java new file mode 100644 index 0000000..fbce79c --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/EventManager.java @@ -0,0 +1,49 @@ +package net.tylermurphy.hideAndSeek.manager; + +import static net.tylermurphy.hideAndSeek.Store.*; + +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; + +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())); + } + 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")) { + 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 new file mode 100644 index 0000000..6465e44 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/TauntManager.java @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..8ebe34b --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/TickManager.java @@ -0,0 +1,241 @@ +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(); + + 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(),"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); + } + } + if(getPlayerData(player.getName(),"Death") > 0) { + setPlayerData(player.getName(),"Death",0); + Seeker.addEntry(player.getName()); + } + } + 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 new file mode 100644 index 0000000..aa0011c --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/manager/WorldborderManager.java @@ -0,0 +1,44 @@ +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"); + } + } + +} |