diff --git a/pom.xml b/pom.xml index d274c54..fe1ae8b 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ 1.0-SNAPSHOT - 17 - 17 + 16 + 16 UTF-8 @@ -21,7 +21,7 @@ vault-repo - http://nexus.hc.to/content/repositories/pub_releases + https://nexus.hc.to/content/repositories/pub_releases engine-hub-repo @@ -33,7 +33,7 @@ org.spigotmc spigot-api - 1.19-R0.1-SNAPSHOT + 1.19.2-R0.1-SNAPSHOT provided @@ -52,7 +52,7 @@ org.jetbrains annotations 23.0.0 - compile + provided diff --git a/src/main/java/net/knarcraft/hungerarena/Arena.java b/src/main/java/net/knarcraft/hungerarena/Arena.java index bf510ec..4c3e3e2 100644 --- a/src/main/java/net/knarcraft/hungerarena/Arena.java +++ b/src/main/java/net/knarcraft/hungerarena/Arena.java @@ -6,6 +6,81 @@ import org.bukkit.World; import java.util.List; import java.util.Map; -public record Arena(int arenaId, World world, List arenaPlayers, ArenaState arenaState, boolean canJoin, - boolean open, int countdownTimer, int maxPlayers, int gracePeriod, Map locations) { +public class Arena { + + private final int arenaId; + private final World world; + private final List arenaPlayers; + private final ArenaState arenaState; + private final boolean canJoin; + private final boolean open; + private final int countdownTimer; + private int maxPlayers; + private int gracePeriod; + private final Map locations; + + public Arena(int arenaId, World world, List arenaPlayers, ArenaState arenaState, boolean canJoin, + boolean open, int countdownTimer, int maxPlayers, int gracePeriod, + Map locations) { + this.arenaId = arenaId; + this.world = world; + this.arenaPlayers = arenaPlayers; + this.arenaState = arenaState; + this.canJoin = canJoin; + this.open = open; + this.countdownTimer = countdownTimer; + this.maxPlayers = maxPlayers; + this.gracePeriod = gracePeriod; + this.locations = locations; + } + + //TODO: Add arena name to make them easier to keep track of + public void setMaxPlayers(int maxPlayers) { + this.maxPlayers = maxPlayers; + } + + public List getArenaPlayers() { + return arenaPlayers; + } + + public World getWorld() { + return world; + } + + public int getArenaId() { + return arenaId; + } + + public ArenaState getArenaState() { + return arenaState; + } + + public boolean isCanJoin() { + return canJoin; + } + + public boolean isOpen() { + return open; + } + + public int getCountdownTimer() { + return countdownTimer; + } + + public int getMaxPlayers() { + return maxPlayers; + } + + public int getGracePeriod() { + return gracePeriod; + } + + public Map getLocations() { + return locations; + } + + public void setGracePeriod(int gracePeriod) { + this.gracePeriod = gracePeriod; + } + } diff --git a/src/main/java/net/knarcraft/hungerarena/ArenaPlayer.java b/src/main/java/net/knarcraft/hungerarena/ArenaPlayer.java index 6e072c0..eedcac6 100644 --- a/src/main/java/net/knarcraft/hungerarena/ArenaPlayer.java +++ b/src/main/java/net/knarcraft/hungerarena/ArenaPlayer.java @@ -2,6 +2,191 @@ package net.knarcraft.hungerarena; import org.bukkit.entity.Player; -public record ArenaPlayer(Player player, boolean ready, boolean quit, boolean dead, boolean isOut, boolean isWatching, - boolean needConfirmation, boolean inArena, boolean frozen) { +/** + * A container for all properties stored for a player in an arena + */ +public class ArenaPlayer { + + private Player player; + private Arena arena; + private boolean ready; + private boolean quit; + private boolean dead; + private boolean isOut; + private boolean isWatching; + private boolean needConfirmation; + private boolean inArena; + private boolean frozen; + + /** + * Instantiates a new arena player + * + * @param player

The player this arena player represents

+ * @param arena

The arena the player is currently in

+ * @param ready

Whether the player is currently ready to start the game

+ * @param quit

Whether the player has quit the game

+ * @param dead

Whether the player has died

+ * @param isOut

Whether the player has left the game

+ * @param isWatching

Whether the player is watching the arena

+ * @param needConfirmation

Whether a conformation is necessary for the player to join the game

+ * @param inArena

Whether the player is currently in an arena

+ * @param frozen

Whether the player is currently frozen, not allowed to move

