diff --git a/src/main/java/net/tylermurphy/hideAndSeek/Main.java b/src/main/java/net/tylermurphy/hideAndSeek/Main.java index 3e1e4b7..de6b043 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Main.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Main.java @@ -12,15 +12,27 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitTask; -import net.tylermurphy.hideAndSeek.events.EventListener; -import net.tylermurphy.hideAndSeek.events.EventTick; +import net.tylermurphy.hideAndSeek.bukkit.CommandHandler; +import net.tylermurphy.hideAndSeek.bukkit.EventListener; +import net.tylermurphy.hideAndSeek.bukkit.TabCompleter; +import net.tylermurphy.hideAndSeek.bukkit.Tick; +import net.tylermurphy.hideAndSeek.events.Glow; +import net.tylermurphy.hideAndSeek.events.Taunt; +import net.tylermurphy.hideAndSeek.events.Worldborder; public class Main extends JavaPlugin implements Listener { public static Main plugin; public static File root; + public static Taunt taunt; + public static Glow glow; + public static Worldborder worldborder; + + private BukkitTask onTickTask; + public void onEnable() { plugin = this; @@ -41,10 +53,10 @@ public class Main extends JavaPlugin implements Listener { root = this.getServer().getWorldContainer(); // Start Tick Timer - Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){ + onTickTask = Bukkit.getServer().getScheduler().runTaskTimer(this, new Runnable(){ public void run(){ try{ - EventTick.onTick(); + Tick.onTick(); } catch (Exception e) { e.printStackTrace(); } @@ -53,12 +65,16 @@ public class Main extends JavaPlugin implements Listener { } + public void onDisable() { + onTickTask.cancel(); + } + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] 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); + return TabCompleter.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 b7350a6..f7b3905 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/Store.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/Store.java @@ -18,13 +18,18 @@ public class Store { public static Map playerList = new HashMap(); + public static List + Hider, + Seeker, + Spectator; + public static Scoreboard board; public static Team - Hider, - Seeker, - Spectator; + HiderTeam, + SeekerTeam, + SpectatorTeam; public static String messagePrefix, @@ -35,8 +40,7 @@ public class Store { gameoverPrefix, warningPrefix, spawnWorld, - status = "Standby", - tauntPlayer = ""; + status = "Standby"; public static Vector spawnPosition, @@ -57,12 +61,10 @@ public class Store { interactableTrapdoors, interactableFencegate, worldborderEnabled = false, - decreaseBorder = false, runningBackup = false; public static int minPlayers, - glowTime = 0, gameId = 0, worldborderSize, worldborderDelay, @@ -128,6 +130,7 @@ public class Store { worldborderDelay = Math.max(1,getConfig().getInt("worldBorder.delay")); worldborderEnabled = getConfig().getBoolean("worldBorder.enabled"); blockedCommands = getConfig().getStringList("blockedCommands"); + blockedCommands.add("team"); //Prefix char SYMBOLE = '\u00A7'; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java similarity index 96% rename from src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java rename to src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java index ade208d..73bfd08 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/CommandHandler.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/CommandHandler.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek; +package net.tylermurphy.hideAndSeek.bukkit; import static net.tylermurphy.hideAndSeek.Store.*; @@ -10,7 +10,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import net.tylermurphy.hideAndSeek.commands.*; +import net.tylermurphy.hideAndSeek.command.*; import net.tylermurphy.hideAndSeek.util.ICommand; public class CommandHandler { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java similarity index 85% rename from src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java rename to src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java index 46cf676..c46dc87 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/events/EventListener.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/EventListener.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.events; +package net.tylermurphy.hideAndSeek.bukkit; import static net.tylermurphy.hideAndSeek.Store.*; @@ -26,6 +26,7 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerKickEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.potion.PotionEffect; @@ -39,7 +40,8 @@ public class EventListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { if(status.equals("Playing") || status.equals("Starting")) { - Spectator.addEntry(event.getPlayer().getName()); + Spectator.add(event.getPlayer().getName()); + SpectatorTeam.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(); @@ -48,7 +50,8 @@ public class EventListener implements Listener { } event.getPlayer().teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); } else if(status.equals("Setup") || status.equals("Standby")) { - Hider.addEntry(event.getPlayer().getName()); + Hider.add(event.getPlayer().getName()); + HiderTeam.addEntry(event.getPlayer().getName()); event.getPlayer().setGameMode(GameMode.ADVENTURE); event.getPlayer().teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); } @@ -57,10 +60,26 @@ public class EventListener implements Listener { @EventHandler public void onQuit(PlayerQuitEvent event) { + if(!playerList.containsKey(event.getPlayer().getName())) return; playerList.remove(event.getPlayer().getName()); - Hider.removeEntry(event.getPlayer().getName()); - Seeker.removeEntry(event.getPlayer().getName()); - Spectator.removeEntry(event.getPlayer().getName()); + Hider.remove(event.getPlayer().getName()); + HiderTeam.removeEntry(event.getPlayer().getName()); + Seeker.remove(event.getPlayer().getName()); + SeekerTeam.removeEntry(event.getPlayer().getName()); + Spectator.remove(event.getPlayer().getName()); + SpectatorTeam.removeEntry(event.getPlayer().getName()); + } + + @EventHandler + public void onKick(PlayerKickEvent event) { + if(!playerList.containsKey(event.getPlayer().getName())) return; + playerList.remove(event.getPlayer().getName()); + Hider.remove(event.getPlayer().getName()); + HiderTeam.removeEntry(event.getPlayer().getName()); + Seeker.remove(event.getPlayer().getName()); + SeekerTeam.removeEntry(event.getPlayer().getName()); + Spectator.remove(event.getPlayer().getName()); + SpectatorTeam.removeEntry(event.getPlayer().getName()); } @EventHandler @@ -77,13 +96,15 @@ public class EventListener implements Listener { player.setHealth(player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()); player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(), spawnPosition.getY(), spawnPosition.getZ())); Packet.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 became a seeker", ChatColor.GOLD, event.getEntity().getName(), ChatColor.WHITE)); + if(Hider.contains(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was found and became 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)); + if(Seeker.contains(event.getEntity().getName())) { + Bukkit.broadcastMessage(String.format(messagePrefix + "%s%s%s was killed", ChatColor.RED, event.getEntity().getName(), ChatColor.WHITE)); } - Seeker.addEntry(player.getName()); + Seeker.add(player.getName()); + Hider.remove(player.getName()); + SeekerTeam.addEntry(player.getName()); Functions.resetPlayer(player); for(Player temp : playerList.values()) { Packet.setGlow(player, temp, false); @@ -218,17 +239,10 @@ public class EventListener implements Listener { Snowball snowball = (Snowball) event.getEntity(); if(snowball.getShooter() instanceof Player) { Player player = (Player) snowball.getShooter(); - if(Hider.hasEntry(player.getName())) { - glowTime++; + if(Hider.contains(player.getName())) { + Main.glow.onProjectilve(); 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); } } } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java similarity index 94% rename from src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java rename to src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java index cec59af..2a88178 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/CommandTabCompleter.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/TabCompleter.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek; +package net.tylermurphy.hideAndSeek.bukkit; import java.util.ArrayList; import java.util.List; @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; -public class CommandTabCompleter{ +public class TabCompleter{ public static List handleTabComplete(CommandSender sender, Command command, String label, String[] args) { if(args.length == 1) { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java new file mode 100644 index 0000000..eccaf39 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/bukkit/Tick.java @@ -0,0 +1,81 @@ +package net.tylermurphy.hideAndSeek.bukkit; + +import static net.tylermurphy.hideAndSeek.Store.*; + + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Sound; +import org.bukkit.entity.Player; + +import net.tylermurphy.hideAndSeek.command.Stop; +import net.tylermurphy.hideAndSeek.util.Functions; +import net.tylermurphy.hideAndSeek.util.Packet; + +public class Tick { + + static int tick = 0; + + public static void onTick() { + + if(board == null) { + Functions.loadScoreboard(); + } + + if(status.equals("Starting")) { + onStarting(); + } else if(status.equals("Playing")) { + onPlaying(); + } + + tick ++; + + if(( status.equals("Starting") || status.equals("Playing") ) && Hider.size() < 1) { + Bukkit.broadcastMessage(gameoverPrefix + "All hiders have been found."); + Stop.onStop(); + } + if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.size() < 1) { + Bukkit.broadcastMessage(abortPrefix + "All seekers have quit."); + Stop.onStop(); + } + } + + private static void onStarting() { + for(String playerName : Seeker) { + Player player = playerList.get(playerName); + if(player != null) { + player.teleport(new Location(Bukkit.getWorld("hideandseek_"+spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); + } + } + } + + private static void onPlaying() { + for(String playerName : Hider) { + Player player = playerList.get(playerName); + int distance = 100; + for(String seekerName : Seeker) { + Player seeker = playerList.get(seekerName); + int temp = (int) player.getLocation().distance(seeker.getLocation()); + if(distance > temp) { + distance = temp; + } + } + switch(tick%10) { + case 0: + if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f); + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 3: + if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f); + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 6: + if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + case 9: + if(distance < 20) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); + break; + } + } + } +} \ 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/command/About.java similarity index 94% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/About.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/About.java index 76cd28b..3c4a8f0 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/About.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/About.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java similarity index 88% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/Help.java index a998a11..f33717e 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Help.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Help.java @@ -1,9 +1,9 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import org.bukkit.command.CommandSender; import net.md_5.bungee.api.ChatColor; -import net.tylermurphy.hideAndSeek.CommandHandler; +import net.tylermurphy.hideAndSeek.bukkit.CommandHandler; import net.tylermurphy.hideAndSeek.util.ICommand; public class Help implements ICommand { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Reload.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java similarity index 77% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/Reload.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java index 04128c5..1b1f1d5 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Reload.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Reload.java @@ -1,8 +1,9 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import org.bukkit.command.CommandSender; import net.tylermurphy.hideAndSeek.Store; +import net.tylermurphy.hideAndSeek.util.Functions; import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; @@ -11,6 +12,9 @@ public class Reload implements ICommand { public void execute(CommandSender sender, String[] args) { Store.loadConfig(); + try { + Functions.loadScoreboard(); + } catch(Exception e) {} sender.sendMessage(messagePrefix + "Reloaded the config"); } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java similarity index 98% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java index 37ead8a..2956c80 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SaveMap.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SaveMap.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import static net.tylermurphy.hideAndSeek.Store.*; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SetBorder.java similarity index 95% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/SetBorder.java index ae99c7a..e8ad2c9 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetBorder.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SetBorder.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import static net.tylermurphy.hideAndSeek.Store.*; @@ -30,7 +30,7 @@ public class SetBorder implements ICommand { addToSection("worldBorder",temp); saveConfig(); sender.sendMessage(messagePrefix + "Disabled worldborder."); - Functions.resetWorldborder(); + Functions.resetWorldborder(spawnWorld); return; } int num,delay; @@ -68,7 +68,7 @@ public class SetBorder implements ICommand { addToSection("worldBorder",temp); sender.sendMessage(messagePrefix + "Set border center to current location, size to "+num+", and delay to "+delay); saveConfig(); - Functions.resetWorldborder(); + Functions.resetWorldborder(spawnWorld); } public String getLabel() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java b/src/main/java/net/tylermurphy/hideAndSeek/command/SetSpawnLocation.java similarity index 97% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/SetSpawnLocation.java index 18e3703..62d6bc9 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/SetSpawnLocation.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/SetSpawnLocation.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import static net.tylermurphy.hideAndSeek.Store.*; diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java similarity index 67% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/Start.java index a8eec85..a49ce41 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Start.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Start.java @@ -1,7 +1,6 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.command.CommandSender; @@ -10,12 +9,16 @@ import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.events.Glow; +import net.tylermurphy.hideAndSeek.events.Taunt; +import net.tylermurphy.hideAndSeek.events.Worldborder; import net.tylermurphy.hideAndSeek.util.Functions; import net.tylermurphy.hideAndSeek.util.ICommand; import static net.tylermurphy.hideAndSeek.Store.*; import java.io.File; +import java.util.ArrayList; import java.util.Random; public class Start implements ICommand { @@ -55,10 +58,17 @@ public class Start implements ICommand { sender.sendMessage(errorPrefix + "Invalid player: " + seekerName); return; } + Hider = new ArrayList(); + Seeker = new ArrayList(); + Spectator = new ArrayList(); for(Player temp : playerList.values()) { - Hider.addEntry(temp.getName()); + if(temp.getName().equals(seeker.getName())) + continue; + Hider.add(temp.getName()); + HiderTeam.addEntry(temp.getName()); } - Seeker.addEntry(seeker.getName()); + Seeker.add(seeker.getName()); + SeekerTeam.addEntry(seeker.getName()); for(Player player : playerList.values()) { player.getInventory().clear(); @@ -68,21 +78,20 @@ 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())); - for(String playerName : Seeker.getEntries()) { + for(String playerName : Seeker) { 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()) { + for(String playerName : Hider) { Player player = playerList.get(playerName); if(player != null) { player.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,1000000,5,false,false)); } } - Functions.resetWorldborder(); + Functions.resetWorldborder("hideandseek_"+spawnWorld); status = "Starting"; int temp = gameId; Bukkit.getServer().broadcastMessage(messagePrefix + "Hiders have 30 seconds to hide!"); @@ -137,75 +146,24 @@ public class Start implements ICommand { for(Player player : playerList.values()) { Functions.resetPlayer(player); } + Main.worldborder = null; + Main.taunt = null; + Main.glow = null; + + if(worldborderEnabled) { + Main.worldborder = new Worldborder(gameId); + Main.worldborder.schedule(); + } + + Main.taunt = new Taunt(gameId); + Main.taunt.schedule(); + + Main.glow = new Glow(gameId); } }, 20 * 30); - if(worldborderEnabled) { - scheduleWorldborder(); - } - scheduleTaunt(); - } - private 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(tauntPrefix + " 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(); - } - } - } - } - }); - } - - private 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(worldborderPrefix + "Worldborder decreacing by 100 blocks over the next 30s"); - currentWorldborderSize -= 100; - decreaseBorder = true; - } else { - break; - } - } - } - }); - } - public String getLabel() { return "start"; } diff --git a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java similarity index 90% rename from src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java rename to src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java index b709120..c956d3d 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/commands/Stop.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/command/Stop.java @@ -1,4 +1,4 @@ -package net.tylermurphy.hideAndSeek.commands; +package net.tylermurphy.hideAndSeek.command; import static net.tylermurphy.hideAndSeek.Store.*; @@ -35,9 +35,11 @@ public class Stop implements ICommand { if(status.equals("Standby")) return; status = "Standby"; gameId++; + Functions.resetWorldborder("hideandseek_"+spawnWorld); for(Player player : playerList.values()) { player.setGameMode(GameMode.ADVENTURE); - Hider.addEntry(player.getName()); + Hider.add(player.getName()); + HiderTeam.addEntry(player.getName()); player.getInventory().clear(); player.teleport(new Location(Bukkit.getWorld(spawnWorld), spawnPosition.getX(),spawnPosition.getY(),spawnPosition.getZ())); for(PotionEffect effect : player.getActivePotionEffects()){ @@ -48,7 +50,6 @@ public class Stop implements ICommand { Packet.setGlow(player, temp, false); } } - Functions.resetWorldborder(); } public String getUsage() { diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java b/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java deleted file mode 100644 index 042b0a3..0000000 --- a/src/main/java/net/tylermurphy/hideAndSeek/events/EventTick.java +++ /dev/null @@ -1,169 +0,0 @@ -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.scoreboard.Scoreboard; -import org.bukkit.scoreboard.ScoreboardManager; -import org.bukkit.scoreboard.Team.Option; -import org.bukkit.scoreboard.Team.OptionStatus; - -import net.tylermurphy.hideAndSeek.commands.Stop; -import net.tylermurphy.hideAndSeek.util.Packet; - -public class EventTick { - - static int tick = 0; - - public static void onTick() { - - if(board == null) { - ScoreboardManager manager = Bukkit.getScoreboardManager(); - Scoreboard mainBoard = manager.getMainScoreboard(); - - try { mainBoard.registerNewTeam("Seeker");} catch(Exception e) {} - Seeker = mainBoard.getTeam("Seeker"); - Seeker.setColor(ChatColor.RED); - if(nametagsVisible) - Seeker.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OTHER_TEAMS); - else - 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); - if(nametagsVisible) - Hider.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OWN_TEAM); - else - 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; - } - - 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); - } - } - - if(status.equals("Starting")) { - onStarting(); - } else if(status.equals("Playing")) { - onPlaying(); - } - - tick ++; - - if(( status.equals("Starting") || status.equals("Playing") ) && Hider.getSize() < 1) { - Bukkit.broadcastMessage(gameoverPrefix + "All hiders have been found."); - Stop.onStop(); - } - if(( status.equals("Starting") || status.equals("Playing") ) && Seeker.getSize() < 1) { - Bukkit.broadcastMessage(abortPrefix + "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(Bukkit.getWorld("hideandseek_"+spawnWorld), 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(tauntPrefix + " Taunt has been activated"); - } - tauntPlayer = ""; - } - for(String playerName : Hider.getEntries()) { - Player player = playerList.get(playerName); - 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) { - Packet.setGlow(player, seeker, true); - } else { - Packet.setGlow(player, seeker, false); - } - } - switch(tick%10) { - case 0: - if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .5f, 1f); - if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); - break; - case 3: - if(distance < 30) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BASEDRUM, .3f, 1f); - if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); - break; - case 6: - if(distance < 10) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); - break; - case 9: - if(distance < 20) Packet.playSound(player, Sound.BLOCK_NOTE_BLOCK_BIT, .3f, 1f); - break; - } - } - } - -} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/Glow.java b/src/main/java/net/tylermurphy/hideAndSeek/events/Glow.java new file mode 100644 index 0000000..ec94803 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/Glow.java @@ -0,0 +1,69 @@ +package net.tylermurphy.hideAndSeek.events; + +import static net.tylermurphy.hideAndSeek.Store.*; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import net.tylermurphy.hideAndSeek.Main; +import net.tylermurphy.hideAndSeek.util.Packet; + +public class Glow { + + private final int temp; + private int glowTime; + private boolean running; + + public Glow(int temp) { + this.temp = temp; + this.glowTime = 0; + } + + public void onProjectilve() { + glowTime++; + if(!running) + startGlow(); + } + + private void startGlow() { + running = true; + for(String hiderName : Hider) { + Player hider = playerList.get(hiderName); + if(hider == null) continue; + for(String seekerName : Seeker) { + Player seeker = playerList.get(seekerName); + if(seeker == null) continue; + Packet.setGlow(hider, seeker, true); + } + } + waitGlow(); + } + + private void waitGlow() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + if(temp != gameId) return; + glowTime--; + glowTime = Math.max(glowTime, 0); + if(glowTime == 0) { + stopGlow(); + } else { + waitGlow(); + } + } + }, 20*30); + } + + private void stopGlow() { + for(String hiderName : Hider) { + Player hider = playerList.get(hiderName); + if(hider == null) continue; + for(String seekerName : Seeker) { + Player seeker = playerList.get(seekerName); + if(seeker == null) continue; + Packet.setGlow(hider, seeker, false); + } + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/Taunt.java b/src/main/java/net/tylermurphy/hideAndSeek/events/Taunt.java new file mode 100644 index 0000000..f2f09a1 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/Taunt.java @@ -0,0 +1,100 @@ +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.entity.EntityType; +import org.bukkit.entity.Firework; +import org.bukkit.entity.Player; +import org.bukkit.inventory.meta.FireworkMeta; + +import net.tylermurphy.hideAndSeek.Main; + +public class Taunt { + + private final int temp; + private String tauntPlayer; + + public Taunt(int temp) { + this.temp = temp; + } + + public void schedule() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + tryTaunt(); + } + },20*60*5); + } + + private void waitTaunt() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + tryTaunt(); + } + },20*60); + } + + private void tryTaunt() { + if(temp != gameId) return; + if(Math.random() > .8) { + executeTaunt(); + } else { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + tryTaunt(); + } + },20*60); + } + } + + private void executeTaunt() { + Player taunted = null; + int rand = (int) (Math.random()*Hider.size()); + for(Player player : playerList.values()) { + if(Hider.contains(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(tauntPrefix + " A random hider will be taunted in the next 30s"); + tauntPlayer = taunted.getName(); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + if(temp != gameId) return; + 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(tauntPrefix + " Taunt has been activated"); + } + tauntPlayer = ""; + waitTaunt(); + } + },20*30); + } else { + waitTaunt(); + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/events/Worldborder.java b/src/main/java/net/tylermurphy/hideAndSeek/events/Worldborder.java new file mode 100644 index 0000000..5e64381 --- /dev/null +++ b/src/main/java/net/tylermurphy/hideAndSeek/events/Worldborder.java @@ -0,0 +1,43 @@ +package net.tylermurphy.hideAndSeek.events; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.WorldBorder; + +import net.tylermurphy.hideAndSeek.Main; + +import static net.tylermurphy.hideAndSeek.Store.*; + +public class Worldborder { + + private final int temp; + + public Worldborder(int temp) { + this.temp = temp; + } + + public void schedule() { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + decreaceWorldborder(); + } + },20*60*worldborderDelay); + } + + private void decreaceWorldborder() { + if(temp != gameId) return; + if(currentWorldborderSize-100 > 100) { + Bukkit.getServer().broadcastMessage(worldborderPrefix + "Worldborder decreacing by 100 blocks over the next 30s"); + currentWorldborderSize -= 100; + World world = Bukkit.getWorld("hideandseek_"+spawnWorld); + WorldBorder border = world.getWorldBorder(); + border.setSize(border.getSize()-100,30); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable() { + public void run() { + decreaceWorldborder(); + } + },20*60*worldborderDelay); + } + } + +} diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java index 57ae441..55ff03a 100644 --- a/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java +++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Functions.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.List; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.WorldBorder; @@ -19,6 +20,10 @@ import org.bukkit.potion.PotionData; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; 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 net.tylermurphy.hideAndSeek.Main; @@ -30,7 +35,7 @@ public class Functions { player.removePotionEffect(effect.getType()); } player.addPotionEffect(new PotionEffect(PotionEffectType.DOLPHINS_GRACE, 1000000, 1, false, false)); - if(Seeker.getEntries().contains(player.getName())){ + if(Seeker.contains(player.getName())){ ItemStack diamondSword = new ItemStack(Material.DIAMOND_SWORD,1); diamondSword.addEnchantment(Enchantment.DAMAGE_ALL, 1); ItemMeta diamondSwordMeta = diamondSword.getItemMeta(); @@ -51,7 +56,7 @@ public class Functions { player.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_FALLING, 1000000, 1, false, false)); player.addPotionEffect(new PotionEffect(PotionEffectType.WATER_BREATHING, 1000000, 10, false, false)); } - else if(Hider.getEntries().contains(player.getName())){ + else if(Hider.contains(player.getName())){ ItemStack stoneSword = new ItemStack(Material.STONE_SWORD,1); stoneSword.addEnchantment(Enchantment.DAMAGE_ALL, 2); ItemMeta stoneSwordMeta = stoneSword.getItemMeta(); @@ -87,15 +92,15 @@ public class Functions { } } - public static void resetWorldborder() { + public static void resetWorldborder(String worldName) { if(worldborderEnabled) { - World world = Bukkit.getWorld("world"); + World world = Bukkit.getWorld(worldName); WorldBorder border = world.getWorldBorder(); border.setSize(worldborderSize); border.setCenter(worldborderPosition.getX(), worldborderPosition.getZ()); currentWorldborderSize = worldborderSize; } else { - World world = Bukkit.getWorld("world"); + World world = Bukkit.getWorld(worldName); WorldBorder border = world.getWorldBorder(); border.setSize(30000000); border.setCenter(0, 0); @@ -119,5 +124,37 @@ public class Functions { unloadMap(mapname); loadMap(mapname); } + + public static void loadScoreboard() { + + ScoreboardManager manager = Bukkit.getScoreboardManager(); + Scoreboard mainBoard = manager.getMainScoreboard(); + + try { mainBoard.registerNewTeam("Seeker");} catch(Exception e) {} + SeekerTeam = mainBoard.getTeam("Seeker"); + SeekerTeam.setColor(ChatColor.RED); + if(nametagsVisible) + SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OTHER_TEAMS); + else + SeekerTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + SeekerTeam.setAllowFriendlyFire(false); + + try { mainBoard.registerNewTeam("Hider");} catch(Exception e) {} + HiderTeam = mainBoard.getTeam("Hider"); + HiderTeam.setColor(ChatColor.GOLD); + if(nametagsVisible) + HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.FOR_OWN_TEAM); + else + HiderTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + HiderTeam.setAllowFriendlyFire(false); + + try { mainBoard.registerNewTeam("Spectator");} catch(Exception e) {} + SpectatorTeam = mainBoard.getTeam("Spectator"); + SpectatorTeam.setColor(ChatColor.GRAY); + SpectatorTeam.setOption(Option.NAME_TAG_VISIBILITY, OptionStatus.NEVER); + SpectatorTeam.setAllowFriendlyFire(false); + + board = mainBoard; + } -} +} \ No newline at end of file