+ */ + public ArenaPlayer(Player player, Arena arena, boolean ready, boolean quit, boolean dead, boolean isOut, + boolean isWatching, boolean needConfirmation, boolean inArena, boolean frozen) { + this.player = player; + this.arena = arena; + this.ready = ready; + this.quit = quit; + this.dead = dead; + this.isOut = isOut; + this.isWatching = isWatching; + this.needConfirmation = needConfirmation; + this.inArena = inArena; + this.frozen = frozen; + } + + /** + * Gets the player this arena player corresponds to + * + * @return

The actual player

+ */ + public Player getPlayer() { + return player; + } + + public void setPlayer(Player player) { + this.player = player; + } + + /** + * Gets the arena this arena player is currently in + * + * @return

The arena this player is in, or null if not in an arena

+ */ + public Arena getArena() { + return arena; + } + + public void setArena(Arena arena) { + this.arena = arena; + } + + /** + * Gets whether this arena player is ready to start the game + * + * @return

True if this player is ready

+ */ + public boolean isReady() { + return ready; + } + + public void setReady(boolean ready) { + this.ready = ready; + } + + /** + * Gets whether this arena player has quit + * + *

If the player has been kicked, has died or has quit the game, this returns true.

+ * + * @return

True if this arena player has quit

+ */ + public boolean hasQuit() { + return quit; + } + + public void setQuit(boolean quit) { + this.quit = quit; + } + + /** + * Gets whether this arena player has died + * + * @return

True if this arena player has died

+ */ + public boolean isDead() { + return dead; + } + + public void setDead(boolean dead) { + this.dead = dead; + } + + /** + * Gets whether this arena player has left the game, and is "out" + * + * @return

True if this arena player is currently out

+ */ + public boolean isOut() { + return isOut; + } + + public void setOut(boolean out) { + isOut = out; + } + + /** + * Gets whether this arena player is currently watching the arena + * + * @return

True if currently watching the arena

+ */ + public boolean isWatching() { + return isWatching; + } + + public void setWatching(boolean watching) { + isWatching = watching; + } + + /** + * Gets whether ths arena player needs to confirm that they want to join the game + * + *

As some arenas have entry fees, they might require that a player confirms that they really want to join the + * arena. If a player hasn't confirmed that they want to join, this will be true.

+ * + * @return

True if this arena player needs to confirm that they are joining

+ */ + public boolean needConfirmation() { + return needConfirmation; + } + + public void setNeedConfirmation(boolean needConfirmation) { + this.needConfirmation = needConfirmation; + } + + /** + * Gets whether this arena player is currently in an arena + * + * @return

True if in an arena

+ */ + public boolean isInArena() { + return inArena; + } + + /** + * Sets whether this arena player is currently in an arena + * + * @param inArena

True if this arena player is currently in an arena

+ */ + public void setInArena(boolean inArena) { + this.inArena = inArena; + } + + /** + * Gets whether this arena player is frozen + * + *

A frozen player is a player that is currently prevented from moving, such as when players are forced to stay + * on their pedestals until the countdown expires.

+ * + * @return

True if this arena player is frozen

+ */ + public boolean isFrozen() { + return frozen; + } + + public void setFrozen(boolean frozen) { + this.frozen = frozen; + } + } diff --git a/src/main/java/net/knarcraft/hungerarena/ArenaState.java b/src/main/java/net/knarcraft/hungerarena/ArenaState.java index 6179a1d..a821645 100644 --- a/src/main/java/net/knarcraft/hungerarena/ArenaState.java +++ b/src/main/java/net/knarcraft/hungerarena/ArenaState.java @@ -1,9 +1,9 @@ package net.knarcraft.hungerarena; public enum ArenaState { - + IDLE, RUNNING, WARPED - + } diff --git a/src/main/java/net/knarcraft/hungerarena/Chests.java b/src/main/java/net/knarcraft/hungerarena/Chests.java index 020a67b..bc665ef 100644 --- a/src/main/java/net/knarcraft/hungerarena/Chests.java +++ b/src/main/java/net/knarcraft/hungerarena/Chests.java @@ -46,9 +46,9 @@ public class Chests implements Listener { Block block = event.getClickedBlock(); Player p = event.getPlayer(); if (plugin.getArena(p) != null) { - int a = plugin.getArena(p); + int a = plugin.getArena(p).getArenaId(); if (plugin.Playing.get(a).contains(p.getName()) && plugin.canJoin.get(a)) { - if (!plugin.restrictedWorlds || (plugin.restrictedWorlds && plugin.worldsNames.containsValue(p.getWorld().getName()))) { + if (!plugin.restrictedWorlds || (plugin.restrictedWorlds && plugin.worldNames.containsValue(p.getWorld().getName()))) { if (block != null) { if (block.getState() instanceof InventoryHolder) { ItemStack[] itemsinchest = ((InventoryHolder) block.getState()).getInventory().getContents().clone(); diff --git a/src/main/java/net/knarcraft/hungerarena/HaCommands.java b/src/main/java/net/knarcraft/hungerarena/HaCommands.java index b4e4815..6ba96d0 100644 --- a/src/main/java/net/knarcraft/hungerarena/HaCommands.java +++ b/src/main/java/net/knarcraft/hungerarena/HaCommands.java @@ -33,6 +33,7 @@ import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Score; import org.bukkit.scoreboard.Scoreboard; +import org.jetbrains.annotations.NotNull; import java.lang.reflect.Method; import java.util.ArrayList; @@ -40,6 +41,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.UUID; public class HaCommands implements CommandExecutor { public final HungerArena plugin; @@ -49,8 +51,8 @@ public class HaCommands implements CommandExecutor { } int i = 0; - int arena = 1; - boolean NoPlayerSpawns = true; + int arenaId = 1; + boolean noPlayerSpawns = true; private void clearInv(Player p) { p.getInventory().clear(); @@ -62,47 +64,48 @@ public class HaCommands implements CommandExecutor { } private Location getArenaSpawn() { - String[] Spawncoords; - if (plugin.spawns.getString("Spawn_coordinates." + arena) != null) { - Spawncoords = plugin.spawns.getString("Spawn_coordinates." + arena).split(","); + String[] spawnCoordinates; + if (plugin.spawns.getString("Spawn_coordinates." + arenaId) != null) { + spawnCoordinates = plugin.spawns.getString("Spawn_coordinates." + arenaId).split(","); } else { - Spawncoords = plugin.spawns.getString("Spawn_coordinates.0").split(","); + spawnCoordinates = plugin.spawns.getString("Spawn_coordinates.0").split(","); } - double spawnx = Double.parseDouble(Spawncoords[0]); - double spawny = Double.parseDouble(Spawncoords[1]); - double spawnz = Double.parseDouble(Spawncoords[2]); - String spawnworld = Spawncoords[3]; - World spawnw = plugin.getServer().getWorld(spawnworld); - return new Location(spawnw, spawnx, spawny, spawnz); + double spawnX = Double.parseDouble(spawnCoordinates[0]); + double spawnY = Double.parseDouble(spawnCoordinates[1]); + double spawnZ = Double.parseDouble(spawnCoordinates[2]); + String spawnWorldName = spawnCoordinates[3]; + World spawnWorld = plugin.getServer().getWorld(spawnWorldName); + return new Location(spawnWorld, spawnX, spawnY, spawnZ); } @Override - public boolean onCommand(final CommandSender sender, Command cmd, String commandLabel, String[] args) { + public boolean onCommand(final @NotNull CommandSender sender, @NotNull Command cmd, @NotNull String commandLabel, String[] args) { boolean console = false; - boolean playr = false; + boolean isPlayer = false; if (sender instanceof ConsoleCommandSender) { console = true; } else if (sender instanceof Player) { - playr = true; + isPlayer = true; } - if (playr) { - final Player p = (Player) sender; - final String pname = p.getName(); - String ThisWorld = p.getWorld().getName(); - for (int i : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(i) != null) { - if (plugin.worldsNames.get(i).equals(ThisWorld)) { - arena = i; - NoPlayerSpawns = false; + if (isPlayer) { + final Player player = (Player) sender; + final UUID playerUUID = player.getUniqueId(); + final String playerName = player.getName(); + String ThisWorld = player.getWorld().getName(); + for (int i : plugin.worldNames.keySet()) { + if (plugin.worldNames.get(i) != null) { + if (plugin.worldNames.get(i).equals(ThisWorld)) { + arenaId = i; + noPlayerSpawns = false; } } } - if (plugin.getArena(p) != null) { - arena = plugin.getArena(p); - NoPlayerSpawns = false; + if (plugin.getArena(player) != null) { + arenaId = plugin.getArena(player).getArenaId(); + noPlayerSpawns = false; } if (cmd.getName().equalsIgnoreCase("Ha")) { if (args.length == 0) { @@ -110,275 +113,276 @@ public class HaCommands implements CommandExecutor { sender.sendMessage(ChatColor.GREEN + "[HungerArena] Update by " + ChatColor.AQUA + "Jeppa ! "); return false; } else if (args[0].equalsIgnoreCase("NewArena")) { - if (p.hasPermission("HungerArena.StartPoint")) { + if (player.hasPermission("HungerArena.StartPoint")) { if (args.length < 2) { - p.sendMessage(ChatColor.AQUA + "You have to enter the arena number as 2nd argument"); + player.sendMessage(ChatColor.AQUA + "You have to enter the arena number as 2nd argument"); } else { try { - arena = Integer.parseInt(args[1]); + arenaId = Integer.parseInt(args[1]); } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); + player.sendMessage(ChatColor.RED + "Argument not an integer!"); return false; } - if (plugin.worldsNames.containsValue(ThisWorld)) { - p.sendMessage(ChatColor.RED + "This world already has an areana! \n (only one arena per world possible, yet!)"); + if (plugin.worldNames.containsValue(ThisWorld)) { + player.sendMessage(ChatColor.RED + "This world already has an areana! \n (only one arena per world possible, yet!)"); return false; } - ((Player) sender).performCommand("startpoint " + arena); + ((Player) sender).performCommand("startpoint " + arenaId); } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else if (args[0].equalsIgnoreCase("SetSpawn")) { - if (p.hasPermission("HungerArena.SetSpawn")) { - if ((NoPlayerSpawns) && (args.length < 2)) { - p.sendMessage(ChatColor.AQUA + "You have to set the playerspawns first! Use /ha newarena \nOr enter the arena number as 2nd argument, \n0 is default/fallback!"); + if (player.hasPermission("HungerArena.SetSpawn")) { + if ((noPlayerSpawns) && (args.length < 2)) { + player.sendMessage(ChatColor.AQUA + "You have to set the playerspawns first! Use /ha newarena \nOr enter the arena number as 2nd argument, \n0 is default/fallback!"); } else { - double x = p.getLocation().getX(); - double y = p.getLocation().getY(); - double z = p.getLocation().getZ(); + double x = player.getLocation().getX(); + double y = player.getLocation().getY(); + double z = player.getLocation().getZ(); if (plugin.spawns.getString("Spawn_coordinates.0") == null) { plugin.spawns.set("Spawn_coordinates.0", x + "," + y + "," + z + "," + ThisWorld); plugin.spawns.set("Spawns_set.0", "true"); } if (args.length >= 2) { try { - arena = Integer.parseInt(args[1]); + arenaId = Integer.parseInt(args[1]); } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); + player.sendMessage(ChatColor.RED + "Argument not an integer!"); return false; } } - plugin.spawns.set("Spawn_coordinates." + arena, x + "," + y + "," + z + "," + ThisWorld); - plugin.spawns.set("Spawns_set." + arena, "true"); + plugin.spawns.set("Spawn_coordinates." + arenaId, x + "," + y + "," + z + "," + ThisWorld); + plugin.spawns.set("Spawns_set." + arenaId, "true"); plugin.saveSpawns(); - p.sendMessage(ChatColor.AQUA + "You have set the spawn for dead tributes!"); + player.sendMessage(ChatColor.AQUA + "You have set the spawn for dead tributes!"); } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else if (args[0].equalsIgnoreCase("SetTorch")) { - if (p.hasPermission("HungerArena.SetSpawn")) { + if (player.hasPermission("HungerArena.SetSpawn")) { if (args.length < 2) { - p.sendMessage(ChatColor.AQUA + "You have to enter the arena number as 2nd argument"); + player.sendMessage(ChatColor.AQUA + "You have to enter the arena number as 2nd argument"); } else { - double x = p.getLocation().getX(); - double y = p.getLocation().getY(); - double z = p.getLocation().getZ(); + double x = player.getLocation().getX(); + double y = player.getLocation().getY(); + double z = player.getLocation().getZ(); if (args.length >= 2) { try { - arena = Integer.parseInt(args[1]); + arenaId = Integer.parseInt(args[1]); } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); + player.sendMessage(ChatColor.RED + "Argument not an integer!"); return true; } } - plugin.spawns.set("Start_torch." + arena, x + "," + y + "," + z + "," + ThisWorld); + plugin.spawns.set("Start_torch." + arenaId, x + "," + y + "," + z + "," + ThisWorld); plugin.saveSpawns(); - p.sendMessage(ChatColor.AQUA + "You have set the start redstone torch for arena " + arena + "!"); + player.sendMessage(ChatColor.AQUA + "You have set the start redstone torch for arena " + arenaId + "!"); } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else if (args[0].equalsIgnoreCase("Help")) { - help_sub(sender, playr, console); + help_sub(sender, isPlayer, console); - } else if (plugin.restrictedWorlds && !plugin.worldsNames.containsValue(ThisWorld)) { - p.sendMessage(ChatColor.RED + "That can't be run in this world!"); - } else if (!plugin.restrictedWorlds || plugin.restrictedWorlds && plugin.worldsNames.containsValue(ThisWorld)) { + } else if (plugin.restrictedWorlds && !plugin.worldNames.containsValue(ThisWorld)) { + player.sendMessage(ChatColor.RED + "That can't be run in this world!"); + } else if (!plugin.restrictedWorlds || plugin.restrictedWorlds && plugin.worldNames.containsValue(ThisWorld)) { //////////////////////////////////////// LISTING /////////////////////////////////////////////// if (args[0].equalsIgnoreCase("List")) { - if (p.hasPermission("HungerArena.GameMaker") || plugin.Watching.get(arena).contains(pname) || p.hasPermission("HungerArena.List")) { - list_sub(p, sender, playr, console, args); + if (player.hasPermission("HungerArena.GameMaker") || plugin.Watching.get(arenaId).contains(playerName) || player.hasPermission("HungerArena.List")) { + list_sub(player, sender, isPlayer, console, args); } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else if (args[0].equalsIgnoreCase("rList")) { - if (p.hasPermission("HungerArena.GameMaker")) { + if (player.hasPermission("HungerArena.GameMaker")) { rList_sub(sender, args); } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } //////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////// JOINING/LEAVING ////////////////////////////////////////// } else if (args[0].equalsIgnoreCase("Join")) { - if (p.hasPermission("HungerArena.Join")) { + if (player.hasPermission("HungerArena.Join")) { boolean needconfirm = false; for (int i : plugin.NeedConfirm.keySet()) { - if (plugin.NeedConfirm.get(i).contains(pname)) { + if (plugin.NeedConfirm.get(i).contains(playerName)) { needconfirm = true; - p.sendMessage(ChatColor.GOLD + "You need to run /ha confirm"); + player.sendMessage(ChatColor.GOLD + "You need to run /ha confirm"); } } if (!needconfirm) { if ((args.length >= 2) && checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); + arenaId = Integer.parseInt(args[1]); } else { - if (NoPlayerSpawns) { + if (noPlayerSpawns) { for (int i : plugin.Playing.keySet()) { if (plugin.Playing.get(i).size() < plugin.maxPlayers.get(i)) { - arena = i; - p.sendMessage(ChatColor.RED + "Found free slots in Arena " + arena + " !"); + arenaId = i; + player.sendMessage(ChatColor.RED + "Found free slots in Arena " + arenaId + " !"); } else if (i == plugin.Playing.size()) { - p.sendMessage(ChatColor.RED + "No free slots found / All games are full!"); + player.sendMessage(ChatColor.RED + "No free slots found / All games are full!"); } } } } - if ((plugin.Playing.get(arena) != null) && (plugin.location.get(arena).size() != 0)) { - if (plugin.Playing.get(arena).contains(pname)) { - p.sendMessage(ChatColor.RED + "You are already playing!"); - } else if (plugin.Dead.get(arena).contains(pname) || plugin.Quit.get(arena).contains(pname)) { - p.sendMessage(ChatColor.RED + "You DIED/QUIT! You can't join again!"); - } else if (plugin.Playing.get(arena).size() == plugin.maxPlayers.get(arena)) { - p.sendMessage(ChatColor.RED + "There are already " + plugin.maxPlayers.get(arena) + " Tributes in that Arena!"); - } else if (plugin.canJoin.get(arena)) { - p.sendMessage(ChatColor.RED + "That game is in progress!"); - } else if (!plugin.open.get(arena)) { - p.sendMessage(ChatColor.RED + "That game is closed!"); - } else if ((plugin.spawns.getString("Spawns_set." + arena) == null) || (plugin.spawns.getString("Spawns_set." + arena).equalsIgnoreCase("false"))) { - p.sendMessage(ChatColor.RED + "/ha setspawn for Arena " + arena + " hasn't been run!"); - } else if (plugin.getArena(p) != null) { - p.sendMessage(ChatColor.RED + "You are already in an arena!"); + if ((plugin.Playing.get(arenaId) != null) && (plugin.location.get(arenaId).size() != 0)) { + if (plugin.Playing.get(arenaId).contains(playerName)) { + player.sendMessage(ChatColor.RED + "You are already playing!"); + } else if (plugin.Dead.get(arenaId).contains(playerName) || plugin.Quit.get(arenaId).contains(playerName)) { + player.sendMessage(ChatColor.RED + "You DIED/QUIT! You can't join again!"); + } else if (plugin.Playing.get(arenaId).size() == plugin.maxPlayers.get(arenaId)) { + player.sendMessage(ChatColor.RED + "There are already " + plugin.maxPlayers.get(arenaId) + " Tributes in that Arena!"); + } else if (plugin.canJoin.get(arenaId)) { + player.sendMessage(ChatColor.RED + "That game is in progress!"); + } else if (!plugin.open.get(arenaId)) { + player.sendMessage(ChatColor.RED + "That game is closed!"); + } else if ((plugin.spawns.getString("Spawns_set." + arenaId) == null) || (plugin.spawns.getString("Spawns_set." + arenaId).equalsIgnoreCase("false"))) { + player.sendMessage(ChatColor.RED + "/ha setspawn for Arena " + arenaId + " hasn't been run!"); + } else if (plugin.getArena(player) != null) { + player.sendMessage(ChatColor.RED + "You are already in an arena!"); } else if (plugin.config.getBoolean("Need_Confirm")) { if (plugin.config.getBoolean("EntryFee.enabled") && plugin.config.getBoolean("EntryFee.eco")) { - if (!(plugin.econ.getBalance(p) < plugin.config.getDouble("EntryFee.cost"))) { + if (!(plugin.econ.getBalance(player) < plugin.config.getDouble("EntryFee.cost"))) { i = 0; for (ItemStack fee : plugin.Fee) { int total = plugin.Fee.size(); - if (p.getInventory().containsAtLeast(fee, fee.getAmount())) { + if (player.getInventory().containsAtLeast(fee, fee.getAmount())) { i = i + 1; if (total == i) { - plugin.NeedConfirm.get(arena).add(pname); - p.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); + plugin.NeedConfirm.get(arenaId).add(playerUUID); + player.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); } } } if (plugin.Fee.size() > i) { - p.sendMessage(ChatColor.RED + "You are missing some items and can't join the games..."); + player.sendMessage(ChatColor.RED + "You are missing some items and can't join the games..."); } } else { - p.sendMessage(ChatColor.RED + "You don't have enough money to join!"); + player.sendMessage(ChatColor.RED + "You don't have enough money to join!"); } } else if (plugin.config.getBoolean("EntryFee.enabled") && !plugin.config.getBoolean("EntryFee.eco")) { i = 0; for (ItemStack fee : plugin.Fee) { int total = plugin.Fee.size(); - if (p.getInventory().containsAtLeast(fee, fee.getAmount())) { + if (player.getInventory().containsAtLeast(fee, fee.getAmount())) { i = i + 1; if (total == i) { - plugin.NeedConfirm.get(arena).add(pname); - p.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); + plugin.NeedConfirm.get(arenaId).add(playerUUID); + player.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); } } } if (plugin.Fee.size() > i) { - p.sendMessage(ChatColor.RED + "You are missing some items and can't join the games..."); + player.sendMessage(ChatColor.RED + "You are missing some items and can't join the games..."); } } else if (!plugin.config.getBoolean("EntryFee.enabled") && plugin.config.getBoolean("EntryFee.eco")) { - if (!(plugin.econ.getBalance(p) < plugin.config.getDouble("EntryFee.cost"))) { - plugin.NeedConfirm.get(arena).add(pname); - p.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); + if (!(plugin.econ.getBalance(player) < plugin.config.getDouble("EntryFee.cost"))) { + plugin.NeedConfirm.get(arenaId).add(playerUUID); + player.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); } else { - p.sendMessage(ChatColor.RED + "You don't have enough money to join!"); + player.sendMessage(ChatColor.RED + "You don't have enough money to join!"); } } else { - plugin.NeedConfirm.get(arena).add(pname); - p.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); + plugin.NeedConfirm.get(arenaId).add(playerUUID); + player.sendMessage(ChatColor.GOLD + "Your inventory will be cleared! Type /ha confirm to procede"); } } else if (plugin.config.getString("Need_Confirm").equalsIgnoreCase("false")) { - confirmSub(p, pname, ThisWorld); + confirmSub(player, playerName, ThisWorld); } } else { - p.sendMessage(ChatColor.RED + "That arena doesn't exist!"); + player.sendMessage(ChatColor.RED + "That arena doesn't exist!"); } } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } //////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////// CONFIRMATION /////////////////////////////////////////////// } else if (args[0].equalsIgnoreCase("Confirm")) { for (int v : plugin.NeedConfirm.keySet()) { - if (plugin.NeedConfirm.get(v).contains(pname)) { - arena = v; - confirmSub(p, pname, ThisWorld); + if (plugin.NeedConfirm.get(v).contains(playerName)) { + arenaId = v; + confirmSub(player, playerName, ThisWorld); } else if ((v == plugin.NeedConfirm.size()) && (plugin.config.getBoolean("Need_Confirm"))) { - p.sendMessage(ChatColor.RED + "You haven't joined any games!"); + player.sendMessage(ChatColor.RED + "You haven't joined any games!"); } } } else if (args[0].equalsIgnoreCase("Ready")) { - if (plugin.getArena(p) != null) { - arena = plugin.getArena(p); - if (plugin.Playing.get(arena).contains(pname)) { - if (plugin.Ready.get(arena).contains(pname)) { - p.sendMessage(ChatColor.RED + "You're already ready!"); - } else if (plugin.Playing.get(arena).size() == 1) { - p.sendMessage(ChatColor.RED + "You can't be ready when no one else is playing!"); + if (plugin.getArena(player) != null) { + arenaId = plugin.getArena(player).getArenaId(); + if (plugin.Playing.get(arenaId).contains(playerName)) { + if (plugin.Ready.get(arenaId).contains(playerName)) { + player.sendMessage(ChatColor.RED + "You're already ready!"); + } else if (plugin.Playing.get(arenaId).size() == 1) { + player.sendMessage(ChatColor.RED + "You can't be ready when no one else is playing!"); } else { - plugin.Ready.get(arena).add(pname); + plugin.Ready.get(arenaId).add(playerUUID); if (plugin.config.getBoolean("broadcastAll")) { - plugin.getServer().broadcastMessage(ChatColor.AQUA + "[HungerArena] Game " + arena + ": " + ChatColor.GRAY + plugin.Ready.get(arena).size() + "/" + plugin.maxPlayers.get(arena) + " Players ready!"); + plugin.getServer().broadcastMessage(ChatColor.AQUA + "[HungerArena] Game " + arenaId + ": " + ChatColor.GRAY + plugin.Ready.get(arenaId).size() + "/" + plugin.maxPlayers.get(arenaId) + " Players ready!"); } else { - for (String gn : plugin.Playing.get(arena)) { + for (UUID gn : plugin.Playing.get(arenaId)) { Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(ChatColor.GRAY + String.valueOf(plugin.Ready.get(arena).size()) + "/" + plugin.maxPlayers.get(arena) + " Players ready!"); + g.sendMessage(ChatColor.GRAY + String.valueOf(plugin.Ready.get(arenaId).size()) + "/" + plugin.maxPlayers.get(arenaId) + " Players ready!"); } } - p.sendMessage(ChatColor.AQUA + "You have marked yourself as READY!"); + player.sendMessage(ChatColor.AQUA + "You have marked yourself as READY!"); if (plugin.config.getBoolean("Auto_Warp")) { - if (((double) plugin.Playing.get(arena).size()) % 60 <= plugin.Ready.get(arena).size() || plugin.Playing.get(arena).size() == plugin.Ready.get(arena).size()) { - Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha warpall " + arena); + if (((double) plugin.Playing.get(arenaId).size()) % 60 <= plugin.Ready.get(arenaId).size() || plugin.Playing.get(arenaId).size() == plugin.Ready.get(arenaId).size()) { + Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha warpall " + arenaId); } } } } } else { - p.sendMessage(ChatColor.RED + "You aren't playing in any games!"); + player.sendMessage(ChatColor.RED + "You aren't playing in any games!"); } } else if (args[0].equalsIgnoreCase("Leave")) { - if (plugin.getArena(p) != null) { - arena = plugin.getArena(p); - if (plugin.canJoin.get(arena)) { - clearInv(p); - p.teleport(getArenaSpawn()); - plugin.Frozen.get(arena).remove(pname); + if (plugin.getArena(player) != null) { + Arena arena = plugin.getArena(player); + arenaId = arena.getArenaId(); + if (plugin.canJoin.get(arenaId)) { + clearInv(player); + player.teleport(getArenaSpawn()); + plugin.arenaPlayers.get(playerUUID).setFrozen(false); - if (plugin.Playing.get(arena).size() != 1) { - plugin.RestoreInv(p, pname); + if (plugin.Playing.get(arenaId).size() != 1) { + plugin.restoreInventory(player, playerName); } - plugin.winner(arena); + plugin.winner(arenaId); } else { - clearInv(p); - p.teleport(getArenaSpawn()); + clearInv(player); + player.teleport(getArenaSpawn()); - plugin.RestoreInv(p, pname); + plugin.restoreInventory(player, playerName); if (plugin.config.getBoolean("EntryFee.enabled") && plugin.config.getBoolean("EntryFee.eco")) { - plugin.econ.depositPlayer(p, plugin.config.getDouble("EntryFee.cost")); - p.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + "$" + plugin.config.getDouble("EntryFee.cost") + " has been added to your account!"); + plugin.econ.depositPlayer(player, plugin.config.getDouble("EntryFee.cost")); + player.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + "$" + plugin.config.getDouble("EntryFee.cost") + " has been added to your account!"); for (ItemStack fees : plugin.Fee) { - p.getInventory().addItem(fees); - p.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + fees.getType().toString().toLowerCase().replace("_", " ") + " was refunded because you left the games."); + player.getInventory().addItem(fees); + player.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + fees.getType().toString().toLowerCase().replace("_", " ") + " was refunded because you left the games."); } } else if (plugin.config.getBoolean("EntryFee.enabled") && !plugin.config.getBoolean("EntryFee.eco")) { for (ItemStack fees : plugin.Fee) { - p.getInventory().addItem(fees); - p.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + fees.getType().toString().toLowerCase().replace("_", " ") + " was refunded because you left the games."); + player.getInventory().addItem(fees); + player.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + fees.getType().toString().toLowerCase().replace("_", " ") + " was refunded because you left the games."); } } else if (!plugin.config.getBoolean("EntryFee.enabled") && plugin.config.getBoolean("EntryFee.eco")) { - plugin.econ.depositPlayer(p, plugin.config.getDouble("EntryFee.cost")); - p.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + "$" + plugin.config.getDouble("EntryFee.cost") + " has added to your account!"); + plugin.econ.depositPlayer(player, plugin.config.getDouble("EntryFee.cost")); + player.sendMessage(ChatColor.GOLD + "[HungerArena] " + ChatColor.GREEN + "$" + plugin.config.getDouble("EntryFee.cost") + " has added to your account!"); } } } else { - p.sendMessage(ChatColor.RED + "You aren't in any games!"); + player.sendMessage(ChatColor.RED + "You aren't in any games!"); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////// SPECTATOR RELATED ////////////////////////////////// @@ -386,15 +390,15 @@ public class HaCommands implements CommandExecutor { if (sender.hasPermission("HungerArena.Watch")) { if (args.length >= 2) { if (checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); - if (!plugin.Watching.get(arena).contains(pname) && plugin.getArena(p) == null && plugin.canJoin.get(arena)) { - plugin.Watching.get(arena).add(pname); - p.teleport(Bukkit.getPlayer(plugin.Playing.get(arena).get(0))); + arenaId = Integer.parseInt(args[1]); + if (!plugin.Watching.get(arenaId).contains(playerName) && plugin.getArena(player) == null && plugin.canJoin.get(arenaId)) { + plugin.Watching.get(arenaId).add(playerUUID); + player.teleport(Bukkit.getPlayer(plugin.Playing.get(arenaId).get(0))); for (Player online : plugin.getServer().getOnlinePlayers()) { - online.hidePlayer(plugin, p); + online.hidePlayer(plugin, player); } - p.setAllowFlight(true); - p.sendMessage(ChatColor.AQUA + "You can now spectate!"); + player.setAllowFlight(true); + player.sendMessage(ChatColor.AQUA + "You can now spectate!"); Scoreboard scoreboard = plugin.getServer().getScoreboardManager().getNewScoreboard(); Objective sobj; try { @@ -408,45 +412,45 @@ public class HaCommands implements CommandExecutor { Score splayers = sobj.getScore((ChatColor.RED + "Players")); splayers.setScore(0); sobj.setDisplaySlot(DisplaySlot.SIDEBAR); - p.setScoreboard(scoreboard); - plugin.scoreboards.put(p.getName(), p.getScoreboard()); - } else if (!plugin.canJoin.get(arena)) { - p.sendMessage(ChatColor.RED + "That game isn't in progress!"); - } else if (plugin.Playing.get(arena).contains(pname)) { - p.sendMessage(ChatColor.RED + "You can't watch while you're playing!"); - } else if (plugin.Watching.get(arena).contains(pname)) { - plugin.Watching.get(arena).remove(pname); + player.setScoreboard(scoreboard); + plugin.scoreboards.put(player.getName(), player.getScoreboard()); + } else if (!plugin.canJoin.get(arenaId)) { + player.sendMessage(ChatColor.RED + "That game isn't in progress!"); + } else if (plugin.Playing.get(arenaId).contains(playerName)) { + player.sendMessage(ChatColor.RED + "You can't watch while you're playing!"); + } else if (plugin.Watching.get(arenaId).contains(playerName)) { + plugin.Watching.get(arenaId).remove(playerName); for (Player online : plugin.getServer().getOnlinePlayers()) { - online.showPlayer(plugin, p); + online.showPlayer(plugin, player); } - p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); - plugin.scoreboards.remove(p.getName()); - p.teleport(getArenaSpawn()); - p.setAllowFlight(false); - p.sendMessage(ChatColor.AQUA + "You are not spectating any more"); + player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + plugin.scoreboards.remove(player.getName()); + player.teleport(getArenaSpawn()); + player.setAllowFlight(false); + player.sendMessage(ChatColor.AQUA + "You are not spectating any more"); } } } else { - p.sendMessage(ChatColor.RED + "Too few arguments!"); + player.sendMessage(ChatColor.RED + "Too few arguments!"); } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else if (args[0].equalsIgnoreCase("tp")) { for (int i : plugin.Watching.keySet()) { - if (plugin.Watching.get(i).contains(pname)) { + if (plugin.Watching.get(i).contains(playerName)) { if (plugin.getArena(Bukkit.getServer().getPlayer(args[1])) != null) { Player target = Bukkit.getServer().getPlayer(args[1]); - p.teleport(target); - p.sendMessage(ChatColor.AQUA + "You've been teleported to " + target.getName()); + player.teleport(target); + player.sendMessage(ChatColor.AQUA + "You've been teleported to " + target.getName()); return true; } else { - p.sendMessage(ChatColor.RED + "That person isn't in game!"); + player.sendMessage(ChatColor.RED + "That person isn't in game!"); return true; } } else { if (i == plugin.Watching.size()) { - p.sendMessage(ChatColor.RED + "You have to be spectating first!"); + player.sendMessage(ChatColor.RED + "You have to be spectating first!"); return true; } } @@ -457,9 +461,9 @@ public class HaCommands implements CommandExecutor { if (args.length != 2) { return false; } - if (p.hasPermission("HungerArena.AddArena")) { + if (player.hasPermission("HungerArena.AddArena")) { SessionManager manager = WorldEdit.getInstance().getSessionManager(); - BukkitPlayer actor = BukkitAdapter.adapt(p); + BukkitPlayer actor = BukkitAdapter.adapt(player); LocalSession localSession = manager.get(actor); Region region; com.sk89q.worldedit.world.World selectionWorld = localSession.getSelectionWorld(); @@ -470,78 +474,78 @@ public class HaCommands implements CommandExecutor { region = localSession.getSelection(selectionWorld); - Location min = BukkitAdapter.adapt(p.getWorld(), region.getMinimumPoint()); - Location max = BukkitAdapter.adapt(p.getWorld(), region.getMaximumPoint()); + Location min = BukkitAdapter.adapt(player.getWorld(), region.getMinimumPoint()); + Location max = BukkitAdapter.adapt(player.getWorld(), region.getMaximumPoint()); plugin.spawns.set("Arenas." + args[1] + ".Max", max.getWorld().getName() + "," + max.getX() + "," + max.getY() + "," + max.getZ()); plugin.spawns.set("Arenas." + args[1] + ".Min", min.getWorld().getName() + "," + min.getX() + "," + min.getY() + "," + min.getZ()); plugin.saveConfig(); - p.sendMessage(ChatColor.GREEN + "Arena " + ChatColor.DARK_AQUA + args[1] + player.sendMessage(ChatColor.GREEN + "Arena " + ChatColor.DARK_AQUA + args[1] + ChatColor.GREEN + " created with WorldEdit!"); return true; } catch (IncompleteRegionException ex) { - p.sendMessage(ChatColor.DARK_RED + "You must make a WorldEdit selection first!"); + player.sendMessage(ChatColor.DARK_RED + "You must make a WorldEdit selection first!"); return false; } } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); return true; } } else { - p.sendMessage(ChatColor.RED + "You don't have WorldEdit enabled for HungerArena!"); + player.sendMessage(ChatColor.RED + "You don't have WorldEdit enabled for HungerArena!"); return true; } } else if (args[0].equalsIgnoreCase("Kick")) { - return kick_sub(sender, args, playr, console, getArenaSpawn()); + return kick_sub(sender, args, isPlayer, console, getArenaSpawn()); } else if (args[0].equalsIgnoreCase("Refill")) { - if (p.hasPermission("HungerArena.Refill")) { + if (player.hasPermission("HungerArena.Refill")) { ReFill_sub(sender, args); } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); return true; } } else if (args[0].equalsIgnoreCase("Restart")) { - if (p.hasPermission("HungerArena.Restart")) { - Restart_Close_sub(sender, args, playr, false); + if (player.hasPermission("HungerArena.Restart")) { + Restart_Close_sub(sender, args, isPlayer, false); } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } /////////////////////////////////// Toggle ////////////////////////////////////////////////// } else if (args[0].equalsIgnoreCase("close")) { - if (p.hasPermission("HungerArena.toggle")) { - Restart_Close_sub(sender, args, playr, true); + if (player.hasPermission("HungerArena.toggle")) { + Restart_Close_sub(sender, args, isPlayer, true); } else { - p.sendMessage(ChatColor.RED + "No Perms!"); + player.sendMessage(ChatColor.RED + "No Perms!"); } } else if (args[0].equalsIgnoreCase("open")) { - if (p.hasPermission("HungerArena.toggle")) { + if (player.hasPermission("HungerArena.toggle")) { open_sub(sender, args); } else { - p.sendMessage(ChatColor.RED + "No Perms!"); + player.sendMessage(ChatColor.RED + "No Perms!"); } //////////////////////////////////////////////////////////////////////////////////////////// } else if (args[0].equalsIgnoreCase("Reload")) { - if (p.hasPermission("HungerArena.Reload")) { + if (player.hasPermission("HungerArena.Reload")) { reload_sub(sender); } else { - p.sendMessage(ChatColor.RED + "You don't have permission"); + player.sendMessage(ChatColor.RED + "You don't have permission"); } } else if (args[0].equalsIgnoreCase("WarpAll")) { - if (p.hasPermission("HungerArena.Warpall")) { + if (player.hasPermission("HungerArena.Warpall")) { warpall_sub(sender, args); } else { - p.sendMessage(ChatColor.RED + "You don't have permission"); + player.sendMessage(ChatColor.RED + "You don't have permission"); } } else if (args[0].equalsIgnoreCase("Start")) { - if (p.hasPermission("HungerArena.Start")) { + if (player.hasPermission("HungerArena.Start")) { start_sub(sender, args); } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + player.sendMessage(ChatColor.RED + "You don't have permission!"); } } else { - p.sendMessage(ChatColor.RED + "Unknown command, type /ha help for a list of commands"); + player.sendMessage(ChatColor.RED + "Unknown command, type /ha help for a list of commands"); } } } @@ -555,10 +559,10 @@ public class HaCommands implements CommandExecutor { return false; } if (args[0].equalsIgnoreCase("Help")) { - help_sub(sender, playr, console); + help_sub(sender, isPlayer, console); return false; } else if (args[0].equalsIgnoreCase("List")) { - list_sub(null, sender, playr, console, args); + list_sub(null, sender, isPlayer, console, args); } else if (args[0].equalsIgnoreCase("rList")) { rList_sub(sender, args); @@ -566,17 +570,17 @@ public class HaCommands implements CommandExecutor { } else if (args[0].equalsIgnoreCase("SetSpawn") || args[0].equalsIgnoreCase("Join") || args[0].equalsIgnoreCase("Confirm") || args[0].equalsIgnoreCase("Ready") || args[0].equalsIgnoreCase("Leave") || args[0].equalsIgnoreCase("Watch") || args[0].equalsIgnoreCase("NewArena")) { sender.sendMessage(ChatColor.RED + "That can only be run by a player!"); } else if (args[0].equalsIgnoreCase("Kick")) { - return kick_sub(sender, args, playr, console, getArenaSpawn()); + return kick_sub(sender, args, isPlayer, console, getArenaSpawn()); } else if (args[0].equalsIgnoreCase("Refill")) { ReFill_sub(sender, args); } else if (args[0].equalsIgnoreCase("Restart")) { - Restart_Close_sub(sender, args, playr, false); + Restart_Close_sub(sender, args, isPlayer, false); /////////////////////////////////// Toggle ////////////////////////////////////////////////// } else if (args[0].equalsIgnoreCase("close")) { - Restart_Close_sub(sender, args, playr, true); + Restart_Close_sub(sender, args, isPlayer, true); } else if (args[0].equalsIgnoreCase("open")) { open_sub(sender, args); @@ -635,35 +639,35 @@ public class HaCommands implements CommandExecutor { private void list_sub(Player p, CommandSender sender, boolean playr, boolean console, String[] args) { if (args.length >= 2) { if (checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); + arenaId = Integer.parseInt(args[1]); list_subsub(p, sender, console); } } else { if (console || (p != null && plugin.getArena(p) == null)) { - arena = 1; + arenaId = 1; list_subsub(p, sender, console); } else { - arena = plugin.getArena(p); + arenaId = plugin.getArena(p).getArenaId(); list_subsub(p, sender, console); } } } private void list_subsub(Player p, CommandSender sender, boolean console) { - sender.sendMessage(ChatColor.AQUA + "----- Arena " + arena + " -----"); - if (!plugin.Playing.get(arena).isEmpty() && plugin.Playing.containsKey(arena)) { - for (String playernames : plugin.Playing.get(arena)) { - Player players = plugin.getServer().getPlayerExact(playernames); + sender.sendMessage(ChatColor.AQUA + "----- Arena " + arenaId + " -----"); + if (!plugin.Playing.get(arenaId).isEmpty() && plugin.Playing.containsKey(arenaId)) { + for (UUID playerId : plugin.Playing.get(arenaId)) { + Player player = plugin.getServer().getPlayer(playerId); if (console || (p != null && p.hasPermission("HungerArena.GameMaker"))) { double maxh; try { - maxh = players.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + maxh = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } catch (Exception e) { - maxh = players.getMaxHealth(); + maxh = player.getMaxHealth(); } - sender.sendMessage(ChatColor.GREEN + playernames + " Life: " + players.getHealth() + "/" + maxh); + sender.sendMessage(ChatColor.GREEN + player.getName() + " Life: " + player.getHealth() + "/" + maxh); } else if (console || (p != null && p.hasPermission("HungerArena.List"))) { - sender.sendMessage(ChatColor.GREEN + playernames); + sender.sendMessage(ChatColor.GREEN + player.getName()); } } } else { @@ -675,11 +679,11 @@ public class HaCommands implements CommandExecutor { private void rList_sub(CommandSender sender, String[] args) { if (args.length >= 2) { if (checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); - sender.sendMessage(ChatColor.AQUA + "----- Arena " + arena + " -----"); - if (!plugin.Ready.get(arena).isEmpty() && plugin.Ready.containsKey(arena)) { - for (String playernames : plugin.Ready.get(arena)) { - sender.sendMessage(ChatColor.GREEN + playernames); + arenaId = Integer.parseInt(args[1]); + sender.sendMessage(ChatColor.AQUA + "----- Arena " + arenaId + " -----"); + if (!plugin.Ready.get(arenaId).isEmpty() && plugin.Ready.containsKey(arenaId)) { + for (UUID playerId : plugin.Ready.get(arenaId)) { + sender.sendMessage(ChatColor.GREEN + plugin.arenaPlayers.get(playerId).getPlayer().getName()); } } else { sender.sendMessage(ChatColor.GRAY + "No one is ready!"); @@ -689,8 +693,8 @@ public class HaCommands implements CommandExecutor { } else { sender.sendMessage(ChatColor.AQUA + "----- Arena 1 -----"); if (!plugin.Ready.get(1).isEmpty() && plugin.Ready.containsKey(1)) { - for (String playernames : plugin.Ready.get(1)) { - sender.sendMessage(ChatColor.GREEN + playernames); + for (UUID playerId : plugin.Ready.get(1)) { + sender.sendMessage(ChatColor.GREEN + plugin.arenaPlayers.get(playerId).getPlayer().getName()); } } else { sender.sendMessage(ChatColor.GRAY + "No one is ready!"); @@ -711,21 +715,21 @@ public class HaCommands implements CommandExecutor { } if (console || (playr && sender.hasPermission("HungerArena.Kick"))) { if (plugin.getArena(target) != null) { - arena = plugin.getArena(target); - plugin.Playing.get(arena).remove(target.getName()); + arenaId = plugin.getArena(target).getArenaId(); + plugin.Playing.get(arenaId).remove(target.getName()); if (!plugin.config.getBoolean("broadcastAll")) { - plugin.getServer().broadcastMessage(ChatColor.RED + target.getName() + " was kicked from arena " + arena + "!"); + plugin.getServer().broadcastMessage(ChatColor.RED + target.getName() + " was kicked from arena " + arenaId + "!"); } else { - for (String gn : plugin.Playing.get(arena)) { + for (UUID gn : plugin.Playing.get(arenaId)) { Player g = plugin.getServer().getPlayer(gn); g.sendMessage(ChatColor.RED + target.getName() + " was kicked from the game!"); } } clearInv(target); target.teleport(Spawn); - plugin.Quit.get(arena).add(target.getName()); - plugin.RestoreInv(target, target.getName()); - plugin.winner(arena); + plugin.Quit.get(arenaId).add(target.getUniqueId()); + plugin.restoreInventory(target, target.getName()); + plugin.winner(arenaId); return true; } else { sender.sendMessage(ChatColor.RED + "That player isn't in the game!"); @@ -804,9 +808,9 @@ public class HaCommands implements CommandExecutor { plugin.getServer().getScheduler().cancelTask(plugin.deathtime.get(a)); plugin.deathtime.put(a, null); } - if (plugin.grace.get(a) != null) { - plugin.getServer().getScheduler().cancelTask(plugin.grace.get(a)); - plugin.grace.put(a, null); + if (plugin.graceSchedulerIds.get(a) != null) { + plugin.getServer().getScheduler().cancelTask(plugin.graceSchedulerIds.get(a)); + plugin.graceSchedulerIds.put(a, null); } if (plugin.start.get(a) != null) { plugin.getServer().getScheduler().cancelTask(plugin.start.get(a)); @@ -816,22 +820,25 @@ public class HaCommands implements CommandExecutor { if (plugin.timetodeath.get(a) != null) { plugin.timetodeath.remove(a); } - plugin.Frozen.get(a).clear(); + + for (ArenaPlayer arenaPlayer : plugin.arenas.get(a).getArenaPlayers()) { + arenaPlayer.setFrozen(false); + } if (plugin.Playing.get(a) != null) { - for (String players : plugin.Playing.get(a)) { - Player tributes = plugin.getServer().getPlayerExact(players); - clearInv(tributes); - tributes.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); - tributes.teleport(tributes.getWorld().getSpawnLocation()); - plugin.scoreboards.remove(players); - plugin.Kills.remove(players); - plugin.Frozen.get(a).add(players); + for (UUID player : plugin.Playing.get(a)) { + Player tribute = plugin.getServer().getPlayer(player); + clearInv(tribute); + tribute.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + tribute.teleport(tribute.getWorld().getSpawnLocation()); + plugin.scoreboards.remove(player); + plugin.Kills.remove(player); + plugin.arenaPlayers.get(player).setFrozen(false); } } plugin.Kills.remove("__SuM__"); if (plugin.Watching.get(a) != null) { - for (String sname : plugin.Watching.get(a)) { - Player spectators = plugin.getServer().getPlayerExact(sname); + for (UUID sname : plugin.Watching.get(a)) { + Player spectators = plugin.getServer().getPlayer(sname); spectators.teleport(spectators.getWorld().getSpawnLocation()); spectators.setAllowFlight(false); spectators.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); @@ -841,21 +848,22 @@ public class HaCommands implements CommandExecutor { plugin.scoreboards.remove(sname); } } - if (plugin.Frozen.get(a) != null) { - for (String sname : plugin.Frozen.get(a)) { - Player player = plugin.getServer().getPlayerExact(sname); - plugin.RestoreInv(player, sname); + for (ArenaPlayer arenaPlayer : plugin.arenas.get(a).getArenaPlayers()) { + if (arenaPlayer.isFrozen()) { + plugin.restoreInventory(arenaPlayer.getPlayer(), arenaPlayer.getPlayer().getName()); } } - plugin.Dead.get(a).clear(); - plugin.Quit.get(a).clear(); - plugin.Watching.get(a).clear(); - plugin.Frozen.get(a).clear(); - plugin.Ready.get(a).clear(); - plugin.NeedConfirm.get(a).clear(); - plugin.Out.get(a).clear(); + for (ArenaPlayer arenaPlayer : plugin.arenas.get(a).getArenaPlayers()) { + arenaPlayer.setFrozen(false); + arenaPlayer.setReady(false); + arenaPlayer.setNeedConfirmation(false); + arenaPlayer.setOut(false); + arenaPlayer.setInArena(false); + arenaPlayer.setDead(false); + arenaPlayer.setQuit(false); + arenaPlayer.setWatching(false); + } plugin.Playing.get(a).clear(); - plugin.inArena.get(a).clear(); if (closeit) { plugin.open.put(a, false); @@ -1001,8 +1009,8 @@ public class HaCommands implements CommandExecutor { private void reload_sub(CommandSender sender) { for (Player online : plugin.getServer().getOnlinePlayers()) { if (plugin.getArena(online) != null) { - arena = plugin.getArena(online); - plugin.RestoreInv(online, online.getName()); + arenaId = plugin.getArena(online).getArenaId(); + plugin.restoreInventory(online, online.getName()); online.teleport(getArenaSpawn()); } } @@ -1013,7 +1021,7 @@ public class HaCommands implements CommandExecutor { plugin.Fee.clear(); plugin.ChestPay.clear(); plugin.spawns = null; - plugin.worldsNames.clear(); + plugin.worldNames.clear(); plugin.data = null; plugin.management = null; plugin.MyChests = null; @@ -1030,31 +1038,31 @@ public class HaCommands implements CommandExecutor { } else { if (args.length >= 2) { if (checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); - if ((plugin.spawns.getString("Spawns_set." + arena) == null) || (plugin.spawns.getString("Spawns_set." + arena).equalsIgnoreCase("false"))) { - sender.sendMessage(ChatColor.RED + "/ha setspawn for Arena " + arena + " hasn't been run!"); + arenaId = Integer.parseInt(args[1]); + if ((plugin.spawns.getString("Spawns_set." + arenaId) == null) || (plugin.spawns.getString("Spawns_set." + arenaId).equalsIgnoreCase("false"))) { + sender.sendMessage(ChatColor.RED + "/ha setspawn for Arena " + arenaId + " hasn't been run!"); } else { - if (plugin.Playing.get(arena).size() <= 1) { + if (plugin.Playing.get(arenaId).size() <= 1) { sender.sendMessage(ChatColor.RED + "There are not enough players!"); - } else if (plugin.canJoin.get(arena)) { + } else if (plugin.canJoin.get(arenaId)) { sender.sendMessage(ChatColor.RED + "Game already in progress!"); } else { - plugin.setTorch(arena, false); + plugin.setTorch(arenaId, false); if (plugin.config.getString("Auto_Start").equalsIgnoreCase("true")) { - plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha start " + arena), 20L); + plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha start " + arenaId), 20L); } List shuffle = new ArrayList<>(); - for (i = 1; i <= plugin.location.get(arena).size(); shuffle.add(i++)) { + for (i = 1; i <= plugin.location.get(arenaId).size(); shuffle.add(i++)) { } Collections.shuffle(shuffle); i = 1; - for (String playing : plugin.Playing.get(arena)) { - Player tribute = plugin.getServer().getPlayerExact(playing); - plugin.Frozen.get(arena).add(tribute.getName()); - Location toLoc = plugin.location.get(arena).get(shuffle.get(i)); + for (UUID playing : plugin.Playing.get(arenaId)) { + Player tribute = plugin.getServer().getPlayer(playing); + plugin.arenaPlayers.get(playing).setFrozen(true); + Location toLoc = plugin.location.get(arenaId).get(shuffle.get(i)); tribute.setHealth(20); tribute.setFoodLevel(20); tribute.setSaturation(20); @@ -1070,7 +1078,7 @@ public class HaCommands implements CommandExecutor { Location opposite = toLoc.clone(); double dist = 0; double dist2; - for (Location loc : plugin.location.get(arena).values()) { + for (Location loc : plugin.location.get(arenaId).values()) { dist2 = loc.distance(toLoc); if (dist2 > dist) { dist = dist2; @@ -1085,7 +1093,7 @@ public class HaCommands implements CommandExecutor { } plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { sender.sendMessage(ChatColor.AQUA + "All Tributes warped!"); - plugin.MatchRunning.put(arena, "warped"); + plugin.MatchRunning.put(arenaId, "warped"); }, 10L); } } @@ -1101,15 +1109,15 @@ public class HaCommands implements CommandExecutor { sender.sendMessage(ChatColor.RED + "You need to specify the arena to start!"); } else { if (checkarena(args[1], sender)) { - arena = Integer.parseInt(args[1]); - if (plugin.canJoin.get(arena)) { + arenaId = Integer.parseInt(args[1]); + if (plugin.canJoin.get(arenaId)) { sender.sendMessage(ChatColor.RED + "Game already in progress!"); - } else if (plugin.Playing.get(arena).size() == 1) { + } else if (plugin.Playing.get(arenaId).size() == 1) { sender.sendMessage(ChatColor.RED + "There are not enough players!"); - } else if (plugin.Playing.get(arena).isEmpty()) { + } else if (plugin.Playing.get(arenaId).isEmpty()) { sender.sendMessage(ChatColor.RED + "No one is in that game!"); - } else if ((plugin.MatchRunning.get(arena) != null) && (plugin.MatchRunning.get(arena).equals("warped"))) { - plugin.startGames(arena); + } else if ((plugin.MatchRunning.get(arenaId) != null) && (plugin.MatchRunning.get(arenaId).equals("warped"))) { + plugin.startGames(arenaId); } else { sender.sendMessage(ChatColor.RED + "First all players must be warped!"); } @@ -1118,15 +1126,15 @@ public class HaCommands implements CommandExecutor { } private boolean checkarena(String Int, CommandSender sender) { - arena = 0; + arenaId = 0; try { - arena = Integer.parseInt(Int); + arenaId = Integer.parseInt(Int); } catch (NumberFormatException e) { sender.sendMessage(ChatColor.RED + "You have to enter the Arena number!"); return false; } - if (arena > 0) { - if (plugin.canJoin.containsKey(arena)) { + if (arenaId > 0) { + if (plugin.canJoin.containsKey(arenaId)) { return true; } } @@ -1182,8 +1190,8 @@ public class HaCommands implements CommandExecutor { } private void preparePlayer(Player p, String pname, String ThisWorld) { - plugin.Playing.get(arena).add(pname); - plugin.NeedConfirm.get(arena).remove(pname); + plugin.Playing.get(arenaId).add(p.getUniqueId()); + plugin.NeedConfirm.get(arenaId).remove(pname); p.sendMessage(ChatColor.GREEN + "Do /ha ready to vote to start the games!"); FileConfiguration pinfo = plugin.getPConfig(pname); pinfo.set("inv", p.getInventory().getContents()); @@ -1194,15 +1202,15 @@ public class HaCommands implements CommandExecutor { clearInv(p); plugin.needInv.add(pname); if (plugin.config.getBoolean("broadcastAll")) { - plugin.getServer().broadcastMessage(ChatColor.AQUA + pname + " has Joined Arena " + arena + "! " + ChatColor.GRAY + plugin.Playing.get(arena).size() + "/" + plugin.maxPlayers.get(arena)); + plugin.getServer().broadcastMessage(ChatColor.AQUA + pname + " has Joined Arena " + arenaId + "! " + ChatColor.GRAY + plugin.Playing.get(arenaId).size() + "/" + plugin.maxPlayers.get(arenaId)); } else { - for (String gn : plugin.Playing.get(arena)) { + for (UUID gn : plugin.Playing.get(arenaId)) { Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(ChatColor.AQUA + pname + " has Joined the Game! " + ChatColor.GRAY + plugin.Playing.get(arena).size() + "/" + plugin.maxPlayers.get(arena)); + g.sendMessage(ChatColor.AQUA + pname + " has Joined the Game! " + ChatColor.GRAY + plugin.Playing.get(arenaId).size() + "/" + plugin.maxPlayers.get(arenaId)); } } - if (plugin.Playing.get(arena).size() == plugin.maxPlayers.get(arena)) { - plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "ha warpall " + arena); + if (plugin.Playing.get(arenaId).size() == plugin.maxPlayers.get(arenaId)) { + plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), "ha warpall " + arenaId); } } } diff --git a/src/main/java/net/knarcraft/hungerarena/HungerArena.java b/src/main/java/net/knarcraft/hungerarena/HungerArena.java index 0baa3e3..ecd0e6a 100644 --- a/src/main/java/net/knarcraft/hungerarena/HungerArena.java +++ b/src/main/java/net/knarcraft/hungerarena/HungerArena.java @@ -24,7 +24,6 @@ import org.bukkit.FireworkEffect.Type; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; -import org.bukkit.block.Block; import org.bukkit.command.CommandExecutor; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; @@ -60,34 +59,36 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Random; import java.util.Set; +import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; public class HungerArena extends JavaPlugin { static Logger log; - public final HashMap> Playing = new HashMap<>(); - public final HashMap> Ready = new HashMap<>(); - public final HashMap> Dead = new HashMap<>(); + public final HashMap> Playing = new HashMap<>(); + public final HashMap> Ready = new HashMap<>(); + public final HashMap> Dead = new HashMap<>(); public final HashMap MatchRunning = new HashMap<>(); public final HashMap canJoin = new HashMap<>(); public final HashMap open = new HashMap<>(); - private final HashMap CountT = new HashMap<>(); - public final HashMap> Quit = new HashMap<>(); - public final HashMap> Out = new HashMap<>(); - public final HashMap> Watching = new HashMap<>(); + private final HashMap countDownTimer = new HashMap<>(); + public final HashMap> Quit = new HashMap<>(); + public final HashMap> Out = new HashMap<>(); + public final HashMap> Watching = new HashMap<>(); public final HashMap Kills = new HashMap<>(); - public final HashMap> NeedConfirm = new HashMap<>(); + public final HashMap> NeedConfirm = new HashMap<>(); public final HashMap> location = new HashMap<>(); - public final HashMap> inArena = new HashMap<>(); - public final HashMap> Frozen = new HashMap<>(); + public final HashMap> inArena = new HashMap<>(); + //public final HashMap> Frozen = new HashMap<>(); public final HashMap maxPlayers = new HashMap<>(); public final HashMap setting = new HashMap<>(); public final HashMap gp = new HashMap<>(); public final ArrayList Tele = new ArrayList<>(); public final ArrayList needInv = new ArrayList<>(); - public final HashMap worldsNames = new HashMap<>(); + public final HashMap worldNames = new HashMap<>(); public final Map arenas = new HashMap<>(); + public final Map arenaPlayers = new HashMap<>(); public final HashMap scoreboards = new HashMap<>(); @@ -137,7 +138,7 @@ public class HungerArena extends JavaPlugin { int i = 0; int v = 0; - int a = 0; + int arenaId = 0; final File PFilePath = new File(getDataFolder(), "/inventories"); @@ -352,7 +353,7 @@ public class HungerArena extends JavaPlugin { for (Entry entry : temp.entrySet()) { if (spawns.getConfigurationSection("Spawns." + entry.getKey()) != null) { Integer a = Integer.parseInt(entry.getKey()); - worldsNames.put(a, "none_meaning_this_is_not_a_map"); + worldNames.put(a, "none_meaning_this_is_not_a_map"); location.computeIfAbsent(a, k -> new HashMap<>()); Map temp2 = spawns.getConfigurationSection("Spawns." + entry.getKey()).getValues(false); for (Map.Entry e : temp2.entrySet()) { @@ -360,31 +361,37 @@ public class HungerArena extends JavaPlugin { String[] coords = ((String) spawns.get("Spawns." + entry.getKey() + "" + e.getKey())).split(","); Integer s = Integer.parseInt(e.getKey()); location.get(a).put(s, new Location(getServer().getWorld(coords[0]), Double.parseDouble(coords[1]), Double.parseDouble(coords[2]), Double.parseDouble(coords[3]))); - worldsNames.put(a, coords[0]); + worldNames.put(a, coords[0]); } } } } } - for (int i : location.keySet()) { - if (location.get(i).size() != 0) { + for (int arenaId : location.keySet()) { + if (location.get(arenaId).size() != 0) { if (verbose) { - log.info("Loaded " + location.get(i).size() + " tribute spawns for arena " + i + "!"); + log.info("Loaded " + location.get(arenaId).size() + " tribute spawns for arena " + arenaId + "!"); } - Playing.put(i, new ArrayList<>()); - Ready.put(i, new ArrayList<>()); - Dead.put(i, new ArrayList<>()); - MatchRunning.put(i, null); - Quit.put(i, new ArrayList<>()); - Out.put(i, new ArrayList<>()); - Watching.put(i, new ArrayList<>()); - NeedConfirm.put(i, new ArrayList<>()); - inArena.put(i, new ArrayList<>()); - Frozen.put(i, new ArrayList<>()); - canJoin.put(i, false); - maxPlayers.put(i, location.get(i).size()); - open.put(i, true); + Playing.put(arenaId, new ArrayList<>()); + Ready.put(arenaId, new ArrayList<>()); + Dead.put(arenaId, new ArrayList<>()); + MatchRunning.put(arenaId, null); + Quit.put(arenaId, new ArrayList<>()); + Out.put(arenaId, new ArrayList<>()); + Watching.put(arenaId, new ArrayList<>()); + NeedConfirm.put(arenaId, new ArrayList<>()); + inArena.put(arenaId, new ArrayList<>()); + + Arena arena = arenas.get(arenaId); + for (ArenaPlayer arenaPlayer : arenaPlayers.values()) { + if (arenaPlayer.getArena() == arena) { + arenaPlayer.setFrozen(false); + } + } + canJoin.put(arenaId, false); + maxPlayers.put(arenaId, location.get(arenaId).size()); + open.put(arenaId, true); } } } @@ -640,7 +647,7 @@ public class HungerArena extends JavaPlugin { } @SuppressWarnings("unchecked") - public void RestoreInv(Player p, String pname) { + public void restoreInventory(Player p, String pname) { for (int u : Playing.keySet()) { if (Playing.get(u) != null) { if (Playing.get(u).contains(pname)) { @@ -649,7 +656,7 @@ public class HungerArena extends JavaPlugin { if (config.getBoolean("broadcastAll")) { p.getServer().broadcastMessage(ChatColor.RED + pname + " Left Arena " + u + "!"); } else { - for (String gn : Playing.get(u)) { + for (UUID gn : Playing.get(u)) { Player g = getServer().getPlayer(gn); g.sendMessage(ChatColor.RED + pname + " Quit!"); } @@ -724,11 +731,15 @@ public class HungerArena extends JavaPlugin { Location Spawn = new Location(spawnw, spawnx, spawny, spawnz); for (i = 0; i < Playing.get(a).size(); i++) { - String winnername = Playing.get(a).get(i); - final Player winner = getServer().getPlayerExact(winnername); - String winnername2 = winner.getName(); + UUID winnerId = Playing.get(a).get(i); + final Player winner = getServer().getPlayer(winnerId); + //TODO: Figure out exactly what needs to be done in this case + if (winner == null) { + continue; + } + String winnerName = winner.getName(); if (canJoin.get(a)) { - getServer().broadcastMessage(ChatColor.GREEN + winnername2 + " is the victor of this Hunger Games!"); + getServer().broadcastMessage(ChatColor.GREEN + winnerName + " is the victor of this Hunger Games!"); } winner.getInventory().clear(); winner.getInventory().setBoots(null); @@ -741,11 +752,11 @@ public class HungerArena extends JavaPlugin { winner.removePotionEffect(potion); } Tele.add(winner); - needInv.add(winnername2); + needInv.add(winnerName); winner.teleport(Spawn); - this.RestoreInv(winner, winnername2); + this.restoreInventory(winner, winnerName); if (canJoin.get(a)) { winner.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); @@ -827,9 +838,9 @@ public class HungerArena extends JavaPlugin { getServer().getScheduler().cancelTask(deathtime.get(a)); deathtime.put(a, null); } - if (grace.get(a) != null) { - getServer().getScheduler().cancelTask(grace.get(a)); - grace.put(a, null); + if (graceSchedulerIds.get(a) != null) { + getServer().getScheduler().cancelTask(graceSchedulerIds.get(a)); + graceSchedulerIds.put(a, null); } if (start.get(a) != null) { getServer().getScheduler().cancelTask(start.get(a)); @@ -841,8 +852,8 @@ public class HungerArena extends JavaPlugin { Dead.get(a).clear(); //Show spectators - for (String s1 : Watching.get(a)) { - Player spectator = getServer().getPlayerExact(s1); + for (UUID s1 : Watching.get(a)) { + Player spectator = getServer().getPlayer(s1); spectator.setAllowFlight(false); spectator.teleport(Spawn); for (Player online : getServer().getOnlinePlayers()) { @@ -906,9 +917,9 @@ public class HungerArena extends JavaPlugin { public void updateScoreboard(Player p) { if (getArena(p) != null || isSpectating(p)) { if (getArena(p) != null) { - a = getArena(p); + arenaId = getArena(p).getArenaId(); } else if (getSpectating(p) != null) { - a = getSpectating(p); + arenaId = getSpectating(p).getArenaId(); } if (scoreboards.get(p.getName()) != null && scoreboards.get(p.getName()).getObjective("HA") != null) { Scoreboard sb = scoreboards.get(p.getName()); @@ -918,7 +929,7 @@ public class HungerArena extends JavaPlugin { Score players = obj.getScore(ChatColor.RED + "Players"); Score spectators = obj.getScore(ChatColor.RED + "Spectators"); Score allkills = obj.getScore(ChatColor.RED + "Deaths"); - players.setScore(Playing.get(a).size()); + players.setScore(Playing.get(arenaId).size()); if (Kills.containsKey(p.getName())) { kills.setScore(Kills.get(p.getName())); } @@ -926,15 +937,15 @@ public class HungerArena extends JavaPlugin { allkills.setScore(Kills.get("__SuM__")); } - if (Watching.get(a) != null) { - spectators.setScore(Watching.get(a).size()); + if (Watching.get(arenaId) != null) { + spectators.setScore(Watching.get(arenaId).size()); } if (config.getInt("DeathMatch") != 0) { - if (timetodeath.get(a) != null) { - if (timetodeath.get(a) > 0) { - int ttd = timetodeath.get(a) - timetodeath.get(a) / 60 * 60; + if (timetodeath.get(arenaId) != null) { + if (timetodeath.get(arenaId) > 0) { + int ttd = timetodeath.get(arenaId) - timetodeath.get(arenaId) / 60 * 60; String secs = String.valueOf((ttd < 10) ? "0" + ttd : ttd); - obj.setDisplayName(ChatColor.GREEN + "HA - DMTime: " + ChatColor.AQUA + timetodeath.get(a) / 60 + ":" + secs); + obj.setDisplayName(ChatColor.GREEN + "HA - DMTime: " + ChatColor.AQUA + timetodeath.get(arenaId) / 60 + ":" + secs); } else { obj.setDisplayName(ChatColor.GREEN + "HA - " + ChatColor.RED + "DEATHMATCH"); } @@ -948,18 +959,18 @@ public class HungerArena extends JavaPlugin { } } - public final HashMap grace = new HashMap<>(); + public final HashMap graceSchedulerIds = new HashMap<>(); public final HashMap start = new HashMap<>(); public final HashMap deathtime = new HashMap<>(); public final HashMap timetodeath = new HashMap<>(); - public void startGames(final int a) { - if ((MatchRunning.get(a) != null) && (MatchRunning.get(a).equals("true"))) { + public void startGames(final int arenaId) { + if ((MatchRunning.get(arenaId) != null) && (MatchRunning.get(arenaId).equals("true"))) { return; } final String msg = ChatColor.translateAlternateColorCodes('&', config.getString("Start_Message")); - for (String gn : Playing.get(a)) { + for (UUID gn : Playing.get(arenaId)) { Scoreboard scoreboard = getServer().getScoreboardManager().getNewScoreboard(); Objective sobj; try { @@ -980,244 +991,257 @@ public class HungerArena extends JavaPlugin { Bukkit.getPlayer(gn).setScoreboard(scoreboard); scoreboards.put(Bukkit.getPlayer(gn).getName(), Bukkit.getPlayer(gn).getScoreboard()); } - getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha Refill " + a); - MatchRunning.put(a, "true"); - if (start.get(a) != null) { - getServer().getScheduler().cancelTask(start.get(a)); + getServer().dispatchCommand(Bukkit.getConsoleSender(), "ha Refill " + arenaId); + MatchRunning.put(arenaId, "true"); + if (start.get(arenaId) != null) { + getServer().getScheduler().cancelTask(start.get(arenaId)); } if (config.getString("Countdown").equalsIgnoreCase("true")) { - CountT.put(a, (config.getInt("Countdown_Timer") != 0 ? config.getInt("Countdown_Timer") : 10)); - start.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { - if (CountT.get(a) > 0) { - if (!restrictedWorlds) { - if (config.getBoolean("broadcastAll")) { - getServer().broadcastMessage(ChatColor.AQUA + "Game " + a + " starting in: " + CountT.get(a)); - } else { - for (String gn : Playing.get(a)) { - Player g = getServer().getPlayer(gn); - g.sendMessage(ChatColor.AQUA + "Game starting in: " + CountT.get(a)); - } - } - } else { - if (config.getBoolean("broadcastAll")) { - for (String world : worldsNames.values()) { - World w = getServer().getWorld(world); - for (Player wp : w.getPlayers()) { - wp.sendMessage(String.valueOf(CountT.get(a))); - } - } - } else { - for (String gn : Playing.get(a)) { - Player g = getServer().getPlayer(gn); - g.sendMessage(String.valueOf(CountT.get(a))); - } - } - } - } - CountT.put(a, CountT.get(a) - 1); - if (CountT.get(a) == -1) { - for (String gn : Playing.get(a)) { - Scoreboard scoreboard = getServer().getScoreboardManager().getNewScoreboard(); - Objective sobj; - try { - sobj = scoreboard.registerNewObjective("HA", "HAData", ChatColor.GREEN + "HA - Starting"); - } catch (NoSuchMethodError e) { - sobj = scoreboard.registerNewObjective("HA", "HAData"); - sobj.setDisplayName(ChatColor.GREEN + "HA - Starting"); - } - Score skills = sobj.getScore(ChatColor.RED + "Kills"); - skills.setScore(0); - Score sdeaths = sobj.getScore(ChatColor.RED + "Spectators"); - sdeaths.setScore(0); - Score splayers = sobj.getScore(ChatColor.RED + "Players"); - splayers.setScore(0); - Score allkills = sobj.getScore(ChatColor.RED + "Deaths"); - allkills.setScore(0); - sobj.setDisplaySlot(DisplaySlot.SIDEBAR); - Bukkit.getPlayer(gn).setScoreboard(scoreboard); - scoreboards.put(Bukkit.getPlayer(gn).getName(), Bukkit.getPlayer(gn).getScoreboard()); - } - if (Frozen.get(a) != null) { - Frozen.get(a).clear(); - } - if (config.getBoolean("broadcastAll")) { - getServer().broadcastMessage(msg); - } else { - for (String gn : Playing.get(a)) { - Player g = getServer().getPlayer(gn); - g.sendMessage(msg); - } - } - if (config.getInt("Grace_Period") != 0) { - gp.put(a, config.getInt("Grace_Period")); - if (grace.get(a) == null) { - grace.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), () -> { - gp.put(a, gp.get(a) - 1); - if (gp.get(a) == 30 || gp.get(a) == 15 || (gp.get(a) < 11 && gp.get(a) != 0)) { - if (config.getBoolean("broadcastAll")) { - for (Player wp : location.get(a).get(1).getWorld().getPlayers()) { - wp.sendMessage(ChatColor.GREEN + "Grace period ends in " + gp.get(a) + " seconds!"); - } - } else { - getServer().broadcastMessage(ChatColor.GREEN + "Grace period ends in " + gp.get(a) + " seconds!"); - } - } - if (gp.get(a) <= 0) { - if (config.getBoolean("broadcastAll")) { - for (Player wp : location.get(a).get(1).getWorld().getPlayers()) { - wp.sendMessage(ChatColor.GREEN + "Grace period is over, FIGHT!"); - } - } else { - getServer().broadcastMessage(ChatColor.GREEN + "Grace period is over, FIGHT!"); - } - getServer().getScheduler().cancelTask(grace.get(a)); - grace.put(a, null); - } - }, 20L, 20L)); - } - } - if (config.getInt("DeathMatch") != 0) { - int death = config.getInt("DeathMatch"); - timetodeath.put(a, death * 60); - if (deathtime.get(a) == null) { - deathtime.put(a, getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), () -> { - timetodeath.put(a, timetodeath.get(a) - 1); - if (timetodeath.get(a) % 300 == 0) { - if (config.getBoolean("broadcastAll")) { - for (Player wp : location.get(a).get(1).getWorld().getPlayers()) { - if (timetodeath.get(a) != 0) { - wp.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(a) / 60) + ChatColor.RED + " mins till the death match!"); - } - } - } else { - for (String gn : Playing.get(a)) { - Player g = getServer().getPlayer(gn); - g.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(a)) + ChatColor.RED + " mins till the death match!"); - } - } - } - if (timetodeath.get(a) <= 0) { - int i = 1; - for (String playing : Playing.get(a)) { - Player tribute = getServer().getPlayerExact(playing); - - Location pLoc = null; - if (tribute.hasMetadata("HA-Location")) { - List l = tribute.getMetadata("HA-Location"); - if (l != null && l.size() != 0) { - try { - pLoc = (Location) l.get(0).value(); - } catch (Exception e) { - } - } - if (pLoc != null) { - tribute.teleport(pLoc); //random - } else { - tribute.teleport(location.get(a).get(i)); //row - } - } - i += 1; - for (PotionEffect pe : tribute.getActivePotionEffects()) { - PotionEffectType potion = pe.getType(); - tribute.removePotionEffect(potion); - } - if (tribute.getAllowFlight()) { - tribute.setAllowFlight(false); - } - } - if (config.getBoolean("broadcastAll")) { - for (Player wp : location.get(a).get(1).getWorld().getPlayers()) { - wp.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(a).size() + " tributes will be facing off!"); - } - } else { - for (String gn : Playing.get(a)) { - Player g = getServer().getPlayer(gn); - g.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(a).size() + " tributes will be facing off!"); - } - } - StopTasksDelayed(deathtime.get(a)); - deathtime.put(a, null); - } - }, 20L, 20L)); - } - } - setTorch(a, true); - StopTasksDelayed(start.get(a)); - } - }, 20L, 20L)); + displayCountDown(arenaId, msg); } else { - setTorch(a, true); - Frozen.get(a).clear(); + Arena arena = arenas.get(arenaId); + setTorch(arenaId, true); + for (ArenaPlayer arenaPlayer : arenaPlayers.values()) { + if (arenaPlayer.getArena() == arena) { + arenaPlayer.setFrozen(false); + } + } if (config.getBoolean("broadcastAll")) { getServer().broadcastMessage(msg); } else { - for (String gn : Playing.get(a)) { + for (UUID gn : Playing.get(arenaId)) { Player g = getServer().getPlayer(gn); g.sendMessage(msg); } } } - canJoin.put(a, true); + canJoin.put(arenaId, true); } - private void StopTasksDelayed(final int task) { + private void broadCastArenaStartingSoon(int arenaId) { + if (!config.getBoolean("broadcastAll")) { + //Broadcast that a game is starting soon to all players in the arena + for (ArenaPlayer player : arenas.get(arenaId).getArenaPlayers()) { + player.getPlayer().sendMessage(ChatColor.AQUA + "Game starting in: " + countDownTimer.get(arenaId)); + } + } else if (!restrictedWorlds) { + //Broadcast that a game is starting soon to all players + getServer().broadcastMessage(ChatColor.AQUA + "Game " + arenaId + " starting in: " + + countDownTimer.get(arenaId)); + } else { + //Broadcast to all players in the arena world that a game is starting soon + for (String worldName : worldNames.values()) { + World world = getServer().getWorld(worldName); + //If the world doesn't exist, skip it + if (world == null) { + continue; + } + for (Player worldPlayer : world.getPlayers()) { + worldPlayer.sendMessage(String.valueOf(countDownTimer.get(arenaId))); + } + } + } + } + + private void announceGracePeriod(int arenaId) { + Arena arena = arenas.get(arenaId); + arena.setGracePeriod(config.getInt("Grace_Period")); + + if (this.graceSchedulerIds.get(arenaId) == null) { + return; + } + + int taskId = getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { + //Reduce grace period by one + arena.setGracePeriod(arena.getGracePeriod() - 1); + int gracePeriod = arena.getGracePeriod(); + boolean broadcastAll = config.getBoolean("broadcastAll"); + + String gracePeriodMessage = null; + if (gracePeriod == 30 || gracePeriod == 15 || (gracePeriod < 11 && gracePeriod > 0)) { + //Print when 30 seconds left, 15 seconds left, and count down from 10 + gracePeriodMessage = ChatColor.GREEN + "Grace period ends in " + gracePeriod + " seconds!"; + } else if (gracePeriod <= 0) { + //Print when the grace period expires + gracePeriodMessage = ChatColor.GREEN + "Grace period is over, FIGHT!"; + } + if (gracePeriodMessage != null) { + if (broadcastAll) { + //Broadcast to all players + getServer().broadcastMessage(gracePeriodMessage); + } else { + //Broadcast to all players in the arena's world + for (Player player : arena.getWorld().getPlayers()) { + player.sendMessage(gracePeriodMessage); + } + } + } + + //Cancel the scheduler if the grace period is over + if (gracePeriod <= 0) { + getServer().getScheduler().cancelTask(graceSchedulerIds.get(arenaId)); + graceSchedulerIds.put(arenaId, null); + } + }, 20L, 20L); + graceSchedulerIds.put(arenaId, taskId); + } + + private void displayCountDown(int arenaId, String msg) { + countDownTimer.put(arenaId, (config.getInt("Countdown_Timer") != 0 ? config.getInt("Countdown_Timer") : 10)); + start.put(arenaId, getServer().getScheduler().scheduleSyncRepeatingTask(this, () -> { + if (countDownTimer.get(arenaId) > 0) { + broadCastArenaStartingSoon(arenaId); + } + countDownTimer.put(arenaId, countDownTimer.get(arenaId) - 1); + if (countDownTimer.get(arenaId) == -1) { + for (UUID gn : Playing.get(arenaId)) { + Scoreboard scoreboard = getServer().getScoreboardManager().getNewScoreboard(); + Objective sobj; + try { + sobj = scoreboard.registerNewObjective("HA", "HAData", ChatColor.GREEN + "HA - Starting"); + } catch (NoSuchMethodError e) { + sobj = scoreboard.registerNewObjective("HA", "HAData"); + sobj.setDisplayName(ChatColor.GREEN + "HA - Starting"); + } + Score sKills = sobj.getScore(ChatColor.RED + "Kills"); + sKills.setScore(0); + Score sDeaths = sobj.getScore(ChatColor.RED + "Spectators"); + sDeaths.setScore(0); + Score sPlayers = sobj.getScore(ChatColor.RED + "Players"); + sPlayers.setScore(0); + Score allKills = sobj.getScore(ChatColor.RED + "Deaths"); + allKills.setScore(0); + sobj.setDisplaySlot(DisplaySlot.SIDEBAR); + Bukkit.getPlayer(gn).setScoreboard(scoreboard); + scoreboards.put(Bukkit.getPlayer(gn).getName(), Bukkit.getPlayer(gn).getScoreboard()); + } + Arena arena = arenas.get(arenaId); + for (ArenaPlayer arenaPlayer : arenaPlayers.values()) { + if (arenaPlayer.getArena() == arena) { + arenaPlayer.setFrozen(false); + } + } + if (config.getBoolean("broadcastAll")) { + getServer().broadcastMessage(msg); + } else { + for (UUID gn : Playing.get(arenaId)) { + Player g = getServer().getPlayer(gn); + g.sendMessage(msg); + } + } + if (config.getInt("Grace_Period") != 0) { + announceGracePeriod(arenaId); + } + if (config.getInt("DeathMatch") != 0) { + int death = config.getInt("DeathMatch"); + timetodeath.put(arenaId, death * 60); + if (deathtime.get(arenaId) == null) { + deathtime.put(arenaId, getServer().getScheduler().scheduleSyncRepeatingTask(Bukkit.getPluginManager().getPlugin("HungerArena"), () -> { + timetodeath.put(arenaId, timetodeath.get(arenaId) - 1); + if (timetodeath.get(arenaId) % 300 == 0) { + if (config.getBoolean("broadcastAll")) { + for (Player wp : location.get(arenaId).get(1).getWorld().getPlayers()) { + if (timetodeath.get(arenaId) != 0) { + wp.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(arenaId) / 60) + ChatColor.RED + " mins till the death match!"); + } + } + } else { + for (UUID gn : Playing.get(arenaId)) { + Player g = getServer().getPlayer(gn); + g.sendMessage(ChatColor.YELLOW + String.valueOf(timetodeath.get(arenaId)) + ChatColor.RED + " mins till the death match!"); + } + } + } + if (timetodeath.get(arenaId) <= 0) { + int i = 1; + for (UUID playing : Playing.get(arenaId)) { + Player tribute = getServer().getPlayer(playing); + + Location pLoc = null; + if (tribute.hasMetadata("HA-Location")) { + List l = tribute.getMetadata("HA-Location"); + if (l != null && l.size() != 0) { + try { + pLoc = (Location) l.get(0).value(); + } catch (Exception e) { + } + } + if (pLoc != null) { + tribute.teleport(pLoc); //random + } else { + tribute.teleport(location.get(arenaId).get(i)); //row + } + } + i += 1; + for (PotionEffect pe : tribute.getActivePotionEffects()) { + PotionEffectType potion = pe.getType(); + tribute.removePotionEffect(potion); + } + if (tribute.getAllowFlight()) { + tribute.setAllowFlight(false); + } + } + if (config.getBoolean("broadcastAll")) { + for (Player wp : location.get(arenaId).get(1).getWorld().getPlayers()) { + wp.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(arenaId).size() + " tributes will be facing off!"); + } + } else { + for (UUID gn : Playing.get(arenaId)) { + Player g = getServer().getPlayer(gn); + g.sendMessage(ChatColor.RED + "The final battle has begun! " + Playing.get(arenaId).size() + " tributes will be facing off!"); + } + } + stopTaskDelayed(deathtime.get(arenaId)); + deathtime.put(arenaId, null); + } + }, 20L, 20L)); + } + } + setTorch(arenaId, true); + stopTaskDelayed(start.get(arenaId)); + } + }, 20L, 20L)); + } + + private void stopTaskDelayed(final int task) { Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> Bukkit.getScheduler().cancelTask(task), 10L); } - public Integer getArena(Player p) { - for (int x : Playing.keySet()) { - if (Playing.get(x).contains(p.getName())) { - return x; - } + public Arena getArena(Player player) { + ArenaPlayer arenaPlayer = arenaPlayers.get(player.getUniqueId()); + if (arenaPlayer != null) { + return arenaPlayer.getArena(); } return null; } - public Integer getSpectating(Player p) { - for (int x : Watching.keySet()) { - if (Watching.get(x).contains(p.getName())) { - return x; - } + public Arena getSpectating(Player player) { + ArenaPlayer arenaPlayer = arenaPlayers.get(player.getUniqueId()); + if (arenaPlayer != null && arenaPlayer.isWatching()) { + return arenaPlayer.getArena(); } return null; } public boolean isSpectating(Player p) { - for (int x : Watching.keySet()) { - if (Watching.get(x).contains(p.getName())) { - return true; - } - } - return false; + return getSpectating(p) != null; } - public void setTorch(int a, boolean set) { - String arena = String.valueOf(a); - if (spawns.getString("Start_torch." + arena) != null) { - String[] Torchcoords = spawns.getString("Start_torch." + arena).split(","); - double torchx = Double.parseDouble(Torchcoords[0]); - double torchy = Double.parseDouble(Torchcoords[1]); - double torchz = Double.parseDouble(Torchcoords[2]); - String torchworld = Torchcoords[3]; - World torchw = getServer().getWorld(torchworld); - Location TorchLoc = new Location(torchw, torchx, torchy, torchz); + public void setTorch(int arenaId, boolean set) { + if (spawns.getString("Start_torch." + arenaId) != null) { + String[] torchCoordinates = spawns.getString("Start_torch." + arenaId).split(","); + double torchX = Double.parseDouble(torchCoordinates[0]); + double torchY = Double.parseDouble(torchCoordinates[1]); + double torchZ = Double.parseDouble(torchCoordinates[2]); + String torchWorldName = torchCoordinates[3]; + World torchWorld = getServer().getWorld(torchWorldName); + Location torchLocation = new Location(torchWorld, torchX, torchY, torchZ); if (set) { - SetTorch(TorchLoc); + torchLocation.getBlock().setType(Material.REDSTONE_TORCH); } else { - TorchLoc.getBlock().setType(Material.AIR); + torchLocation.getBlock().setType(Material.AIR); } } } - private void SetTorch(Location Baseblock) { - Block TorchBlock = Baseblock.getBlock(); - try { - Material Torch = (org.bukkit.Material.valueOf("REDSTONE_TORCH")); - if (Torch != null) { - TorchBlock.setType(Torch); - } - } catch (Exception ex) { - TorchBlock.setType(Material.REDSTONE_TORCH); - } - } } diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/BlockStorage.java b/src/main/java/net/knarcraft/hungerarena/Listeners/BlockStorage.java index 268d280..cd72052 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/BlockStorage.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/BlockStorage.java @@ -42,22 +42,22 @@ public class BlockStorage implements Listener { int a = 1; if (alwaysProtect) { String ThisWorld = p.getWorld().getName(); - for (int z : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(z) != null) { - if (plugin.worldsNames.get(z).equals(ThisWorld)) { + for (int z : plugin.worldNames.keySet()) { + if (plugin.worldNames.get(z) != null) { + if (plugin.worldNames.get(z).equals(ThisWorld)) { a = z; } } } } if (plugin.getArena(p) != null) { - a = plugin.getArena(p); + a = plugin.getArena(p).getArenaId(); } if ((!event.isCancelled()) && (((plugin.Playing.get(a)).contains(pname)) || (alwaysProtect))) { if (plugin.config.getBoolean("Protected_Arena")) { event.setCancelled(true); p.sendMessage(ChatColor.RED + "You can't break blocks while playing!"); - } else if ((plugin.canJoin.get(a) || alwaysProtect) && ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldsNames.containsValue(p.getWorld().getName()))))) { + } else if ((plugin.canJoin.get(a) || alwaysProtect) && ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldNames.containsValue(p.getWorld().getName()))))) { if (((plugin.management.getStringList("blocks.whitelist").isEmpty()) || ((!plugin.management.getStringList("blocks.whitelist").isEmpty()) && (!plugin.management.getStringList("blocks.whitelist").contains(b.getType().name())))) ^ (plugin.management.getBoolean("blocks.useWhitelistAsBlacklist"))) { event.setCancelled(true); p.sendMessage(ChatColor.RED + "That is an illegal block!"); @@ -78,7 +78,7 @@ public class BlockStorage implements Listener { for (int i : plugin.canJoin.keySet()) { if (plugin.canJoin.get(i) || alwaysProtect()) { String ThisWorld = e.getWorld().getName(); - if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && plugin.worldsNames.get(i) != null && plugin.worldsNames.get(i).equalsIgnoreCase(ThisWorld))) { + if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && plugin.worldNames.get(i) != null && plugin.worldNames.get(i).equalsIgnoreCase(ThisWorld))) { if (e.getType() == EntityType.PRIMED_TNT) { e.getLocation().getBlock().setType(Material.TNT); Block TNT = e.getLocation().getBlock(); @@ -102,7 +102,7 @@ public class BlockStorage implements Listener { if (!event.isCancelled()) { for (int i : plugin.canJoin.keySet()) { if (plugin.canJoin.get(i) || alwaysProtect()) { - if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldsNames.get(i) != null && plugin.worldsNames.get(i).equalsIgnoreCase(b.getWorld().getName())))) { + if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldNames.get(i) != null && plugin.worldNames.get(i).equalsIgnoreCase(b.getWorld().getName())))) { String w = b.getWorld().getName(); addDestroyedBlockToList(b, w, i); } @@ -123,21 +123,21 @@ public class BlockStorage implements Listener { int a = 1; if (protall) { String ThisWorld = p.getWorld().getName(); - for (int z : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(z) != null) { - if (plugin.worldsNames.get(z).equals(ThisWorld)) { + for (int z : plugin.worldNames.keySet()) { + if (plugin.worldNames.get(z) != null) { + if (plugin.worldNames.get(z).equals(ThisWorld)) { a = z; } } } } if (plugin.getArena(p) != null) { - a = plugin.getArena(p); + a = plugin.getArena(p).getArenaId(); } if (!event.isCancelled()) { if (((plugin.Playing.get(a)).contains(p.getName())) || (protall)) { if ((plugin.canJoin.get(a)) || (protall)) { - if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldsNames.containsValue(b.getWorld().getName())))) { + if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldNames.containsValue(b.getWorld().getName())))) { if ((b.getType() == Material.SAND || b.getType() == Material.GRAVEL) && (b.getRelative(BlockFace.DOWN).getType() == Material.AIR || b.getRelative(BlockFace.DOWN).getType() == Material.WATER || b.getRelative(BlockFace.DOWN).getType() == Material.LAVA)) { int n = b.getY() - 1; while (b.getWorld().getBlockAt(b.getX(), n, b.getZ()).getType() == Material.AIR || b.getWorld().getBlockAt(b.getX(), n, b.getZ()).getType() == Material.WATER || b.getWorld().getBlockAt(b.getX(), n, b.getZ()).getType() == Material.LAVA) { @@ -168,11 +168,11 @@ public class BlockStorage implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void bucketEmpty(PlayerBucketEmptyEvent event) { if (plugin.getArena(event.getPlayer()) != null) { - int a = plugin.getArena(event.getPlayer()); + int a = plugin.getArena(event.getPlayer()).getArenaId(); if (!event.isCancelled()) { if (plugin.canJoin.get(a)) { if (plugin.Playing.get(a).contains(event.getPlayer().getName())) { - if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldsNames.containsValue(event.getPlayer().getWorld().getName())))) { + if ((!plugin.restrictedWorlds) || ((plugin.restrictedWorlds) && (plugin.worldNames.containsValue(event.getPlayer().getWorld().getName())))) { Block b = event.getBlockClicked().getRelative(event.getBlockFace()); String w = b.getWorld().getName(); addPlacedBlockToList(b, w, a); @@ -186,13 +186,13 @@ public class BlockStorage implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void bucketFill(PlayerBucketFillEvent event) { if (plugin.getArena(event.getPlayer()) != null) { - int arena = plugin.getArena(event.getPlayer()); + int arena = plugin.getArena(event.getPlayer()).getArenaId(); if (event.isCancelled()) { return; } boolean isPlaying = plugin.Playing.get(arena).contains(event.getPlayer().getName()); - boolean enabledInWorld = plugin.worldsNames.containsValue(event.getPlayer().getWorld().getName()); - + boolean enabledInWorld = plugin.worldNames.containsValue(event.getPlayer().getWorld().getName()); + if (joinAble(arena) && (isPlaying && (!plugin.restrictedWorlds || enabledInWorld))) { Block block = event.getBlockClicked().getRelative(event.getBlockFace()); String worldName = block.getWorld().getName(); @@ -208,9 +208,9 @@ public class BlockStorage implements Listener { } for (int arena : plugin.canJoin.keySet()) { - boolean isInWorld = plugin.worldsNames.get(arena).equalsIgnoreCase(event.getBlock().getWorld().getName()); - if (joinAble(arena) || alwaysProtect() && - (!plugin.restrictedWorlds || plugin.worldsNames.get(arena) != null && isInWorld)) { + boolean isInWorld = plugin.worldNames.get(arena).equalsIgnoreCase(event.getBlock().getWorld().getName()); + if (joinAble(arena) || alwaysProtect() && + (!plugin.restrictedWorlds || plugin.worldNames.get(arena) != null && isInWorld)) { Block block = event.getBlock(); String worldName = block.getWorld().getName(); Material material = block.getType(); @@ -263,7 +263,7 @@ public class BlockStorage implements Listener { /** * Gets whether the given arena can be joined - * + * * @param arena

The arena to check

* @return

True if the arena can be joined

*/ diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/DeathListener.java b/src/main/java/net/knarcraft/hungerarena/Listeners/DeathListener.java index 515f8d5..62c02d4 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/DeathListener.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/DeathListener.java @@ -15,6 +15,8 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.scoreboard.DisplaySlot; +import java.util.UUID; + public class DeathListener implements Listener { public final HungerArena plugin; @@ -31,9 +33,9 @@ public class DeathListener implements Listener { //get the arena the player has died in... (may be not the one he joined...) String ThisWorld = p.getWorld().getName(); - for (int z : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(z) != null) { - if (plugin.worldsNames.get(z).equals(ThisWorld)) { + for (int z : plugin.worldNames.keySet()) { + if (plugin.worldNames.get(z) != null) { + if (plugin.worldNames.get(z).equals(ThisWorld)) { a = z; } } @@ -63,7 +65,7 @@ public class DeathListener implements Listener { final Location Spawn = new Location(spawnw, spawnx, spawny, spawnz); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { player.teleport(Spawn); - plugin.RestoreInv(player, player.getName()); + plugin.restoreInventory(player, player.getName()); }, 10L); } @@ -72,136 +74,141 @@ public class DeathListener implements Listener { Player p = event.getEntity(); Server s = p.getServer(); String pname = p.getName(); + UUID playerId = p.getUniqueId(); if (plugin.getArena(p) != null) { - a = plugin.getArena(p); - int players = plugin.Playing.get(a).size() - 1; + a = plugin.getArena(p).getArenaId(); String leftmsg = null; clearInv(p); event.getDrops().clear(); p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); plugin.scoreboards.remove(p.getName()); - if (!plugin.Frozen.get(a).isEmpty()) { - if (plugin.Frozen.get(a).contains(pname)) { - if (!(p.getKiller() instanceof Player)) { - players = plugin.Playing.get(a).size() - 1; - leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!"; - if (plugin.config.getBoolean("Cannon_Death")) { - double y = p.getLocation().getY(); - double newy = y + 200; - double x = p.getLocation().getX(); - double z = p.getLocation().getZ(); - Location strike = new Location(p.getWorld(), x, newy, z); - p.getWorld().strikeLightning(strike); - } - event.setDeathMessage(""); - if (plugin.config.getBoolean("broadcastAll")) { - p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); - } else { - for (String gn : plugin.Playing.get(a)) { - Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); - } - } - plugin.Frozen.get(a).remove(pname); - plugin.Playing.get(a).remove(pname); - if (plugin.config.getBoolean("broadcastAll")) { - p.getServer().broadcastMessage(leftmsg); - } else { - for (String gn : plugin.Playing.get(a)) { - Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(leftmsg); - } - } - plugin.winner(a); - } - } + int players = plugin.Playing.get(a).size() - 1; + if (plugin.arenaPlayers.get(playerId).isFrozen()) { + doFrozenPlayerStuff(p, players, leftmsg, pname, playerId, event, s); } else { - players = plugin.Playing.get(a).size() - 1; - leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!"; - if (plugin.config.getBoolean("Cannon_Death")) { - double y = p.getLocation().getY(); - double newY = y + 200; - double x = p.getLocation().getX(); - double z = p.getLocation().getZ(); - Location strike = new Location(p.getWorld(), x, newY, z); - p.getWorld().strikeLightning(strike); - } - plugin.Dead.get(a).add(pname); - plugin.Playing.get(a).remove(pname); - if (p.getKiller() instanceof Player) { - if (p.getKiller().getInventory().getItemInMainHand().getType() == Material.AIR) { - Player killer = p.getKiller(); - String killername = killer.getName(); - event.setDeathMessage(""); - if (plugin.config.getBoolean("broadcastAll")) { - s.broadcastMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!"); - s.broadcastMessage(leftmsg); - } else { - for (String gn : plugin.Playing.get(a)) { - Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!"); - g.sendMessage(leftmsg); - } - } - if (plugin.Kills.containsKey(killername)) { - plugin.Kills.put(killername, plugin.Kills.get(killername) + 1); - } else { - plugin.Kills.put(killername, 1); - } - if (plugin.Kills.containsKey("__SuM__")) { - plugin.Kills.put("__SuM__", plugin.Kills.get("__SuM__") + 1); - } else { - plugin.Kills.put("__SuM__", 1); - } - plugin.winner(a); - } else { - Player killer = p.getKiller(); - String killername = killer.getName(); - String weapon = "a(n) " + killer.getInventory().getItemInMainHand().getType().name().replace('_', ' '); - if (killer.getInventory().getItemInMainHand().hasItemMeta()) { - if (killer.getInventory().getItemInMainHand().getItemMeta().hasDisplayName()) { - weapon = killer.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); - } - } - String msg = ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with " + weapon; - event.setDeathMessage(""); - if (plugin.config.getBoolean("broadcastAll")) { - s.broadcastMessage(msg); - s.broadcastMessage(leftmsg); - } else { - for (String gn : plugin.Playing.get(a)) { - Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(msg); - g.sendMessage(leftmsg); - } - } - if (plugin.Kills.containsKey(killername)) { - plugin.Kills.put(killername, plugin.Kills.get(killername) + 1); - } else { - plugin.Kills.put(killername, 1); - } - if (plugin.Kills.containsKey("__SuM__")) { - plugin.Kills.put("__SuM__", plugin.Kills.get("__SuM__") + 1); - } else { - plugin.Kills.put("__SuM__", 1); - } - plugin.winner(a); - } - } else { - event.setDeathMessage(""); - if (plugin.config.getBoolean("broadcastAll")) { - s.broadcastMessage(ChatColor.LIGHT_PURPLE + pname + " died of natural causes!"); - s.broadcastMessage(leftmsg); - } else { - for (String gn : plugin.Playing.get(a)) { - Player g = plugin.getServer().getPlayer(gn); - g.sendMessage(ChatColor.LIGHT_PURPLE + pname + " died of " + ChatColor.ITALIC + " probably " + ChatColor.LIGHT_PURPLE + "natural causes!"); - g.sendMessage(leftmsg); - } - } - plugin.winner(a); + doNonFrozenPlayerStuff(p, players, leftmsg, pname, playerId, event, s); + } + } + } + + private void doFrozenPlayerStuff(Player p, int players, String leftmsg, String pname, UUID playerId, PlayerDeathEvent event, Server s) { + //Basically, if a frozen player is killed by something which isn't another player, assume the reason the player + // was killed was because they left their pedestal too early + if (!(p.getKiller() instanceof Player)) { + leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!"; + fireCannon(p); + event.setDeathMessage(""); + if (plugin.config.getBoolean("broadcastAll")) { + p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); + } else { + for (UUID gn : plugin.Playing.get(a)) { + Player g = plugin.getServer().getPlayer(gn); + g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); } } + plugin.arenaPlayers.get(playerId).setFrozen(false); + plugin.arenaPlayers.get(playerId).setInArena(false); + plugin.arenaPlayers.get(playerId).setArena(null); + if (plugin.config.getBoolean("broadcastAll")) { + p.getServer().broadcastMessage(leftmsg); + } else { + for (UUID gn : plugin.Playing.get(a)) { + Player g = plugin.getServer().getPlayer(gn); + g.sendMessage(leftmsg); + } + } + plugin.winner(a); + } + } + + private void doNonFrozenPlayerStuff(Player player, int players, String leftmsg, String pname, UUID playerId, PlayerDeathEvent event, Server s) { + leftmsg = ChatColor.BLUE + "There are now " + players + " tributes left!"; + fireCannon(player); + plugin.Dead.get(a).add(playerId); + plugin.Playing.get(a).remove(playerId); + if (player.getKiller() instanceof Player) { + if (player.getKiller().getInventory().getItemInMainHand().getType() == Material.AIR) { + Player killer = player.getKiller(); + String killername = killer.getName(); + event.setDeathMessage(""); + if (plugin.config.getBoolean("broadcastAll")) { + s.broadcastMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!"); + s.broadcastMessage(leftmsg); + } else { + for (UUID gn : plugin.Playing.get(a)) { + Player g = plugin.getServer().getPlayer(gn); + g.sendMessage(ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with their FIST!"); + g.sendMessage(leftmsg); + } + } + if (plugin.Kills.containsKey(killername)) { + plugin.Kills.put(killername, plugin.Kills.get(killername) + 1); + } else { + plugin.Kills.put(killername, 1); + } + if (plugin.Kills.containsKey("__SuM__")) { + plugin.Kills.put("__SuM__", plugin.Kills.get("__SuM__") + 1); + } else { + plugin.Kills.put("__SuM__", 1); + } + plugin.winner(a); + } else { + Player killer = player.getKiller(); + String killername = killer.getName(); + String weapon = "a(n) " + killer.getInventory().getItemInMainHand().getType().name().replace('_', ' '); + if (killer.getInventory().getItemInMainHand().hasItemMeta()) { + if (killer.getInventory().getItemInMainHand().getItemMeta().hasDisplayName()) { + weapon = killer.getInventory().getItemInMainHand().getItemMeta().getDisplayName(); + } + } + String msg = ChatColor.LIGHT_PURPLE + "**BOOM** Tribute " + pname + " was killed by tribute " + killername + " with " + weapon; + event.setDeathMessage(""); + if (plugin.config.getBoolean("broadcastAll")) { + s.broadcastMessage(msg); + s.broadcastMessage(leftmsg); + } else { + for (UUID gn : plugin.Playing.get(a)) { + Player g = plugin.getServer().getPlayer(gn); + g.sendMessage(msg); + g.sendMessage(leftmsg); + } + } + if (plugin.Kills.containsKey(killername)) { + plugin.Kills.put(killername, plugin.Kills.get(killername) + 1); + } else { + plugin.Kills.put(killername, 1); + } + if (plugin.Kills.containsKey("__SuM__")) { + plugin.Kills.put("__SuM__", plugin.Kills.get("__SuM__") + 1); + } else { + plugin.Kills.put("__SuM__", 1); + } + plugin.winner(a); + } + } else { + event.setDeathMessage(""); + if (plugin.config.getBoolean("broadcastAll")) { + s.broadcastMessage(ChatColor.LIGHT_PURPLE + pname + " died of natural causes!"); + s.broadcastMessage(leftmsg); + } else { + for (UUID gn : plugin.Playing.get(a)) { + Player g = plugin.getServer().getPlayer(gn); + g.sendMessage(ChatColor.LIGHT_PURPLE + pname + " died of " + ChatColor.ITALIC + " probably " + ChatColor.LIGHT_PURPLE + "natural causes!"); + g.sendMessage(leftmsg); + } + } + plugin.winner(a); + } + } + + private void fireCannon(Player player) { + if (plugin.config.getBoolean("Cannon_Death")) { + double y = player.getLocation().getY(); + double newY = y + 200; + double x = player.getLocation().getX(); + double z = player.getLocation().getZ(); + Location strike = new Location(player.getWorld(), x, newY, z); + player.getWorld().strikeLightning(strike); } } diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/FreezeListener.java b/src/main/java/net/knarcraft/hungerarena/Listeners/FreezeListener.java index 001a184..a994c3c 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/FreezeListener.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/FreezeListener.java @@ -1,5 +1,6 @@ package net.knarcraft.hungerarena.Listeners; +import net.knarcraft.hungerarena.ArenaPlayer; import net.knarcraft.hungerarena.HungerArena; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -13,6 +14,7 @@ import org.bukkit.metadata.MetadataValue; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.UUID; public class FreezeListener implements Listener { public final HungerArena plugin; @@ -31,12 +33,12 @@ public class FreezeListener implements Listener { Player p = event.getPlayer(); String pname = p.getName(); if (plugin.getArena(p) != null) { - a = plugin.getArena(p); - if (plugin.Frozen.get(a).contains(pname) && plugin.config.getBoolean("Frozen_Teleport")) { + a = plugin.getArena(p).getArenaId(); + if (plugin.arenaPlayers.get(p.getUniqueId()).isFrozen() && plugin.config.getBoolean("Frozen_Teleport")) { if (plugin.config.getBoolean("Explode_on_Move")) { timeUp.put(a, false); - for (String players : plugin.Playing.get(a)) { - Player playing = plugin.getServer().getPlayerExact(players); + for (UUID players : plugin.Playing.get(a)) { + Player playing = plugin.getServer().getPlayer(players); i = plugin.Playing.get(a).indexOf(players) + 1; if (!timeUp.get(a) && !timing.contains(a)) { timing.add(a); @@ -52,7 +54,7 @@ public class FreezeListener implements Listener { } else { if (!playing.getLocation().getBlock().getLocation().equals(plugin.location.get(a).get(i).getBlock().getLocation())) { if (!plugin.Dead.get(a).contains(playing.getName())) { - plugin.Dead.get(a).add(playing.getName()); + plugin.Dead.get(a).add(playing.getUniqueId()); World world = playing.getLocation().getWorld(); world.createExplosion(playing.getLocation(), 0.0F, false); playing.setHealth(0.0D); @@ -74,17 +76,19 @@ public class FreezeListener implements Listener { if (plugin.config.getBoolean("broadcastAll")) { p.getServer().broadcastMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); } else { - for (String gn : plugin.Playing.get(a)) { + for (UUID gn : plugin.Playing.get(a)) { Player g = plugin.getServer().getPlayer(gn); g.sendMessage(pname + ChatColor.LIGHT_PURPLE + " Stepped off their pedestal too early!"); } } - plugin.Frozen.get(a).remove(pname); - plugin.Playing.get(a).remove(pname); + ArenaPlayer arenaPlayer = plugin.arenaPlayers.get(p.getUniqueId()); + arenaPlayer.setFrozen(false); + arenaPlayer.setInArena(false); + arenaPlayer.setArena(null); if (plugin.config.getBoolean("broadcastAll")) { p.getServer().broadcastMessage(leftmsg); } else { - for (String gn : plugin.Playing.get(a)) { + for (UUID gn : plugin.Playing.get(a)) { Player g = plugin.getServer().getPlayer(gn); g.sendMessage(leftmsg); } diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/JoinAndQuitListener.java b/src/main/java/net/knarcraft/hungerarena/Listeners/JoinAndQuitListener.java index 891fc1e..d81ca79 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/JoinAndQuitListener.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/JoinAndQuitListener.java @@ -1,5 +1,6 @@ package net.knarcraft.hungerarena.Listeners; +import net.knarcraft.hungerarena.ArenaPlayer; import net.knarcraft.hungerarena.HaCommands; import net.knarcraft.hungerarena.HungerArena; import org.bukkit.ChatColor; @@ -12,6 +13,8 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.scoreboard.DisplaySlot; +import java.util.UUID; + public class JoinAndQuitListener implements Listener { public HungerArena plugin; @@ -30,25 +33,26 @@ public class JoinAndQuitListener implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); + final UUID playerId = player.getUniqueId(); final String pname = player.getName(); boolean pfound = false; for (int i : plugin.Watching.keySet()) { - for (String s : plugin.Watching.get(i)) { - Player spectator = plugin.getServer().getPlayerExact(s); + for (UUID s : plugin.Watching.get(i)) { + Player spectator = plugin.getServer().getPlayer(s); player.hidePlayer(plugin, spectator); } } for (int i : plugin.Out.keySet()) { - if (plugin.Out.get(i).contains(pname)) { - plugin.Playing.get(i).add(pname); + if (plugin.Out.get(i).contains(playerId)) { + plugin.Playing.get(i).add(playerId); plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> player.sendMessage(ChatColor.AQUA + "You have saved yourself from being ejected from the arena!"), 40L); - plugin.Out.get(i).remove(pname); + plugin.Out.get(i).remove(playerId); pfound = true; } } for (final int i : plugin.Quit.keySet()) { - if (plugin.Quit.get(i).contains(pname)) { + if (plugin.Quit.get(i).contains(playerId)) { String[] Spawncoords = plugin.spawns.getString("Spawn_coordinates." + i).split(","); String w = Spawncoords[3]; World spawnw = plugin.getServer().getWorld(w); @@ -59,9 +63,9 @@ public class JoinAndQuitListener implements Listener { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { player.teleport(Spawn); player.sendMessage(ChatColor.RED + "You have been teleported to last spawn because you quit/forfeited!"); - plugin.RestoreInv(player, player.getName()); + plugin.restoreInventory(player, player.getName()); if (plugin.Quit.get(i) != null) { - plugin.Quit.get(i).remove(player.getName()); + plugin.Quit.get(i).remove(player.getUniqueId()); } }, 40L); pfound = true; @@ -79,7 +83,7 @@ public class JoinAndQuitListener implements Listener { plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { player.teleport(Spawn); player.sendMessage(ChatColor.RED + "You have been teleported to spawn because you quit/died/forfeited!!"); - plugin.RestoreInv(player, player.getName()); + plugin.restoreInventory(player, player.getName()); if (plugin.Dead.get(i) != null) { plugin.Dead.get(i).remove(player.getName()); } @@ -106,7 +110,7 @@ public class JoinAndQuitListener implements Listener { player.getInventory().setHelmet(null); plugin.inArena.remove(pname); player.sendMessage(ChatColor.RED + "You were still in the arena when you left and now the games are over."); - plugin.RestoreInv(player, player.getName()); + plugin.restoreInventory(player, player.getName()); if (plugin.inArena.get(i) != null) { plugin.inArena.get(i).remove(player.getName()); } @@ -115,7 +119,7 @@ public class JoinAndQuitListener implements Listener { } } } - if (!plugin.restrictedWorlds || plugin.worldsNames.containsValue(player.getWorld().getName())) { + if (!plugin.restrictedWorlds || plugin.worldNames.containsValue(player.getWorld().getName())) { if (!pfound && plugin.config.getBoolean("Force_Players_toSpawn") && (plugin.spawns.getString("Spawn_coordinates.0") != null)) { String[] spawnCoordinates = plugin.spawns.getString("Spawn_coordinates.0").split(","); String w = spawnCoordinates[3]; @@ -124,7 +128,7 @@ public class JoinAndQuitListener implements Listener { double spawnY = Double.parseDouble(spawnCoordinates[1]); double spawnZ = Double.parseDouble(spawnCoordinates[2]); final Location Spawn = new Location(spawnWorld, spawnX, spawnY, spawnZ); - plugin.RestoreInv(player, player.getName()); + plugin.restoreInventory(player, player.getName()); plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { player.teleport(Spawn); player.sendMessage(ChatColor.RED + "You have been teleported to spawn!!"); @@ -134,46 +138,44 @@ public class JoinAndQuitListener implements Listener { } @EventHandler - public void onQuit(PlayerQuitEvent evt) { - Player p = evt.getPlayer(); - String playerName = p.getName(); - for (int i : plugin.Frozen.keySet()) { - if (plugin.Frozen.get(i).contains(playerName)) { - plugin.Frozen.remove(playerName); - String[] Spawncoords = plugin.spawns.getString("Spawn_coordinates.0").split(","); - String w = Spawncoords[3]; - World spawnw = plugin.getServer().getWorld(w); - double spawnx = Double.parseDouble(Spawncoords[0]); - double spawny = Double.parseDouble(Spawncoords[1]); - double spawnz = Double.parseDouble(Spawncoords[2]); - Location Spawn = new Location(spawnw, spawnx, spawny, spawnz); - p.teleport(Spawn); - p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); - plugin.scoreboards.remove(p.getName()); - plugin.Kills.remove(p.getName()); - } + public void onQuit(PlayerQuitEvent event) { + Player player = event.getPlayer(); + ArenaPlayer arenaPlayer = plugin.arenaPlayers.get(player.getUniqueId()); + if (arenaPlayer != null && arenaPlayer.isFrozen()) { + arenaPlayer.setFrozen(false); + String[] spawnCoordinates = plugin.spawns.getString("Spawn_coordinates.0").split(","); + String w = spawnCoordinates[3]; + World spawnWorld = plugin.getServer().getWorld(w); + double spawnX = Double.parseDouble(spawnCoordinates[0]); + double spawnY = Double.parseDouble(spawnCoordinates[1]); + double spawnZ = Double.parseDouble(spawnCoordinates[2]); + Location Spawn = new Location(spawnWorld, spawnX, spawnY, spawnZ); + player.teleport(Spawn); + player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + plugin.scoreboards.remove(player.getName()); + plugin.Kills.remove(player.getName()); } } @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { - final Player p = event.getPlayer(); - final String playerName = p.getName(); - if (plugin.getArena(p) != null) { - arena = plugin.getArena(p); - plugin.Out.get(arena).add(playerName); - plugin.Playing.get(arena).remove(playerName); + final Player player = event.getPlayer(); + final UUID playerId = player.getUniqueId(); + if (plugin.getArena(player) != null) { + arena = plugin.getArena(player).getArenaId(); + plugin.Out.get(arena).add(playerId); + plugin.Playing.get(arena).remove(playerId); plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { - if (plugin.Out.get(arena).contains(playerName)) { - plugin.Quit.get(arena).add(playerName); - plugin.Out.get(arena).remove(playerName); - p.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); - plugin.scoreboards.remove(p.getName()); - plugin.Kills.remove(p.getName()); + if (plugin.Out.get(arena).contains(playerId)) { + plugin.Quit.get(arena).add(playerId); + plugin.Out.get(arena).remove(playerId); + player.getScoreboard().clearSlot(DisplaySlot.SIDEBAR); + plugin.scoreboards.remove(player.getName()); + plugin.Kills.remove(player.getName()); plugin.winner(arena); - plugin.inArena.get(arena).add(playerName); - } else if (plugin.getArena(p) == null) { - plugin.Quit.get(arena).add(playerName); + plugin.inArena.get(arena).add(playerId); + } else if (plugin.getArena(player) == null) { + plugin.Quit.get(arena).add(playerId); } }, 1200L); } diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/PvP.java b/src/main/java/net/knarcraft/hungerarena/Listeners/PvP.java index 2df731c..63d79f6 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/PvP.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/PvP.java @@ -18,7 +18,7 @@ public class PvP implements Listener { this.plugin = m; } - int a = 0; + int arenaId = 0; @EventHandler(priority = EventPriority.MONITOR) public void PlayerPvP(EntityDamageByEntityEvent event) { @@ -26,8 +26,8 @@ public class PvP implements Listener { Entity dl = event.getDamager(); if (pl instanceof Player p && dl instanceof Player d) { if (plugin.getArena(p) != null && plugin.getArena(d) != null) { - a = plugin.getArena(p); - if (plugin.canJoin.get(a)) { + arenaId = plugin.getArena(p).getArenaId(); + if (plugin.canJoin.get(arenaId)) { if (event.isCancelled()) { event.setCancelled(false); } @@ -39,8 +39,8 @@ public class PvP implements Listener { } } if (plugin.getArena(p) != null) { - a = plugin.getArena(p); - if (!plugin.canJoin.get(a)) { + arenaId = plugin.getArena(p).getArenaId(); + if (!plugin.canJoin.get(arenaId)) { if (!event.isCancelled()) { event.setCancelled(true); } @@ -76,13 +76,13 @@ public class PvP implements Listener { @EventHandler public void PlayerDamage(EntityDamageEvent event) { Entity e = event.getEntity(); - if (e instanceof Player p) { - if (plugin.getArena(p) != null) { - a = plugin.getArena(p); - if (plugin.gp.get(a) != null && plugin.gp.get(a) != 0) { + if (e instanceof Player player) { + if (plugin.getArena(player) != null) { + arenaId = plugin.getArena(player).getArenaId(); + if (plugin.gp.get(arenaId) != null && plugin.gp.get(arenaId) != 0) { event.setCancelled(true); } - if (plugin.Frozen.get(a) != null && plugin.Frozen.get(a).contains(p.getName())) { + if (plugin.arenaPlayers.get(player.getUniqueId()).isFrozen()) { event.setCancelled(true); } } diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/TeleportListener.java b/src/main/java/net/knarcraft/hungerarena/Listeners/TeleportListener.java index 4c039e3..bbc5554 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/TeleportListener.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/TeleportListener.java @@ -19,7 +19,7 @@ public class TeleportListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) public void onTP(PlayerTeleportEvent event) { Player p = event.getPlayer(); - if (plugin.worldsNames.containsValue(event.getTo().getWorld().getName()) && plugin.Tele.contains(p)) { + if (plugin.worldNames.containsValue(event.getTo().getWorld().getName()) && plugin.Tele.contains(p)) { event.setCancelled(true); p.sendMessage(ChatColor.RED + "You are a dead tribute... How are you supposed to get back into the arena...."); plugin.Tele.remove(p); diff --git a/src/main/java/net/knarcraft/hungerarena/Listeners/WorldChange.java b/src/main/java/net/knarcraft/hungerarena/Listeners/WorldChange.java index 435274d..9ff0cb4 100644 --- a/src/main/java/net/knarcraft/hungerarena/Listeners/WorldChange.java +++ b/src/main/java/net/knarcraft/hungerarena/Listeners/WorldChange.java @@ -21,8 +21,8 @@ public class WorldChange implements Listener { String pname = p.getName(); String ThisWorld = p.getWorld().getName(); String FromWorld = event.getFrom().getName(); - if (!plugin.worldsNames.containsValue(ThisWorld) && plugin.worldsNames.containsValue(FromWorld)) { - plugin.RestoreInv(p, pname); + if (!plugin.worldNames.containsValue(ThisWorld) && plugin.worldNames.containsValue(FromWorld)) { + plugin.restoreInventory(p, pname); } } @@ -32,16 +32,16 @@ public class WorldChange implements Listener { String pname = p.getName(); String ThisWorld = p.getWorld().getName(); int a = 0; - for (int i : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(i) == null) { + for (int i : plugin.worldNames.keySet()) { + if (plugin.worldNames.get(i) == null) { continue; } - if (plugin.worldsNames.get(i).equals(ThisWorld)) { + if (plugin.worldNames.get(i).equals(ThisWorld)) { a = i; - if (plugin.Frozen.get(a) != null && plugin.Frozen.get(a).contains(pname)) { + if (plugin.arenaPlayers.get(p.getUniqueId()).isFrozen()) { return; } else { - plugin.RestoreInv(p, pname); + plugin.restoreInventory(p, pname); if (plugin.config.getBoolean("joinTeleport")) { String[] spawnCoordinates = plugin.spawns.getString("Spawn_coordinates." + a).split(","); double spawnX = Double.parseDouble(spawnCoordinates[0]); diff --git a/src/main/java/net/knarcraft/hungerarena/SpawnsCommand.java b/src/main/java/net/knarcraft/hungerarena/SpawnsCommand.java index 95c20da..69c00d4 100644 --- a/src/main/java/net/knarcraft/hungerarena/SpawnsCommand.java +++ b/src/main/java/net/knarcraft/hungerarena/SpawnsCommand.java @@ -3,6 +3,7 @@ package net.knarcraft.hungerarena; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.World; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -13,166 +14,157 @@ import java.util.ArrayList; import java.util.HashMap; public class SpawnsCommand implements CommandExecutor { - public final HungerArena plugin; - int i = 0; - int arenaId = 0; - boolean NoPlayerSpawns; - public SpawnsCommand(HungerArena m) { - this.plugin = m; + public final HungerArena plugin; + int tributeId = 0; + int arenaId = 0; + boolean noPlayerSpawns; + + public SpawnsCommand(HungerArena plugin) { + this.plugin = plugin; } @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command cmd, @NotNull String commandLabel, String[] args) { - Player p = (Player) sender; - String ThisWorld = p.getWorld().getName(); - NoPlayerSpawns = true; - for (int i : plugin.worldsNames.keySet()) { - if (plugin.worldsNames.get(i) != null) { - if (plugin.worldsNames.get(i).equals(ThisWorld)) { - arenaId = i; - NoPlayerSpawns = false; + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String commandLabel, + String[] args) { + Player player = (Player) sender; + String playerWorld = player.getWorld().getName(); + this.noPlayerSpawns = true; + for (int arenaId : plugin.arenas.keySet()) { + String arenaWorld = plugin.worldNames.get(arenaId); + if (arenaWorld != null) { + if (arenaWorld.equals(playerWorld)) { + this.arenaId = arenaId; + this.noPlayerSpawns = false; break; } } } - if (cmd.getName().equalsIgnoreCase("StartPoint")) { - if (p.hasPermission("HungerArena.StartPoint")) { - Location location; - double x; - double y; - double z; - if (args.length == 6) { - try { - i = Integer.parseInt(args[1]); - arenaId = Integer.parseInt(args[0]); - } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); - return true; - } - String world = args[2]; - x = Double.parseDouble(args[3]); - y = Double.parseDouble(args[4]); - z = Double.parseDouble(args[5]); - location = new Location(Bukkit.getWorld(world), x, y, z); - if (plugin.location.get(arenaId) != null) { - plugin.location.get(arenaId).put(i, location); - } else { - /*plugin.arenas.put(arenaId, new Arena(arenaId, location.getWorld(), new ArrayList<>(), - ArenaState.IDLE, false, true, 0, 0, 0, - new HashMap<>()));*/ - plugin.arenas.get(arenaId).locations().put(i, location); - plugin.location.put(arenaId, new HashMap<>()); - plugin.location.get(arenaId).put(i, location); - plugin.Playing.put(arenaId, new ArrayList<>()); - plugin.Ready.put(arenaId, new ArrayList<>()); - plugin.Dead.put(arenaId, new ArrayList<>()); - plugin.Quit.put(arenaId, new ArrayList<>()); - plugin.Out.put(arenaId, new ArrayList<>()); - plugin.Watching.put(arenaId, new ArrayList<>()); - plugin.NeedConfirm.put(arenaId, new ArrayList<>()); - plugin.inArena.put(arenaId, new ArrayList<>()); - plugin.Frozen.put(arenaId, new ArrayList<>()); - plugin.canJoin.put(arenaId, false); - plugin.MatchRunning.put(arenaId, null); - plugin.open.put(arenaId, true); - } - String coords = location.getWorld().getName() + "," + (location.getX()) + "," + location.getY() + "," + (location.getZ()); - p.sendMessage(coords); - plugin.spawns.set("Spawns." + arenaId + "" + i, coords); - plugin.worldsNames.put(arenaId, location.getWorld().getName()); - plugin.saveSpawns(); - plugin.maxPlayers.put(arenaId, plugin.location.get(arenaId).size()); - p.sendMessage(ChatColor.AQUA + "You have set the spawn location of Tribute " + i + " in arena " + arenaId + "!"); - this.plugin.reloadSpawnPoints(false); - return true; - } - if (args.length >= 2) { - try { - i = Integer.parseInt(args[1]); - arenaId = Integer.parseInt(args[0]); - } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); - return true; - } - if (i >= 1 && i <= plugin.config.getInt("maxPlayers")) { - if (!plugin.worldsNames.containsValue(p.getWorld().getName())) { - p.sendMessage(ChatColor.GOLD + "You've added this world to the config ..."); - } - location = p.getLocation().getBlock().getLocation(); - x = location.getX() + .5; - y = location.getY(); - z = location.getZ() + .5; - location = new Location(location.getWorld(), x, y, z); - if (plugin.location.get(arenaId) != null) { - plugin.location.get(arenaId).put(i, location); - } else { - plugin.location.put(arenaId, new HashMap<>()); - plugin.location.get(arenaId).put(i, location); - plugin.Playing.put(arenaId, new ArrayList<>()); - plugin.Ready.put(arenaId, new ArrayList<>()); - plugin.Dead.put(arenaId, new ArrayList<>()); - plugin.Quit.put(arenaId, new ArrayList<>()); - plugin.Out.put(arenaId, new ArrayList<>()); - plugin.Watching.put(arenaId, new ArrayList<>()); - plugin.NeedConfirm.put(arenaId, new ArrayList<>()); - plugin.inArena.put(arenaId, new ArrayList<>()); - plugin.Frozen.put(arenaId, new ArrayList<>()); - plugin.canJoin.put(arenaId, false); - plugin.MatchRunning.put(arenaId, null); - plugin.open.put(arenaId, true); - } - String coords = location.getWorld().getName() + "," + (location.getX()) + "," + location.getY() + "," + (location.getZ()); - p.sendMessage(coords); - plugin.spawns.set("Spawns." + arenaId + "" + i, coords); - plugin.worldsNames.put(arenaId, location.getWorld().getName()); - plugin.saveSpawns(); - plugin.maxPlayers.put(arenaId, plugin.location.get(arenaId).size()); - p.sendMessage(ChatColor.AQUA + "You have set the spawn location of Tribute " + i + " in arena " + arenaId + "!"); - this.plugin.reloadSpawnPoints(false); - } else { - p.sendMessage(ChatColor.RED + "You can't go past " + plugin.config.getInt("maxPlayers") + " players!"); - } - } else if (args.length == 1) { - if (NoPlayerSpawns) { - try { - arenaId = Integer.parseInt(args[0]); - } catch (Exception e) { - p.sendMessage(ChatColor.RED + "Argument not an integer!"); - return true; - } - } - if (plugin.spawns.get("Spawns." + arenaId) != null) { - int start = 1; - while (start < plugin.config.getInt("maxPlayers") + 2) { - if (plugin.spawns.get("Spawns." + arenaId + "" + start) != null) { - start = start + 1; - if (start == plugin.config.getInt("maxPlayers") + 1) { - p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.GREEN + "All spawns set, type /startpoint [Arena #] [Spawn #] to over-ride previous points!"); - return true; - } - } else { - int sloc = start; - start = plugin.config.getInt("maxPlayers") + 1; - p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Begin Setting For Arena " + arenaId + " Starting From Point " + sloc); - plugin.setting.put(p.getName(), arenaId + "-" + sloc); - return true; - } - } - } - p.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Begin Setting For Arena " + arenaId + " Starting From Point " + 1); - plugin.setting.put(p.getName(), arenaId + "-" + 1); - return true; - } else { - p.sendMessage(ChatColor.RED + "No argument given! \nUse command like this:\n/startpoint [Arena #] [Startpoint #] for setting your position as a startpoint.\n/startpoint [Arena #] [Startpoint #] [Mapname] [x] [y] [z] \nOr you can use /startpoint [Arena #] to use the 'spawntool': ID" + plugin.config.getInt("spawnsTool") + " for setting the startpoints!"); - return false; - } - } else { - p.sendMessage(ChatColor.RED + "You don't have permission!"); + if (!command.getName().equalsIgnoreCase("StartPoint")) { + return false; + } + + if (!player.hasPermission("HungerArena.StartPoint")) { + player.sendMessage(ChatColor.RED + "You don't have permission!"); + return false; + } + + if (args.length >= 2) { + try { + this.tributeId = Integer.parseInt(args[1]); + this.arenaId = Integer.parseInt(args[0]); + } catch (Exception e) { + player.sendMessage(ChatColor.RED + "Argument not an integer!"); + return true; } } - return false; + + if (args.length == 6) { + saveGivenLocationSpawnPoint(args, player); + return true; + } else if (args.length >= 2) { + savePlayerLocationSpawnPoint(player); + return true; + } else if (args.length == 1) { + enableSpawnSetting(args, player); + return true; + } else { + player.sendMessage(ChatColor.RED + "No argument given! \nUse command like this:\n/startpoint [Arena #] " + + "[Startpoint #] for setting your position as a startpoint.\n/startpoint [Arena #] [Startpoint #] " + + "[Mapname] [x] [y] [z] \nOr you can use /startpoint [Arena #] to use the 'spawntool': ID" + + plugin.config.getInt("spawnsTool") + " for setting the startpoints!"); + return false; + } + } + + private void enableSpawnSetting(String[] args, Player player) { + //If any player spawn has been set, the arena id was set during the constructor call + if (noPlayerSpawns) { + try { + this.arenaId = Integer.parseInt(args[0]); + } catch (Exception e) { + player.sendMessage(ChatColor.RED + "Argument not an integer!"); + return; + } + } + + //If spawns already exist, calculate the next missing spawn + int start = 1; + if (plugin.spawns.get("Spawns." + arenaId) != null) { + while (start < plugin.config.getInt("maxPlayers") + 2) { + if (plugin.spawns.get("Spawns." + arenaId + "" + start) != null) { + start++; + //All spawn points already set + if (start == plugin.config.getInt("maxPlayers") + 1) { + player.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.GREEN + + "All spawns set, type /startpoint [Arena #] [Spawn #] to over-ride previous points!"); + return; + } + } else { + //Enable spawn setting, starting from the next available spawn + player.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + + "Begin Setting For Arena " + arenaId + " Starting From Point " + start); + plugin.setting.put(player.getName(), arenaId + "-" + start); + return; + } + } + } + //Enable spawn setting, starting from the next available spawn + player.sendMessage(ChatColor.DARK_AQUA + "[HungerArena] " + ChatColor.RED + "Begin Setting For Arena " + + arenaId + " Starting From Point " + start); + plugin.setting.put(player.getName(), arenaId + "-" + start); + } + + private void savePlayerLocationSpawnPoint(Player player) { + if (tributeId >= 1 && tributeId <= plugin.config.getInt("maxPlayers")) { + player.sendMessage(ChatColor.RED + "You can't go past " + plugin.config.getInt("maxPlayers") + " players!"); + return; + } + + if (!plugin.worldNames.containsValue(player.getWorld().getName())) { + player.sendMessage(ChatColor.GOLD + "You've added this world to the config ..."); + } + Location location = player.getLocation().getBlock().getLocation(); + double x = location.getX() + .5; + double y = location.getY(); + double z = location.getZ() + .5; + location = new Location(location.getWorld(), x, y, z); + + saveSpawnPoint(player, location); + } + + private void saveGivenLocationSpawnPoint(String[] args, Player player) { + String worldName = args[2]; + double x = Double.parseDouble(args[3]); + double y = Double.parseDouble(args[4]); + double z = Double.parseDouble(args[5]); + Location location = new Location(Bukkit.getWorld(worldName), x, y, z); + + saveSpawnPoint(player, location); + } + + private void saveSpawnPoint(Player player, Location location) { + //Add a new arena if it does not yet exist + if (plugin.arenas.get(arenaId) == null) { + plugin.arenas.put(arenaId, new Arena(arenaId, location.getWorld(), new ArrayList<>(), + ArenaState.IDLE, false, true, 0, 0, 0, + new HashMap<>())); + } + Arena arena = plugin.arenas.get(arenaId); + arena.getLocations().put(tributeId, location); + + World world = location.getWorld(); + String coordinates = world == null ? "" : world.getName() + "," + location.getX() + "," + + location.getY() + "," + location.getZ(); + player.sendMessage(coordinates); + plugin.spawns.set(String.format("Spawns.%s.%s", arenaId, tributeId), coordinates); + plugin.worldNames.put(arenaId, location.getWorld().getName()); + plugin.saveSpawns(); + + arena.setMaxPlayers(plugin.location.get(arenaId).size()); + player.sendMessage(ChatColor.AQUA + String.format("You have set the spawn location of Tribute %d in arena %d!", tributeId, arenaId)); + this.plugin.reloadSpawnPoints(false); } }