diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
deleted file mode 100644
index 166bd77..0000000
--- a/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,57 +0,0 @@
-Contributing to BlockHunt
-====
-
-If you want to contribute to BlockHunt you're welcome to do so!
-Just code what you would like to see or help with "Accepted" issues.
-
-When committing use the following symbols:
-
-*
- + For new features/code.
-*
- - For removed code.
-*
- * For fixes, like bugs.
-* ~ Changed stuff/others.
-
-Thanks for helping!
-
-Read before posting issue
-====
-So if you have an issue regarding BlockHunt that's fine, just go through this check list before you go writing up new
-issues that we have to deal with.
-
-1: Plugins - The plugins that BlockHunt requires are ProtocolLib and LibsDisguise, both of these should be updated and
-should be tested to see if they are working.
-
-2: Bugs - Have you found a bug? Make sure it isn't anything else to do with the plugin. If you are reporting a bug after
-you have updated to a new Bukkit/Spigot version then that is ok because with every new version comes new bugs
-
-3: Conflicting plugin - These are the most common issue with BlockHunt, if you have installed a plugin and BlockHunt is
-giving an error, then remove that plugin and don't go putting issues on that are not needed.
-
-4: Ideas - New ideas are needed as always but please don't go spamming us saying "Add MySQL", Add this and that and
-that. Some things we will add to improve BlockHunt but if we say that were not going to implement an idea into BlockHunt
-then we won't
-
-5: False Reports - Adding false issues to this page will only make our lives more difficult, if you're going to troll
-then do it on someone else's plugin because personally that is the last thing on my mind.
-
-6: Check everything - If you can't PVP in a BlockHunt arena then check every single last setting including your
-WorldGuard settings and even your server.properties file as that has a true/false check for PVP
-
-7: Check if the issue already exists - Look on GitHub at all the issues first before you go posting an issue, we are
-again sick of marking issues as duplicates and then closing them
-
-8: If it truly is an issue, report it, and we will deal with it as soon as ;3
-
-NOTE: Bugs will always be fixed first before implementing ideas so please don't spam us.
-
-Also, please do not message us via Bukkit as it is irritating, and we only respond to Plugin Developers
-
-Thank you for reading this. The reason I have written this up is that we are sick to the back teeth of issues that don't
-need to be reported.
-
-Thank you,
-
-Steffion, RandomPanda30, tempszz.
diff --git a/src/main/java/net/knarcraft/blockhunt/BlockHunt.java b/src/main/java/net/knarcraft/blockhunt/BlockHunt.java
index 8b1c050..1d1b1e4 100644
--- a/src/main/java/net/knarcraft/blockhunt/BlockHunt.java
+++ b/src/main/java/net/knarcraft/blockhunt/BlockHunt.java
@@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.listener.OnBlockBreakEvent;
import net.knarcraft.blockhunt.listener.OnBlockPlaceEvent;
@@ -113,7 +113,7 @@ public class BlockHunt extends JavaPlugin implements Listener {
@Override
public void onDisable() {
for (Arena arena : MemoryStorage.arenaMap.values()) {
- String cause = "[BlockHunt] Arena " + arena.arenaName + " has been stopped";
+ String cause = "[BlockHunt] Arena " + arena.getArenaOptions().arenaName() + " has been stopped";
ArenaHelper.stopArena(arena, cause, MessageKey.WARNING_ARENA_STOPPED);
}
@@ -143,28 +143,28 @@ public class BlockHunt extends JavaPlugin implements Listener {
private void updateArenaStates() {
for (Arena arena : MemoryStorage.arenaMap.values()) {
- if (arena.gameState == ArenaState.WAITING) {
- if (arena.playersInArena.size() >= arena.minPlayers) {
- arena.gameState = ArenaState.STARTING;
- arena.timer = arena.timeInLobbyUntilStart;
+ if (arena.getGameState() == ArenaGameState.WAITING) {
+ if (arena.getPlayersInArena().size() >= arena.getMinPlayers()) {
+ arena.setGameState(ArenaGameState.STARTING);
+ arena.setTimer(arena.getTimeInLobbyUntilStart());
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" +
- arena.timeInLobbyUntilStart);
+ arena.getTimeInLobbyUntilStart());
}
- } else if (arena.gameState == ArenaState.STARTING) {
+ } else if (arena.getGameState() == ArenaGameState.STARTING) {
updateStartingArena(arena);
}
// TODO: Figure out a better way to do this. Currently, individual seeker timers are used to allow another
// player to take over if a seeker leaves the game. But assuming the game is already running, wouldn't it
// make more sense to allow the seeker to seek immediately?
- for (Player player : arena.seekers) {
+ for (Player player : arena.getSeekers()) {
// Reduce the seeker wait timer if necessary
Integer seekerTime = MemoryStorage.seekerTime.get(player);
if (seekerTime != null) {
MemoryStorage.seekerTime.put(player, --seekerTime);
if (seekerTime <= 0) {
// Teleport the seeker to the hiders warp, and allow them to seek
- PlayerHelper.teleport(player, arena.arenaLocations.getHidersWarp());
+ PlayerHelper.teleport(player, arena.getArenaLocations().getHidersWarp());
MemoryStorage.seekerTime.remove(player);
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_SEEKER_SPAWNED,
"%playerName%-" + player.getName());
@@ -172,14 +172,14 @@ public class BlockHunt extends JavaPlugin implements Listener {
}
}
- if (arena.gameState == ArenaState.IN_GAME) {
+ if (arena.getGameState() == ArenaGameState.IN_GAME) {
updateInGameArena(arena);
}
// Display countdown as the player's XP level
- for (Player player : arena.playersInArena) {
- player.setLevel(arena.timer);
- if (arena.seekers.contains(player)) {
+ for (Player player : arena.getPlayersInArena()) {
+ player.setLevel(arena.getTimer());
+ if (arena.getSeekers().contains(player)) {
player.setGameMode(GameMode.SURVIVAL);
} else {
player.setGameMode(GameMode.ADVENTURE);
@@ -196,24 +196,24 @@ public class BlockHunt extends JavaPlugin implements Listener {
*/
private void updateStartingArena(Arena arena) {
// Reduce the arena's timer
- arena.timer -= 1;
- if (arena.timer > 0) {
- if (arena.timer == 60 || arena.timer == 30 || arena.timer == 10) {
+ arena.setTimer(arena.getTimer() - 1);
+ if (arena.getTimer() > 0) {
+ if (arena.getTimer() == 60 || arena.getTimer() == 30 || arena.getTimer() == 10) {
// Announce when the arena starts
- ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.timer);
- } else if (arena.timer <= 5) {
+ ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.getTimer());
+ } else if (arena.getTimer() <= 5) {
// Count down from 5 seconds
World world = null;
- Location warp = arena.arenaLocations.getLobbyWarp();
+ Location warp = arena.getArenaLocations().getLobbyWarp();
if (warp != null) {
world = warp.getWorld();
}
if (world != null) {
- int pitch = (int) (2 - Math.floor(arena.timer / 2.0));
- world.playSound(arena.arenaLocations.getLobbyWarp(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1,
+ int pitch = (int) (2 - Math.floor(arena.getTimer() / 2.0));
+ world.playSound(arena.getArenaLocations().getLobbyWarp(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1,
pitch);
}
- ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.timer);
+ ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LOBBY_ARENA_IS_STARTING, "1-" + arena.getTimer());
}
} else {
startArena(arena);
@@ -227,8 +227,8 @@ public class BlockHunt extends JavaPlugin implements Listener {
*/
private void startArena(Arena arena) {
// Update the game state, and set the timer to count down from the specified game-time
- arena.gameState = ArenaState.IN_GAME;
- arena.timer = arena.gameTime;
+ arena.setGameState(ArenaGameState.IN_GAME);
+ arena.setTimer(arena.getGameTime());
// Assign the necessary seekers
assignSeekers(arena);
@@ -236,10 +236,10 @@ public class BlockHunt extends JavaPlugin implements Listener {
// Assign the necessary hiders
assignHiders(arena);
- MessageHelper.broadcastMessage(arena.hiders, MessageKey.NORMAL_LOBBY_ARENA_STARTED_HIDERS,
- "seconds-" + arena.waitingTimeSeeker);
- MessageHelper.broadcastMessage(arena.seekers, MessageKey.NORMAL_LOBBY_ARENA_STARTED_SEEKERS,
- "seconds-" + arena.waitingTimeSeeker);
+ MessageHelper.broadcastMessage(arena.getHiders(), MessageKey.NORMAL_LOBBY_ARENA_STARTED_HIDERS,
+ "seconds-" + arena.getWaitingTimeSeeker());
+ MessageHelper.broadcastMessage(arena.getSeekers(), MessageKey.NORMAL_LOBBY_ARENA_STARTED_SEEKERS,
+ "seconds-" + arena.getWaitingTimeSeeker());
}
/**
@@ -248,17 +248,17 @@ public class BlockHunt extends JavaPlugin implements Listener {
* @param arena
The arena to assign hiders for
*/
private void assignHiders(Arena arena) {
- List possibleHiders = new ArrayList<>(arena.playersInArena);
- possibleHiders.removeAll(arena.seekers);
+ List possibleHiders = new ArrayList<>(arena.getPlayersInArena());
+ possibleHiders.removeAll(arena.getSeekers());
// Assign all non-seekers to hiders
for (Player arenaPlayer : possibleHiders) {
- arena.hiders.add(arenaPlayer);
+ arena.getHiders().add(arenaPlayer);
// Clear the player's inventory
arenaPlayer.getInventory().clear();
// Assign a random disguise block
- ItemStack block = arena.disguiseBlocks.get(MemoryStorage.random.nextInt(arena.disguiseBlocks.size()));
+ ItemStack block = arena.getDisguiseBlocks().get(MemoryStorage.random.nextInt(arena.getDisguiseBlocks().size()));
// If the player has chosen their block type, use that instead
if (MemoryStorage.chosenBlock.get(arenaPlayer) != null) {
block = MemoryStorage.chosenBlock.get(arenaPlayer);
@@ -270,7 +270,7 @@ public class BlockHunt extends JavaPlugin implements Listener {
DisguiseAPI.disguiseToAll(arenaPlayer, disguise);
// Teleport to the hiders warp
- PlayerHelper.teleport(arenaPlayer, arena.arenaLocations.getHidersWarp());
+ PlayerHelper.teleport(arenaPlayer, arena.getArenaLocations().getHidersWarp());
// Put the block in the player's inventory and on the player's head, so they know which block they are
ItemStack blockTimer = new ItemStack(block.getType(), 5);
@@ -292,11 +292,11 @@ public class BlockHunt extends JavaPlugin implements Listener {
* @param arena The arena to assign seekers to
*/
private void assignSeekers(Arena arena) {
- List possibleSeekers = new ArrayList<>(arena.playersInArena);
+ List possibleSeekers = new ArrayList<>(arena.getPlayersInArena());
// Prioritize players that have asked to be seekers
int seekers = 0;
- for (Player player : arena.playersInArena) {
+ for (Player player : arena.getPlayersInArena()) {
/* Add the player as a seeker if they prefer to be a seeker, or remove them from possible seekers if they
have set themselves as a hider */
Boolean chosenSeeker = MemoryStorage.chosenSeeker.get(player);
@@ -308,13 +308,13 @@ public class BlockHunt extends JavaPlugin implements Listener {
}
// Prevent more than the max amount of seekers from being assigned
- if (seekers >= arena.amountSeekersOnStart) {
+ if (seekers >= arena.getAmountSeekersOnStart()) {
break;
}
}
// Randomly assign the required amount of seekers
- for (int i = seekers; i < arena.amountSeekersOnStart; i++) {
+ for (int i = seekers; i < arena.getAmountSeekersOnStart(); i++) {
// Prevent an infinite loop if it's impossible to assign the required amount of seekers
if (possibleSeekers.size() == 0) {
break;
@@ -334,11 +334,11 @@ public class BlockHunt extends JavaPlugin implements Listener {
*/
private void addSeeker(Arena arena, Player player) {
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_SEEKER_CHOSEN, "seeker-" + player.getName());
- arena.seekers.add(player);
- PlayerHelper.teleport(player, arena.arenaLocations.getSeekersWarp());
+ arena.getSeekers().add(player);
+ PlayerHelper.teleport(player, arena.getArenaLocations().getSeekersWarp());
player.getInventory().clear();
player.setWalkSpeed(0.3F);
- MemoryStorage.seekerTime.put(player, arena.waitingTimeSeeker);
+ MemoryStorage.seekerTime.put(player, arena.getWaitingTimeSeeker());
// Give the seeker their armor and sword
giveSeekerItems(player);
@@ -372,29 +372,29 @@ public class BlockHunt extends JavaPlugin implements Listener {
* @param arena The arena to update
*/
private void updateInGameArena(Arena arena) {
- arena.timer--;
+ arena.setTimer(arena.getTimer() - 1);
// If the game ends, trigger the hiders' win
- if (arena.timer <= 0) {
+ if (arena.getTimer() <= 0) {
ArenaHelper.hidersWin(arena);
return;
}
// If "timeUntilHidersSword" has passed, give the hiders their sword
- if (arena.timer == arena.gameTime - arena.timeUntilHidersSword) {
+ if (arena.getTimer() == arena.getGameTime() - arena.getTimeUntilHidersSword()) {
ItemStack sword = new ItemStack(Material.WOODEN_SWORD, 1);
sword.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);
- for (Player arenaPlayer : arena.hiders) {
+ for (Player arenaPlayer : arena.getHiders()) {
arenaPlayer.getInventory().addItem(sword);
MessageHelper.sendMessage(arenaPlayer, MessageKey.NORMAL_IN_GAME_GIVEN_SWORD);
}
}
// Announce the type of blocks the remaining hiders are disguised as
- if (arena.blockAnnouncerTime > 0 && arena.timer == arena.blockAnnouncerTime) {
+ if (arena.getBlockAnnouncerTime() > 0 && arena.getTimer() == arena.getBlockAnnouncerTime()) {
Set remainingBlocks = new HashSet<>();
- for (Player arenaPlayer : arena.hiders) {
+ for (Player arenaPlayer : arena.getHiders()) {
ItemStack item = arenaPlayer.getInventory().getItem(8);
String block = (item == null ? Material.AIR : item.getType()).name();
remainingBlocks.add(uppercaseAllFirst(block.replace("_", " ")));
@@ -404,61 +404,24 @@ public class BlockHunt extends JavaPlugin implements Listener {
}
// Count down towards the end of the arena
- if (arena.timer == 190 || arena.timer == 60 || arena.timer == 30 || arena.timer == 10 || arena.timer <= 5) {
- ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_ARENA_END, "1-" + arena.timer);
+ if (arena.getTimer() == 190 || arena.getTimer() == 60 || arena.getTimer() == 30 || arena.getTimer() == 10 || arena.getTimer() <= 5) {
+ ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_ARENA_END, "1-" + arena.getTimer());
}
// Play a sound for the last 5 seconds of the arena game's duration
- if (arena.timer <= 5) {
- Location location = arena.arenaLocations.getLobbyWarp();
+ if (arena.getTimer() <= 5) {
+ Location location = arena.getArenaLocations().getLobbyWarp();
if (location != null && location.getWorld() != null) {
- int pitch = (int) (2 - Math.floor(arena.timer / 2.0));
- location.getWorld().playSound(arena.arenaLocations.getLobbyWarp(),
+ int pitch = (int) (2 - Math.floor(arena.getTimer() / 2.0));
+ location.getWorld().playSound(arena.getArenaLocations().getLobbyWarp(),
Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, pitch);
}
}
- for (Player player : arena.hiders) {
- updateHiddenState(player);
+ for (Player player : arena.getHiders()) {
+ VisibilityHelper.updateHiddenState(player);
}
ScoreboardHelper.updateScoreboard(arena); // TODO Only do this when needed (player added/removed)
}
- /**
- * Updates the hidden state of the given hider
- *
- * @param player A player that's currently a hider
- */
- private void updateHiddenState(Player player) {
- Location playerLocation = player.getLocation();
- Location moveLocation = MemoryStorage.moveLocation.get(player);
-
- // If the hider has somehow lost their disguise block from their inventory,
- ItemStack inventoryBlock = player.getInventory().getItem(8);
- if (inventoryBlock == null && MemoryStorage.playerBlock.get(player) != null) {
- inventoryBlock = MemoryStorage.playerBlock.get(player);
- player.getInventory().setItem(8, inventoryBlock);
- }
-
- if (moveLocation == null || inventoryBlock == null) {
- return;
- }
-
- // If the player is standing still, try to turn the player into a solid block
- if (moveLocation.getX() == playerLocation.getX() && moveLocation.getY() == playerLocation.getY() &&
- moveLocation.getZ() == playerLocation.getZ()) {
- if (inventoryBlock.getAmount() > 1) {
- // Just decrease the timer
- inventoryBlock.setAmount(inventoryBlock.getAmount() - 1);
- } else {
- VisibilityHelper.makePlayerSolid(player, inventoryBlock);
- }
- } else {
- // The player moved. Un-hide and reset the hide timer
- inventoryBlock.setAmount(5);
- if (!DisguiseAPI.isDisguised(player)) {
- VisibilityHelper.makePlayerUnSolid(player);
- }
- }
- }
}
diff --git a/src/main/java/net/knarcraft/blockhunt/arena/Arena.java b/src/main/java/net/knarcraft/blockhunt/arena/Arena.java
index 2208ee6..d337904 100644
--- a/src/main/java/net/knarcraft/blockhunt/arena/Arena.java
+++ b/src/main/java/net/knarcraft/blockhunt/arena/Arena.java
@@ -18,142 +18,58 @@ import java.util.Map;
@SerializableAs("BlockHuntArena")
public class Arena implements ConfigurationSerializable {
- /**
- * The name of this arena
- */
- public final String arenaName;
+ private int maxPlayers;
+ private int minPlayers;
+ private int amountSeekersOnStart;
+ private int timeInLobbyUntilStart;
+ private int waitingTimeSeeker;
+ private int gameTime;
+ private int timeUntilHidersSword;
+ private int blockAnnouncerTime;
+ private List disguiseBlocks;
+ private int seekersTokenWin;
+ private int hidersTokenWin;
+ private int killTokens;
+ private ArenaGameState gameState;
+ private final ArenaOptions arenaOptions;
+ private final ArenaLocations arenaLocations;
+ private int timer;
+
+ private final List playersInArena;
+ private final List seekers;
+ private final List hiders;
+ private final Scoreboard scoreboard;
/**
- * The maximum amount of players that can join at once
+ * Instantiates a new arena
+ *
+ * @param arenaOptions The arena's immutable options
+ * @param arenaLocations The various locations for the arena
+ * @param maxPlayers The maximum amount of players that can join at once
+ * @param minPlayers The minimum amount of players required for the arena to start
+ * @param amountSeekersOnStart The amount of players made into seekers when this arena starts
+ * @param timeInLobbyUntilStart The amount of seconds players have to wait in the lobby before this arena starts
+ * @param waitingTimeSeeker The amount of time seekers have to wait before they can start seeking
+ * @param gameTime The amount of seconds the game will last before hiders automatically win
+ * @param timeUntilHidersSword The amount of seconds until hiders get swords to defend themselves
+ * @param blockAnnouncerTime The amount of seconds left of the game when remaining hidden blocks are announced
+ * @param disguiseBlocks The blocks players can disguise into when playing in the arena
+ * @param seekersTokenWin The amount of tokens granted to each seeker if seekers win
+ * @param hidersTokenWin The amount of tokens granted to each hider if hiders win
+ * @param killTokens The amount of tokens granted for killing another player
+ * @param playersInArena The players currently in this arena
+ * @param gameState The current game state of this arena
+ * @param timer The current value of this arena's game timer
+ * @param seekers The seekers currently in this arena
+ * @param scoreboard This arena's scoreboard
*/
- public int maxPlayers;
-
- /**
- * The minimum amount of players required for the arena to start
- */
- public int minPlayers;
-
- /**
- * The amount of players made into seekers when this arena starts
- */
- public int amountSeekersOnStart;
-
- /**
- * The amount of seconds players have to wait in the lobby before this arena starts
- */
- public int timeInLobbyUntilStart;
-
- /**
- * The amount of time seekers have to wait before they can start seeking
- */
- public int waitingTimeSeeker;
-
- /**
- * The amount of seconds the game will last before hiders automatically win
- */
- public int gameTime;
-
- /**
- * The amount of seconds until hiders get swords to defend themselves
- */
- public int timeUntilHidersSword;
-
- /**
- * The amount of seconds left of the game when remaining hidden blocks are announced
- */
- public int blockAnnouncerTime;
-
- /**
- * Whether seekers can hurt other seekers
- */
- public final boolean seekersCanHurtSeekers;
-
- /**
- * Whether hiders can hurt seekers
- */
- public final boolean hidersCanHurtSeekers;
-
- /**
- * Whether hiders can hurt other hiders
- */
- public final boolean hidersCanHurtHiders;
-
- /**
- * Whether seekers take fall damage
- */
- public final boolean seekersTakeFallDamage;
-
- /**
- * Whether hiders take fall damage
- */
- public final boolean hidersTakeFallDamage;
-
- /**
- * The blocks allowed for disguises
- */
- public List disguiseBlocks;
-
- /**
- * The commands to be run on the seekers if the seekers win (%player%)
- */
- public final List seekersWinCommands;
-
- /**
- * The commands to be run on the hiders if the hiders win (%player%)
- */
- public final List hidersWinCommands;
-
- /**
- * The commands players are allowed to use while in this arena
- * TODO: This seems to be missing a proper implementation
- */
- public final List allowedCommands;
-
- /**
- * The amount of tokens granted to each seeker if seekers win
- */
- public int seekersTokenWin;
-
- /**
- * The amount of tokens granted to each hider if hiders win
- */
- public int hidersTokenWin;
-
- /**
- * The amount of tokens granted for killing another player
- */
- public int killTokens;
-
- /**
- * The players currently in this arena
- */
- public final List playersInArena;
-
- /**
- * The current state of this arena
- */
- public ArenaState gameState;
-
- public final ArenaLocations arenaLocations;
-
- /**
- * A timer that counts from the game duration towards 0
- */
- public int timer;
- public final List seekers;
- public final List hiders;
- public final Scoreboard scoreboard;
-
- public Arena(String arenaName, Location corner1, Location corner2, int maxPlayers, int minPlayers,
+ public Arena(ArenaOptions arenaOptions, ArenaLocations arenaLocations, int maxPlayers, int minPlayers,
int amountSeekersOnStart, int timeInLobbyUntilStart, int waitingTimeSeeker, int gameTime,
- int timeUntilHidersSword, int blockAnnouncerTime, boolean seekersCanHurtSeekers,
- boolean hidersCanHurtSeekers, boolean hidersCanHurtHiders, boolean seekersTakeFallDamage,
- boolean hidersTakeFallDamage, List disguiseBlocks, Location lobbyWarp, Location hidersWarp,
- Location seekersWarp, Location spawnWarp, List seekersWinCommands,
- List hidersWinCommands, List allowedCommands, int seekersTokenWin, int hidersTokenWin,
- int killTokens, List playersInArena, ArenaState gameState, int timer, List seekers,
+ int timeUntilHidersSword, int blockAnnouncerTime,
+ List disguiseBlocks, int seekersTokenWin, int hidersTokenWin,
+ int killTokens, List playersInArena, ArenaGameState gameState, int timer, List seekers,
Scoreboard scoreboard) {
- this.arenaName = arenaName;
+ this.arenaOptions = arenaOptions;
this.maxPlayers = maxPlayers;
this.minPlayers = minPlayers;
this.amountSeekersOnStart = amountSeekersOnStart;
@@ -162,15 +78,7 @@ public class Arena implements ConfigurationSerializable {
this.gameTime = gameTime;
this.timeUntilHidersSword = timeUntilHidersSword;
this.blockAnnouncerTime = blockAnnouncerTime;
- this.seekersCanHurtSeekers = seekersCanHurtSeekers;
- this.hidersCanHurtHiders = hidersCanHurtHiders;
- this.hidersCanHurtSeekers = hidersCanHurtSeekers;
- this.seekersTakeFallDamage = seekersTakeFallDamage;
- this.hidersTakeFallDamage = hidersTakeFallDamage;
this.disguiseBlocks = disguiseBlocks;
- this.seekersWinCommands = seekersWinCommands;
- this.hidersWinCommands = hidersWinCommands;
- this.allowedCommands = allowedCommands;
this.seekersTokenWin = seekersTokenWin;
this.hidersTokenWin = hidersTokenWin;
this.killTokens = killTokens;
@@ -181,13 +89,309 @@ public class Arena implements ConfigurationSerializable {
this.hiders = new ArrayList<>(playersInArena);
this.hiders.removeAll(seekers);
this.scoreboard = scoreboard;
- this.arenaLocations = new ArenaLocations(corner1, corner2, lobbyWarp, hidersWarp, seekersWarp, spawnWarp);
+ this.arenaLocations = arenaLocations;
+ }
+
+ /**
+ * Gets the maximum amount of players that can join at once
+ *
+ * @return The maximum amount of players that can join at once
+ */
+ public int getMaxPlayers() {
+ return maxPlayers;
+ }
+
+ /**
+ * Sets the maximum amount of players that can join at once
+ *
+ * @param maxPlayers The maximum amount of players that can join at once
+ */
+ public void setMaxPlayers(int maxPlayers) {
+ if (maxPlayers > 1) {
+ this.maxPlayers = maxPlayers;
+ }
+ }
+
+ /**
+ * Gets the minimum amount of players required for this arena to start
+ *
+ * @return The minimum amount of players required for this arena to start
+ */
+ public int getMinPlayers() {
+ return minPlayers;
+ }
+
+ /**
+ * Sets the minimum amount of players required for this arena to start
+ *
+ * @param minPlayers The minimum amount of players required for this arena to start
+ */
+ public void setMinPlayers(int minPlayers) {
+ if (minPlayers > 0 && minPlayers <= maxPlayers) {
+ this.minPlayers = minPlayers;
+ }
+ }
+
+ /**
+ * Gets the amount of players made into seekers when this arena starts
+ *
+ * @return The amount of players made into seekers when this arena starts
+ */
+ public int getAmountSeekersOnStart() {
+ return amountSeekersOnStart;
+ }
+
+ /**
+ * Sets the amount of players made into seekers when this arena starts
+ *
+ * @param amountSeekersOnStart The amount of players made into seekers when this arena starts
+ */
+ public void setAmountSeekersOnStart(int amountSeekersOnStart) {
+ this.amountSeekersOnStart = amountSeekersOnStart;
+ }
+
+ /**
+ * Gets the amount of seconds players have to wait in the lobby before this arena starts
+ *
+ * @return The amount of seconds players have to wait in the lobby before this arena starts
+ */
+ public int getTimeInLobbyUntilStart() {
+ return timeInLobbyUntilStart;
+ }
+
+ /**
+ * Sets the amount of seconds players have to wait in the lobby before this arena starts
+ *
+ * @param timeInLobbyUntilStart The amount of seconds players have to wait in the lobby before this arena starts
+ */
+ public void setTimeInLobbyUntilStart(int timeInLobbyUntilStart) {
+ if (timeInLobbyUntilStart >= 0) {
+ this.timeInLobbyUntilStart = timeInLobbyUntilStart;
+ }
+ }
+
+ /**
+ * Gets the amount of time seekers have to wait before they can start seeking
+ *
+ * @return The amount of time seekers have to wait before they can start seeking
+ */
+ public int getWaitingTimeSeeker() {
+ return waitingTimeSeeker;
+ }
+
+ /**
+ * Sets the amount of time seekers have to wait before they can start seeking
+ *
+ * @param waitingTimeSeeker The amount of time seekers have to wait before they can start seeking
+ */
+ public void setWaitingTimeSeeker(int waitingTimeSeeker) {
+ if (waitingTimeSeeker > 0) {
+ this.waitingTimeSeeker = waitingTimeSeeker;
+ }
+ }
+
+ /**
+ * Gets the amount of seconds the game will last before hiders automatically win
+ *
+ * @return The amount of seconds the game will last before hiders automatically win
+ */
+ public int getGameTime() {
+ return gameTime;
+ }
+
+ /**
+ * Sets the amount of seconds the game will last before hiders automatically win
+ *
+ * @param gameTime The amount of seconds the game will last before hiders automatically win
+ */
+ public void setGameTime(int gameTime) {
+ if (gameTime > 0) {
+ this.gameTime = gameTime;
+ }
+ }
+
+ /**
+ * Gets the amount of seconds until hiders get swords to defend themselves
+ *
+ * @return The amount of seconds until hiders get swords to defend themselves
+ */
+ public int getTimeUntilHidersSword() {
+ return timeUntilHidersSword;
+ }
+
+ /**
+ * Sets the amount of seconds until hiders get swords to defend themselves
+ *
+ * @param timeUntilHidersSword The amount of seconds until hiders get swords to defend themselves
+ */
+ public void setTimeUntilHidersSword(int timeUntilHidersSword) {
+ if (timeUntilHidersSword >= 0) {
+ this.timeUntilHidersSword = timeUntilHidersSword;
+ }
+ }
+
+ /**
+ * Gets the amount of seconds left of the game when remaining hidden blocks are announced
+ *
+ * @return The amount of seconds left of the game when remaining hidden blocks are announced
+ */
+ public int getBlockAnnouncerTime() {
+ return blockAnnouncerTime;
+ }
+
+ /**
+ * Sets the amount of seconds left of the game when remaining hidden blocks are announced
+ *
+ * @param blockAnnouncerTime The amount of seconds left of the game when remaining hidden blocks are announced
+ */
+ public void setBlockAnnouncerTime(int blockAnnouncerTime) {
+ if (blockAnnouncerTime >= 0) {
+ this.blockAnnouncerTime = blockAnnouncerTime;
+ }
+ }
+
+ /**
+ * Gets the blocks players can disguise into when playing in this arena
+ *
+ * @return The blocks players can disguise into when playing in this arena
+ */
+ public List getDisguiseBlocks() {
+ return disguiseBlocks;
+ }
+
+ /**
+ * Sets the blocks players can disguise into when playing in this arena
+ *
+ * @param disguiseBlocks The blocks players can disguise into when playing in this arena
+ */
+ public void setDisguiseBlocks(@NotNull List disguiseBlocks) {
+ this.disguiseBlocks = disguiseBlocks;
+ }
+
+ /**
+ * Gets the amount of tokens granted to each seeker if seekers win
+ *
+ * @return The amount of tokens granted to each seeker if seekers win
+ */
+ public int getSeekersTokenWin() {
+ return seekersTokenWin;
+ }
+
+ /**
+ * Sets the amount of tokens granted to each seeker if seekers win
+ *
+ * @param seekersTokenWin The amount of tokens granted to each seeker if seekers win
+ */
+ public void setSeekersTokenWin(int seekersTokenWin) {
+ if (seekersTokenWin >= 0) {
+ this.seekersTokenWin = seekersTokenWin;
+ }
+ }
+
+ /**
+ * Gets the amount of tokens granted to each hider if hiders win
+ *
+ * @return The amount of tokens granted to each hider if hiders win
+ */
+ public int getHidersTokenWin() {
+ return hidersTokenWin;
+ }
+
+ /**
+ * Sets the amount of tokens granted to each hider if hiders win
+ *
+ * @param hidersTokenWin The amount of tokens granted to each hider if hiders win
+ */
+ public void setHidersTokenWin(int hidersTokenWin) {
+ if (hidersTokenWin >= 0) {
+ this.hidersTokenWin = hidersTokenWin;
+ }
+ }
+
+ /**
+ * Gets the amount of tokens granted for killing another player
+ *
+ * @return The amount of tokens granted for killing another player
+ */
+ public int getKillTokens() {
+ return killTokens;
+ }
+
+ /**
+ * Sets the amount of tokens granted for killing another player
+ *
+ * @param killTokens The amount of tokens granted for killing another player
+ */
+ public void setKillTokens(int killTokens) {
+ if (killTokens >= 0) {
+ this.killTokens = killTokens;
+ }
+ }
+
+ /**
+ * Gets the current game state of this arena
+ *
+ * @return The current game state of this arena
+ */
+ public ArenaGameState getGameState() {
+ return gameState;
+ }
+
+ /**
+ * Sets the current game state of this arena
+ *
+ * @param gameState The current game state of this arena
+ */
+ public void setGameState(@NotNull ArenaGameState gameState) {
+ this.gameState = gameState;
+ }
+
+ /**
+ * Gets this arena's immutable options
+ *
+ * @return This arena's immutable options
+ */
+ public ArenaOptions getArenaOptions() {
+ return arenaOptions;
+ }
+
+ /**
+ * Gets the various locations for this arena
+ *
+ * @return The various locations for this arena
+ */
+ public ArenaLocations getArenaLocations() {
+ return arenaLocations;
+ }
+
+ public int getTimer() {
+ return timer;
+ }
+
+ public void setTimer(int timer) {
+ this.timer = timer;
+ }
+
+ public List getPlayersInArena() {
+ return playersInArena;
+ }
+
+ public List getSeekers() {
+ return seekers;
+ }
+
+ public List getHiders() {
+ return hiders;
+ }
+
+ public Scoreboard getScoreboard() {
+ return scoreboard;
}
@Override
public @NotNull Map serialize() {
Map map = new HashMap<>();
- map.put("arenaName", arenaName);
+ map.put("arenaName", arenaOptions.arenaName());
map.put("pos1", arenaLocations.getCorner1());
map.put("pos2", arenaLocations.getCorner2());
map.put("maxPlayers", maxPlayers);
@@ -198,19 +402,19 @@ public class Arena implements ConfigurationSerializable {
map.put("gameTime", gameTime);
map.put("timeUntilHidersSword", timeUntilHidersSword);
map.put("blockAnnouncerTime", blockAnnouncerTime);
- map.put("seekersCanHurtSeekers", seekersCanHurtSeekers);
- map.put("hidersCanHurtSeekers", hidersCanHurtSeekers);
- map.put("hidersCanHurtHiders", hidersCanHurtHiders);
- map.put("seekersTakeFallDamage", seekersTakeFallDamage);
- map.put("hidersTakeFallDamage", hidersTakeFallDamage);
+ map.put("seekersCanHurtSeekers", arenaOptions.seekersCanHurtSeekers());
+ map.put("hidersCanHurtSeekers", arenaOptions.hidersCanHurtSeekers());
+ map.put("hidersCanHurtHiders", arenaOptions.hidersCanHurtHiders());
+ map.put("seekersTakeFallDamage", arenaOptions.seekersTakeFallDamage());
+ map.put("hidersTakeFallDamage", arenaOptions.hidersTakeFallDamage());
map.put("disguiseBlocks", disguiseBlocks);
map.put("lobbyWarp", arenaLocations.getLobbyWarp());
map.put("hidersWarp", arenaLocations.getHidersWarp());
map.put("seekersWarp", arenaLocations.getSeekersWarp());
map.put("spawnWarp", arenaLocations.getExitWarp());
- map.put("seekersWinCommands", seekersWinCommands);
- map.put("hidersWinCommands", hidersWinCommands);
- map.put("allowedCommands", allowedCommands);
+ map.put("seekersWinCommands", arenaOptions.seekersWinCommands());
+ map.put("hidersWinCommands", arenaOptions.hidersWinCommands());
+ map.put("allowedCommands", arenaOptions.allowedCommands());
map.put("seekersTokenWin", seekersTokenWin);
map.put("hidersTokenWin", hidersTokenWin);
map.put("killTokens", killTokens);
@@ -226,9 +430,21 @@ public class Arena implements ConfigurationSerializable {
scoreboard = scoreboardManager.getNewScoreboard();
}
return new Arena(
- (String) map.getOrDefault("arenaName", "UNKNOWN_NAME"),
- (Location) map.getOrDefault("pos1", loc),
- (Location) map.getOrDefault("pos2", loc),
+ new ArenaOptions((String) map.getOrDefault("arenaName", "UNKNOWN_NAME"),
+ (Boolean) map.getOrDefault("seekersCanHurtSeekers", false),
+ (Boolean) map.getOrDefault("hidersCanHurtSeekers", true),
+ (Boolean) map.getOrDefault("hidersCanHurtHiders", false),
+ (Boolean) map.getOrDefault("seekersTakeFallDamage", false),
+ (Boolean) map.getOrDefault("hidersTakeFallDamage", false),
+ (List) map.getOrDefault("seekersWinCommands", new ArrayList()),
+ (List) map.getOrDefault("hidersWinCommands", new ArrayList()),
+ (List) map.getOrDefault("allowedCommands", new ArrayList())),
+ new ArenaLocations((Location) map.getOrDefault("pos1", loc),
+ (Location) map.getOrDefault("pos2", loc),
+ (Location) map.getOrDefault("lobbyWarp", loc),
+ (Location) map.getOrDefault("hidersWarp", loc),
+ (Location) map.getOrDefault("seekersWarp", loc),
+ (Location) map.getOrDefault("spawnWarp", loc)),
(Integer) map.getOrDefault("maxPlayers", 12),
(Integer) map.getOrDefault("minPlayers", 3),
(Integer) map.getOrDefault("amountSeekersOnStart", 1),
@@ -237,24 +453,11 @@ public class Arena implements ConfigurationSerializable {
(Integer) map.getOrDefault("gameTime", 200),
(Integer) map.getOrDefault("timeUntilHidersSword", 30),
(Integer) map.getOrDefault("blockAnnouncerTime", 45),
- (Boolean) map.getOrDefault("seekersCanHurtSeekers", false),
- (Boolean) map.getOrDefault("hidersCanHurtSeekers", true),
- (Boolean) map.getOrDefault("hidersCanHurtHiders", false),
- (Boolean) map.getOrDefault("seekersTakeFallDamage", false),
- (Boolean) map.getOrDefault("hidersTakeFallDamage", false),
(List) map.getOrDefault("disguiseBlocks", new ArrayList()),
- (Location) map.getOrDefault("lobbyWarp", loc),
- (Location) map.getOrDefault("hidersWarp", loc),
- (Location) map.getOrDefault("seekersWarp", loc),
- (Location) map.getOrDefault("spawnWarp", loc),
- (List) map.getOrDefault("seekersWinCommands", new ArrayList()),
- (List) map.getOrDefault("hidersWinCommands", new ArrayList()),
- (List) map.getOrDefault("allowedCommands", new ArrayList()),
(Integer) map.getOrDefault("seekersTokenWin", 10),
(Integer) map.getOrDefault("hidersTokenWin", 50),
(Integer) map.getOrDefault("killTokens", 8),
- new ArrayList<>(), ArenaState.WAITING, 0, new ArrayList<>(), scoreboard
- );
+ new ArrayList<>(), ArenaGameState.WAITING, 0, new ArrayList<>(), scoreboard);
}
}
\ No newline at end of file
diff --git a/src/main/java/net/knarcraft/blockhunt/arena/ArenaState.java b/src/main/java/net/knarcraft/blockhunt/arena/ArenaGameState.java
similarity index 92%
rename from src/main/java/net/knarcraft/blockhunt/arena/ArenaState.java
rename to src/main/java/net/knarcraft/blockhunt/arena/ArenaGameState.java
index 010d2e1..fd267c2 100644
--- a/src/main/java/net/knarcraft/blockhunt/arena/ArenaState.java
+++ b/src/main/java/net/knarcraft/blockhunt/arena/ArenaGameState.java
@@ -3,7 +3,7 @@ package net.knarcraft.blockhunt.arena;
/**
* The current state of an arena
*/
-public enum ArenaState {
+public enum ArenaGameState {
/**
* The arena is waiting for enough players
diff --git a/src/main/java/net/knarcraft/blockhunt/arena/ArenaOptions.java b/src/main/java/net/knarcraft/blockhunt/arena/ArenaOptions.java
new file mode 100644
index 0000000..7a150ed
--- /dev/null
+++ b/src/main/java/net/knarcraft/blockhunt/arena/ArenaOptions.java
@@ -0,0 +1,46 @@
+package net.knarcraft.blockhunt.arena;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A record of an arena's permanent properties only editable by changing the arena file
+ *
+ * This record is completely immutable
+ *
+ * @param arenaName The name of the arena
+ * @param seekersCanHurtSeekers Whether seekers can hurt other seekers
+ * @param hidersCanHurtSeekers Whether hiders can hurt seekers
+ * @param hidersCanHurtHiders Whether hiders can hurt other hiders
+ * @param seekersTakeFallDamage Whether seekers take fall damage
+ * @param hidersTakeFallDamage Whether hiders take fall damage
+ * @param seekersWinCommands The commands to be run on the seekers if the seekers win (%player%)
+ * @param hidersWinCommands The commands to be run on the hiders if the hiders win (%player%)
+ * @param allowedCommands The commands players are allowed to use while in this arena
//TODO: Not properly implemented
+ */
+public record ArenaOptions(String arenaName,
+ boolean seekersCanHurtSeekers,
+ boolean hidersCanHurtSeekers,
+ boolean hidersCanHurtHiders,
+ boolean seekersTakeFallDamage,
+ boolean hidersTakeFallDamage,
+ List seekersWinCommands,
+ List hidersWinCommands,
+ List allowedCommands) {
+
+ @Override
+ public List seekersWinCommands() {
+ return new ArrayList<>(seekersWinCommands);
+ }
+
+ @Override
+ public List hidersWinCommands() {
+ return new ArrayList<>(hidersWinCommands);
+ }
+
+ @Override
+ public List allowedCommands() {
+ return new ArrayList<>(allowedCommands);
+ }
+
+}
diff --git a/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java b/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java
index 2cb6174..ddac687 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/CreateCommand.java
@@ -2,7 +2,9 @@ package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
+import net.knarcraft.blockhunt.arena.ArenaLocations;
+import net.knarcraft.blockhunt.arena.ArenaOptions;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.manager.CommandManager;
import net.knarcraft.blockhunt.util.MessageHelper;
@@ -27,13 +29,16 @@ public class CreateCommand extends DefaultCommand {
} else {
if (MemoryStorage.pos1.get(player) != null && MemoryStorage.pos2.get(player) != null) {
if (MemoryStorage.pos1.get(player).getWorld().equals(MemoryStorage.pos2.get(player).getWorld())) {
- Arena arena = new Arena(args[1], MemoryStorage.pos1.get(player), MemoryStorage.pos2.get(player),
+ ArenaOptions arenaOptions = new ArenaOptions(args[1], false,
+ false, false, false,
+ false, new ArrayList<>(), new ArrayList<>(), new ArrayList<>());
+ ArenaLocations arenaLocations = new ArenaLocations(MemoryStorage.pos1.get(player),
+ MemoryStorage.pos2.get(player), null, null, null, null);
+ Arena arena = new Arena(arenaOptions, arenaLocations,
12, 3, 1, 50, 20,
- 300, 30, 45, false,
- false, false, false, false,
- new ArrayList<>(), null, null, null, null,
- new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), 10, 50,
- 8, new ArrayList<>(), ArenaState.WAITING, 0, new ArrayList<>(),
+ 300, 30, 45,
+ new ArrayList<>(), 10, 50,
+ 8, new ArrayList<>(), ArenaGameState.WAITING, 0, new ArrayList<>(),
Bukkit.getScoreboardManager().getNewScoreboard());
MemoryStorage.arenas.getFileConfiguration().set(args[1], arena);
MemoryStorage.arenas.save();
diff --git a/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java b/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java
index a90953d..37fcd36 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/ListCommand.java
@@ -11,11 +11,12 @@ public class ListCommand extends DefaultCommand {
@Override
public boolean execute(Player player, String[] args) {
- MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" + BlockHunt.getPluginDescriptionFile().getName());
+ MessageHelper.sendMessage(player, ConfigKey.CHAT_HEADER_HIGH, "header-" +
+ BlockHunt.getPluginDescriptionFile().getName());
if (MemoryStorage.arenaMap.size() >= 1) {
MessageHelper.sendMessage(player, "&7Available arena(s):");
for (Arena arena : MemoryStorage.arenaMap.values()) {
- MessageHelper.sendMessage(player, "%A" + arena.arenaName);
+ MessageHelper.sendMessage(player, "%A" + arena.getArenaOptions().arenaName());
}
} else {
MessageHelper.sendMessage(player, "&7&oNo arenas available...");
diff --git a/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java b/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java
index 25b7d06..e09c7fe 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/ReloadCommand.java
@@ -21,7 +21,7 @@ public class ReloadCommand extends DefaultCommand {
MemoryStorage.signs.load();
MemoryStorage.shop.load();
for (Arena arena : MemoryStorage.arenaMap.values()) {
- String cause = "[BlockHunt] Arena " + arena.arenaName + " has been stopped";
+ String cause = "[BlockHunt] Arena " + arena.getArenaOptions().arenaName() + " has been stopped";
ArenaHelper.stopArena(arena, cause, MessageKey.WARNING_ARENA_STOPPED);
}
diff --git a/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java b/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java
index 571837a..e8b4048 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/RemoveCommand.java
@@ -37,7 +37,7 @@ public class RemoveCommand extends DefaultCommand {
MemoryStorage.arenas.save();
MemoryStorage.signs.load();
- MemoryStorage.arenaMap.remove(arena.arenaName.toLowerCase());
+ MemoryStorage.arenaMap.remove(arena.getArenaOptions().arenaName().toLowerCase());
return true;
}
diff --git a/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java b/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java
index 01e1aad..9fb4128 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/SetWarpCommand.java
@@ -24,7 +24,7 @@ public class SetWarpCommand extends DefaultCommand {
Arena arena = MemoryStorage.arenaMap.get(arenaName.toLowerCase());
if (arena != null) {
- ArenaLocations locations = arena.arenaLocations;
+ ArenaLocations locations = arena.getArenaLocations();
Location playerLocation = player.getLocation();
if (warpName.equalsIgnoreCase("lobby")) {
locations.setLobbyWarp(playerLocation);
@@ -56,7 +56,7 @@ public class SetWarpCommand extends DefaultCommand {
}
public void save(Arena arena) {
- MemoryStorage.arenas.getFileConfiguration().set(arena.arenaName, arena);
+ MemoryStorage.arenas.getFileConfiguration().set(arena.getArenaOptions().arenaName(), arena);
MemoryStorage.arenas.save();
ArenaHelper.loadArenas();
}
diff --git a/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java b/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java
index 59bb150..e438dcc 100644
--- a/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java
+++ b/src/main/java/net/knarcraft/blockhunt/command/StartCommand.java
@@ -2,7 +2,7 @@ package net.knarcraft.blockhunt.command;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.manager.CommandManager;
import net.knarcraft.blockhunt.util.MessageHelper;
@@ -20,24 +20,26 @@ public class StartCommand extends DefaultCommand {
Arena arena = MemoryStorage.arenaMap.get(args[1].toLowerCase());
if (arena != null) {
- if (arena.gameState.equals(ArenaState.WAITING)) {
- if (arena.playersInArena.size() >= 2) {
- arena.timer = 11;
- arena.gameState = ArenaState.STARTING;
- MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName);
+ if (arena.getGameState().equals(ArenaGameState.WAITING)) {
+ if (arena.getPlayersInArena().size() >= 2) {
+ arena.setTimer(11);
+ arena.setGameState(ArenaGameState.STARTING);
+ MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" +
+ arena.getArenaOptions().arenaName());
} else {
MessageHelper.sendMessage(player, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-2");
}
- } else if (arena.gameState.equals(ArenaState.STARTING)) {
- if (arena.playersInArena.size() < arena.maxPlayers) {
- if (arena.timer >= 10) {
- arena.timer = 11;
+ } else if (arena.getGameState().equals(ArenaGameState.STARTING)) {
+ if (arena.getPlayersInArena().size() < arena.getMaxPlayers()) {
+ if (arena.getTimer() >= 10) {
+ arena.setTimer(11);
}
} else {
- arena.timer = 1;
+ arena.setTimer(1);
}
- MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" + arena.arenaName);
+ MessageHelper.sendMessage(player, MessageKey.NORMAL_START_FORCED, "arenaName-" +
+ arena.getArenaOptions().arenaName());
}
} else {
MessageHelper.sendMessage(player, MessageKey.ERROR_NO_ARENA, "name-" + args[1]);
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageByEntityEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageByEntityEvent.java
index a0f4538..278050b 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageByEntityEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageByEntityEvent.java
@@ -4,7 +4,7 @@ import me.libraryaddict.disguise.DisguiseAPI;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.util.ArenaHelper;
import net.knarcraft.blockhunt.util.MessageHelper;
@@ -65,30 +65,30 @@ public class OnEntityDamageByEntityEvent implements Listener {
return;
}
- if (arena.gameState == ArenaState.WAITING || arena.gameState == ArenaState.STARTING) {
+ if (arena.getGameState() == ArenaGameState.WAITING || arena.getGameState() == ArenaGameState.STARTING) {
// Always cancel damage when players are waiting
event.setCancelled(true);
return;
}
// Seeker receiving damage
- if (arena.seekers.contains(player)) {
- if (arena.seekers.contains(damageDealer)) {
+ if (arena.getSeekers().contains(player)) {
+ if (arena.getSeekers().contains(damageDealer)) {
// Seeker damaged by seeker
- if (!arena.seekersCanHurtSeekers) {
+ if (!arena.getArenaOptions().seekersCanHurtSeekers()) {
event.setCancelled(true);
return;
}
} else {
// Seeker damaged by hider
- if (!arena.hidersCanHurtSeekers) {
+ if (!arena.getArenaOptions().hidersCanHurtSeekers()) {
event.setCancelled(true);
return;
}
}
} else {
// Hider damaged by hider
- if (!arena.hidersCanHurtHiders && !arena.seekers.contains(damageDealer)) {
+ if (!arena.getArenaOptions().hidersCanHurtHiders() && !arena.getSeekers().contains(damageDealer)) {
event.setCancelled(true);
return;
}
@@ -122,18 +122,18 @@ public class OnEntityDamageByEntityEvent implements Listener {
DisguiseAPI.undisguiseToAll(player);
MemoryStorage.playerBlock.remove(player);
- if (arena.hiders.contains(player)) {
+ if (arena.getHiders().contains(player)) {
killHider(arena, player, finalDamageDealer);
}
player.getInventory().clear();
- if (arena.seekers.size() >= arena.playersInArena.size()) {
+ if (arena.getSeekers().size() >= arena.getPlayersInArena().size()) {
ArenaHelper.seekersWin(arena);
} else {
DisguiseAPI.undisguiseToAll(player);
- MemoryStorage.seekerTime.put(player, arena.waitingTimeSeeker);
- PlayerHelper.teleport(player, arena.arenaLocations.getSeekersWarp());
+ MemoryStorage.seekerTime.put(player, arena.getWaitingTimeSeeker());
+ PlayerHelper.teleport(player, arena.getArenaLocations().getSeekersWarp());
player.setGameMode(GameMode.SURVIVAL);
player.setWalkSpeed(0.3F);
@@ -151,27 +151,27 @@ public class OnEntityDamageByEntityEvent implements Listener {
*/
private void killHider(Arena arena, Player player, Player finalDamageDealer) {
int damageDealerTokens = TokensHelper.getTokens(finalDamageDealer);
- TokensHelper.setTokens(finalDamageDealer, damageDealerTokens + arena.killTokens);
+ TokensHelper.setTokens(finalDamageDealer, damageDealerTokens + arena.getKillTokens());
- MessageHelper.sendMessage(finalDamageDealer, MessageKey.NORMAL_ADDED_TOKEN, "amount-" + arena.killTokens);
+ MessageHelper.sendMessage(finalDamageDealer, MessageKey.NORMAL_ADDED_TOKEN, "amount-" + arena.getKillTokens());
int playerTokens = TokensHelper.getTokens(player);
- float addedTokens = ((float) arena.hidersTokenWin - (((float) arena.timer / (float) arena.gameTime) *
- (float) arena.hidersTokenWin));
+ float addedTokens = ((float) arena.getHidersTokenWin() - (((float) arena.getTimer() / (float) arena.getGameTime()) *
+ (float) arena.getHidersTokenWin()));
TokensHelper.setTokens(player, playerTokens + (int) addedTokens);
MessageHelper.sendMessage(player, MessageKey.NORMAL_ADDED_TOKEN, "amount-" + (int) addedTokens);
- arena.seekers.add(player);
+ arena.getSeekers().add(player);
player.setWalkSpeed(0.3F);
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_HIDER_DIED,
"%playerName%-" + player.getDisplayName(), "killer-" + finalDamageDealer.getDisplayName());
- int hiderCount = arena.hiders.size();
+ int hiderCount = arena.getHiders().size();
if ((hiderCount <= 3) && (hiderCount > 0)) {
List hiders = new ArrayList<>();
- for (Player p : arena.playersInArena) {
- if (!arena.seekers.contains(p)) {
+ for (Player p : arena.getPlayersInArena()) {
+ if (!arena.getSeekers().contains(p)) {
hiders.add(p.getName());
}
}
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageEvent.java
index c505b8b..4a365e7 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnEntityDamageEvent.java
@@ -29,8 +29,8 @@ public class OnEntityDamageEvent implements Listener {
break;
case FALL:
// Prevent seeker/hider fall damage (if configured)
- if ((arena.seekers.contains(player) && !arena.seekersTakeFallDamage) ||
- (arena.hiders.contains(player) && !arena.hidersTakeFallDamage)) {
+ if ((arena.getSeekers().contains(player) && !arena.getArenaOptions().seekersTakeFallDamage()) ||
+ (arena.getHiders().contains(player) && !arena.getArenaOptions().hidersTakeFallDamage())) {
event.setCancelled(true);
}
break;
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryClickEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryClickEvent.java
index 75f80fb..4ec676c 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryClickEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryClickEvent.java
@@ -111,8 +111,8 @@ public class OnInventoryClickEvent implements Listener {
if (event.getCurrentItem().getType().equals(Material.BLUE_WOOL)) {
int i = 0;
for (Arena arena : MemoryStorage.arenaMap.values()) {
- if (arena.playersInArena.contains(player)) {
- for (Player playerCheck : arena.playersInArena) {
+ if (arena.getPlayersInArena().contains(player)) {
+ for (Player playerCheck : arena.getPlayersInArena()) {
if (MemoryStorage.chosenSeeker.get(playerCheck) != null &&
MemoryStorage.chosenSeeker.get(playerCheck)) {
i = i + 1;
@@ -120,7 +120,7 @@ public class OnInventoryClickEvent implements Listener {
}
}
- if (i >= arena.amountSeekersOnStart) {
+ if (i >= arena.getAmountSeekersOnStart()) {
MessageHelper.sendMessage(player, MessageKey.ERROR_SHOP_MAX_SEEKERS_REACHED);
} else {
MemoryStorage.chosenSeeker.put(player, true);
@@ -140,8 +140,8 @@ public class OnInventoryClickEvent implements Listener {
} else if (event.getCurrentItem().getType().equals(Material.RED_WOOL)) {
int i = 0;
for (Arena arena : MemoryStorage.arenaMap.values()) {
- if (arena.playersInArena.contains(player)) {
- for (Player playerCheck : arena.playersInArena) {
+ if (arena.getPlayersInArena().contains(player)) {
+ for (Player playerCheck : arena.getPlayersInArena()) {
if (MemoryStorage.chosenSeeker.get(playerCheck) != null) {
if (!MemoryStorage.chosenSeeker.get(playerCheck)) {
i = i + 1;
@@ -150,7 +150,7 @@ public class OnInventoryClickEvent implements Listener {
}
}
- if (i >= (arena.playersInArena.size() - 1)) {
+ if (i >= (arena.getPlayersInArena().size() - 1)) {
MessageHelper.sendMessage(player, MessageKey.ERROR_SHOP_MAX_HIDERS_REACHED);
} else {
MemoryStorage.chosenSeeker.put(player, false);
@@ -181,31 +181,31 @@ public class OnInventoryClickEvent implements Listener {
}
if (item.getType().equals(Material.GOLD_NUGGET)) {
if (item.getItemMeta().getDisplayName().contains("maxPlayers")) {
- upDownButton(player, item, arena, ArenaProperty.MAX_PLAYERS, arena.maxPlayers, Bukkit.getMaxPlayers(), 2, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.MAX_PLAYERS, arena.getMaxPlayers(), Bukkit.getMaxPlayers(), 2, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("minPlayers")) {
- upDownButton(player, item, arena, ArenaProperty.MIN_PLAYERS, arena.minPlayers, Bukkit.getMaxPlayers() - 1, 2, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.MIN_PLAYERS, arena.getMinPlayers(), Bukkit.getMaxPlayers() - 1, 2, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("amountSeekersOnStart")) {
- upDownButton(player, item, arena, ArenaProperty.AMOUNT_SEEKERS_ON_START, arena.amountSeekersOnStart, arena.maxPlayers - 1, 1, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.AMOUNT_SEEKERS_ON_START, arena.getAmountSeekersOnStart(), arena.getMaxPlayers() - 1, 1, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("timeInLobbyUntilStart")) {
- upDownButton(player, item, arena, ArenaProperty.TIME_IN_LOBBY_UNTIL_START, arena.timeInLobbyUntilStart, 1000, 5, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.TIME_IN_LOBBY_UNTIL_START, arena.getTimeInLobbyUntilStart(), 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("waitingTimeSeeker")) {
- upDownButton(player, item, arena, ArenaProperty.WAITING_TIME_SEEKER, arena.waitingTimeSeeker, 1000, 5, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.WAITING_TIME_SEEKER, arena.getWaitingTimeSeeker(), 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("gameTime")) {
- upDownButton(player, item, arena, ArenaProperty.GAME_TIME, arena.gameTime, 1000, 5, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.GAME_TIME, arena.getGameTime(), 1000, 5, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("blockAnnouncerTime")) {
- upDownButton(player, item, arena, ArenaProperty.BLOCK_ANNOUNCER_TIME, arena.blockAnnouncerTime, 1000, 0, 5, 5);
+ upDownButton(player, item, arena, ArenaProperty.BLOCK_ANNOUNCER_TIME, arena.getBlockAnnouncerTime(), 1000, 0, 5, 5);
} else if (item.getItemMeta().getDisplayName().contains("timeUntilHidersSword")) {
- upDownButton(player, item, arena, ArenaProperty.TIME_UNTIL_HIDERS_SWORD, arena.timeUntilHidersSword, 1000, 0, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.TIME_UNTIL_HIDERS_SWORD, arena.getTimeUntilHidersSword(), 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("hidersTokenWin")) {
- upDownButton(player, item, arena, ArenaProperty.HIDERS_TOKEN_WIN, arena.hidersTokenWin, 1000, 0, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.HIDERS_TOKEN_WIN, arena.getHidersTokenWin(), 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("seekersTokenWin")) {
- upDownButton(player, item, arena, ArenaProperty.SEEKERS_TOKEN_WIN, arena.seekersTokenWin, 1000, 0, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.SEEKERS_TOKEN_WIN, arena.getSeekersTokenWin(), 1000, 0, 1, 1);
} else if (item.getItemMeta().getDisplayName().contains("killTokens")) {
- upDownButton(player, item, arena, ArenaProperty.KILL_TOKENS, arena.killTokens, 1000, 0, 1, 1);
+ upDownButton(player, item, arena, ArenaProperty.KILL_TOKENS, arena.getKillTokens(), 1000, 0, 1, 1);
}
save(arena);
- InventoryHelper.openPanel(player, arena.arenaName);
+ InventoryHelper.openPanel(player, arena.getArenaOptions().arenaName());
} else if (item.getType().equals(Material.BOOK)) {
if (item.getItemMeta().getDisplayName().contains("disguiseBlocks")) {
@@ -216,7 +216,7 @@ public class OnInventoryClickEvent implements Listener {
}
public void save(Arena arena) {
- MemoryStorage.arenas.getFileConfiguration().set(arena.arenaName, arena);
+ MemoryStorage.arenas.getFileConfiguration().set(arena.getArenaOptions().arenaName(), arena);
MemoryStorage.arenas.save();
ArenaHelper.loadArenas();
}
@@ -226,17 +226,17 @@ public class OnInventoryClickEvent implements Listener {
if (item.getItemMeta().getDisplayName().contains((String) MemoryStorage.messages.get(MessageKey.BUTTON_ADD_2))) {
if (option < max) {
switch (at) {
- case MAX_PLAYERS -> arena.maxPlayers = option + add;
- case MIN_PLAYERS -> arena.minPlayers = option + add;
- case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart = option + add;
- case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart = option + add;
- case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker = option + add;
- case GAME_TIME -> arena.gameTime = option + add;
- case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime = option + add;
- case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword = option + add;
- case HIDERS_TOKEN_WIN -> arena.hidersTokenWin = option + add;
- case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin = option + add;
- case KILL_TOKENS -> arena.killTokens = option + add;
+ case MAX_PLAYERS -> arena.setMaxPlayers(option + add);
+ case MIN_PLAYERS -> arena.setMinPlayers(option + add);
+ case AMOUNT_SEEKERS_ON_START -> arena.setAmountSeekersOnStart(option + add);
+ case TIME_IN_LOBBY_UNTIL_START -> arena.setTimeInLobbyUntilStart(option + add);
+ case WAITING_TIME_SEEKER -> arena.setWaitingTimeSeeker(option + add);
+ case GAME_TIME -> arena.setGameTime(option + add);
+ case BLOCK_ANNOUNCER_TIME -> arena.setBlockAnnouncerTime(option + add);
+ case TIME_UNTIL_HIDERS_SWORD -> arena.setTimeUntilHidersSword(option + add);
+ case HIDERS_TOKEN_WIN -> arena.setHidersTokenWin(option + add);
+ case SEEKERS_TOKEN_WIN -> arena.setSeekersTokenWin(option + add);
+ case KILL_TOKENS -> arena.setKillTokens(option + add);
}
} else {
MessageHelper.sendMessage(player, MessageKey.ERROR_SET_TOO_HIGH_NUMBER, "max-" + max);
@@ -244,17 +244,17 @@ public class OnInventoryClickEvent implements Listener {
} else if (item.getItemMeta().getDisplayName().contains((String) MemoryStorage.messages.get(MessageKey.BUTTON_REMOVE_2))) {
if (option > min) {
switch (at) {
- case MAX_PLAYERS -> arena.maxPlayers = option - remove;
- case MIN_PLAYERS -> arena.minPlayers = option - remove;
- case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart = option - remove;
- case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart = option - remove;
- case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker = option - remove;
- case GAME_TIME -> arena.gameTime = option - remove;
- case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime = option - remove;
- case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword = option - remove;
- case HIDERS_TOKEN_WIN -> arena.hidersTokenWin = option - remove;
- case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin = option - remove;
- case KILL_TOKENS -> arena.killTokens = option - remove;
+ case MAX_PLAYERS -> arena.setMaxPlayers(option - remove);
+ case MIN_PLAYERS -> arena.setMinPlayers(option - remove);
+ case AMOUNT_SEEKERS_ON_START -> arena.setAmountSeekersOnStart(option - remove);
+ case TIME_IN_LOBBY_UNTIL_START -> arena.setTimeInLobbyUntilStart(option - remove);
+ case WAITING_TIME_SEEKER -> arena.setWaitingTimeSeeker(option - remove);
+ case GAME_TIME -> arena.setGameTime(option - remove);
+ case BLOCK_ANNOUNCER_TIME -> arena.setBlockAnnouncerTime(option - remove);
+ case TIME_UNTIL_HIDERS_SWORD -> arena.setTimeUntilHidersSword(option - remove);
+ case HIDERS_TOKEN_WIN -> arena.setHidersTokenWin(option - remove);
+ case SEEKERS_TOKEN_WIN -> arena.setSeekersTokenWin(option - remove);
+ case KILL_TOKENS -> arena.setKillTokens(option - remove);
}
} else {
MessageHelper.sendMessage(player, MessageKey.ERROR_SET_TOO_LOW_NUMBER, "min-" + min);
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryCloseEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryCloseEvent.java
index 243abac..b3c57f2 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryCloseEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnInventoryCloseEvent.java
@@ -43,14 +43,14 @@ public class OnInventoryCloseEvent implements Listener {
}
}
- arena.disguiseBlocks = blocks;
+ arena.setDisguiseBlocks(blocks);
save(arena);
}
}
}
public void save(Arena arena) {
- MemoryStorage.arenas.getFileConfiguration().set(arena.arenaName, arena);
+ MemoryStorage.arenas.getFileConfiguration().set(arena.getArenaOptions().arenaName(), arena);
MemoryStorage.arenas.save();
ArenaHelper.loadArenas();
}
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerInteractEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerInteractEvent.java
index 7a1a429..ec42bc2 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerInteractEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerInteractEvent.java
@@ -2,7 +2,7 @@ package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.ConfigKey;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.config.Permission;
@@ -69,8 +69,8 @@ public class OnPlayerInteractEvent implements Listener {
// TODO: Do this more efficiently and directly, for example by mapping location vector to player instead of
// the other way around.
Arena arena = MemoryStorage.playerArena.get(event.getPlayer());
- if (arena != null && arena.seekers.contains(player)) {
- for (Player arenaPlayer : arena.playersInArena) {
+ if (arena != null && arena.getSeekers().contains(player)) {
+ for (Player arenaPlayer : arena.getPlayersInArena()) {
// Check all hidden players
if (MemoryStorage.hiddenLocation.get(arenaPlayer) == null) {
continue;
@@ -96,7 +96,7 @@ public class OnPlayerInteractEvent implements Listener {
return;
}
- if (!arena.gameState.equals(ArenaState.WAITING) && !arena.gameState.equals(ArenaState.STARTING)) {
+ if (!arena.getGameState().equals(ArenaGameState.WAITING) && !arena.getGameState().equals(ArenaGameState.STARTING)) {
return;
}
@@ -112,9 +112,9 @@ public class OnPlayerInteractEvent implements Listener {
Inventory blockChooser = Bukkit.createInventory(null, 36,
MessageHelper.replaceAll("\u00A7r" + MemoryStorage.config.get(
ConfigKey.SHOP_BLOCK_CHOOSER_V_1_NAME)));
- if (arena.disguiseBlocks != null) {
- for (int i = arena.disguiseBlocks.size(); i > 0; i = i - 1) {
- blockChooser.setItem(i - 1, arena.disguiseBlocks.get(i - 1));
+ if (arena.getDisguiseBlocks() != null) {
+ for (int i = arena.getDisguiseBlocks().size(); i > 0; i = i - 1) {
+ blockChooser.setItem(i - 1, arena.getDisguiseBlocks().get(i - 1));
}
}
@@ -159,7 +159,7 @@ public class OnPlayerInteractEvent implements Listener {
signIdentifier.toLowerCase()));
Arena arena = MemoryStorage.arenaMap.get(cleanName);
if (arena != null && PermissionsManager.hasPermission(player, Permission.JOIN_SIGN, true)) {
- ArenaHelper.playerJoinArena(player, arena.arenaName);
+ ArenaHelper.playerJoinArena(player, arena.getArenaOptions().arenaName());
}
}
}
diff --git a/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerMoveEvent.java b/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerMoveEvent.java
index dd036d3..2fb0b5a 100644
--- a/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerMoveEvent.java
+++ b/src/main/java/net/knarcraft/blockhunt/listener/OnPlayerMoveEvent.java
@@ -2,8 +2,8 @@ package net.knarcraft.blockhunt.listener;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.arena.ArenaLocations;
-import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.util.PlayerHelper;
import org.bukkit.Effect;
import org.bukkit.Location;
@@ -23,7 +23,7 @@ public class OnPlayerMoveEvent implements Listener {
Player player = event.getPlayer();
Arena arena = MemoryStorage.playerArena.get(player);
- if (arena == null || arena.gameState != ArenaState.IN_GAME) {
+ if (arena == null || arena.getGameState() != ArenaGameState.IN_GAME) {
return;
}
@@ -31,7 +31,7 @@ public class OnPlayerMoveEvent implements Listener {
MemoryStorage.moveLocation.put(player, player.getLocation());
// Force the player back in bounds if they are about to leave the arena
- ArenaLocations locations = arena.arenaLocations;
+ ArenaLocations locations = arena.getArenaLocations();
Location maxLocation = getRelativeLocation(locations.getCorner1(), locations.getCorner2(), Math::max);
Location minLocation = getRelativeLocation(locations.getCorner1(), locations.getCorner2(), Math::min);
Location playerLocation = player.getLocation();
diff --git a/src/main/java/net/knarcraft/blockhunt/util/ArenaHelper.java b/src/main/java/net/knarcraft/blockhunt/util/ArenaHelper.java
index cfc8d07..a46de66 100644
--- a/src/main/java/net/knarcraft/blockhunt/util/ArenaHelper.java
+++ b/src/main/java/net/knarcraft/blockhunt/util/ArenaHelper.java
@@ -5,8 +5,8 @@ import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.PlayerArenaData;
import net.knarcraft.blockhunt.arena.Arena;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.arena.ArenaLocations;
-import net.knarcraft.blockhunt.arena.ArenaState;
import net.knarcraft.blockhunt.config.ConfigKey;
import net.knarcraft.blockhunt.config.MessageKey;
import net.knarcraft.blockhunt.config.Permission;
@@ -63,7 +63,7 @@ public final class ArenaHelper {
* @param variables The variables to replace in the message
*/
public static void sendMessage(Arena arena, String message, String... variables) {
- MessageHelper.broadcastMessage(arena.playersInArena, message, variables);
+ MessageHelper.broadcastMessage(arena.getPlayersInArena(), message, variables);
}
/**
@@ -74,7 +74,7 @@ public final class ArenaHelper {
* @param variables The variables to replace in the message
*/
public static void sendMessage(Arena arena, MessageKey messageKey, String... variables) {
- MessageHelper.broadcastMessage(arena.playersInArena, messageKey, variables);
+ MessageHelper.broadcastMessage(arena.getPlayersInArena(), messageKey, variables);
}
public static void playerJoinArena(Player player, String arenaName) {
@@ -86,7 +86,7 @@ public final class ArenaHelper {
Arena arena = MemoryStorage.arenaMap.get(arenaName.toLowerCase());
if (arena != null) {
// TODO: Use a disabled arena state instead of checking this condition every time
- if (arena.disguiseBlocks.isEmpty()) {
+ if (arena.getDisguiseBlocks().isEmpty()) {
MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_NO_BLOCKS_SET);
} else {
joinLobby(arena, player);
@@ -107,7 +107,7 @@ public final class ArenaHelper {
return;
}
- BlockHunt.plugin.getLogger().log(Level.INFO, player.getName() + " has left " + arena.arenaName);
+ BlockHunt.plugin.getLogger().log(Level.INFO, player.getName() + " has left " + arena.getArenaOptions().arenaName());
LeaveArenaEvent event = new LeaveArenaEvent(player, arena);
Bukkit.getPluginManager().callEvent(event);
@@ -138,7 +138,7 @@ public final class ArenaHelper {
player.setHealth(playerArenaData.playerHealth());
player.setFoodLevel(playerArenaData.playerFood());
player.addPotionEffects(playerArenaData.playerPotionEffects());
- PlayerHelper.teleport(player, arena.arenaLocations.getExitWarp());
+ PlayerHelper.teleport(player, arena.getArenaLocations().getExitWarp());
player.setGameMode(playerArenaData.playerGameMode());
player.setAllowFlight(playerArenaData.playerFlying());
player.setFlying(playerArenaData.playerFlying());
@@ -154,40 +154,40 @@ public final class ArenaHelper {
MessageHelper.sendMessage(player, MessageKey.NORMAL_LEAVE_YOU_LEFT);
if (message) {
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_LEAVE_LEFT_ARENA, "%playerName%-" +
- player.getName(), "1-" + arena.playersInArena.size(), "2-" + arena.maxPlayers);
+ player.getName(), "1-" + arena.getPlayersInArena().size(), "2-" + arena.getMaxPlayers());
}
SignsHelper.updateSigns();
}
private static void cleanup(Arena arena, Player player) {
- arena.playersInArena.remove(player);
+ arena.getPlayersInArena().remove(player);
MemoryStorage.playerArena.remove(player);
- arena.seekers.remove(player);
- arena.hiders.remove(player);
+ arena.getSeekers().remove(player);
+ arena.getHiders().remove(player);
MemoryStorage.playerArena.remove(player);
- if (arena.playersInArena.size() < arena.minPlayers && arena.gameState.equals(ArenaState.STARTING)) {
- arena.gameState = ArenaState.WAITING;
- arena.timer = 0;
+ if (arena.getPlayersInArena().size() < arena.getMinPlayers() && arena.getGameState().equals(ArenaGameState.STARTING)) {
+ arena.setGameState(ArenaGameState.WAITING);
+ arena.setTimer(0);
- sendMessage(arena, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-" + arena.minPlayers);
+ sendMessage(arena, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-" + arena.getMinPlayers());
}
- if (arena.playersInArena.size() <= 1 && arena.gameState == ArenaState.IN_GAME) {
- if (arena.seekers.size() >= arena.playersInArena.size()) {
+ if (arena.getPlayersInArena().size() <= 1 && arena.getGameState() == ArenaGameState.IN_GAME) {
+ if (arena.getSeekers().size() >= arena.getPlayersInArena().size()) {
ArenaHelper.seekersWin(arena);
} else {
ArenaHelper.hidersWin(arena);
}
}
- if (arena.seekers.size() >= arena.playersInArena.size()) {
+ if (arena.getSeekers().size() >= arena.getPlayersInArena().size()) {
ArenaHelper.seekersWin(arena);
}
- if (arena.seekers.size() == 0 && arena.gameState == ArenaState.IN_GAME) {
- Player seeker = arena.playersInArena.get(MemoryStorage.random.nextInt(arena.playersInArena.size()));
+ if (arena.getSeekers().size() == 0 && arena.getGameState() == ArenaGameState.IN_GAME) {
+ Player seeker = arena.getPlayersInArena().get(MemoryStorage.random.nextInt(arena.getPlayersInArena().size()));
ArenaHelper.sendMessage(arena, MessageKey.WARNING_IN_GAME_NEW_SEEKER_CHOSEN, "seeker-" + seeker.getName());
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_IN_GAME_SEEKER_CHOSEN, "seeker-" + seeker.getName());
DisguiseAPI.undisguiseToAll(seeker);
@@ -195,9 +195,9 @@ public final class ArenaHelper {
pl.showPlayer(BlockHunt.plugin, seeker);
}
seeker.getInventory().clear();
- arena.seekers.add(seeker);
- PlayerHelper.teleport(seeker, arena.arenaLocations.getSeekersWarp());
- MemoryStorage.seekerTime.put(seeker, arena.waitingTimeSeeker);
+ arena.getSeekers().add(seeker);
+ PlayerHelper.teleport(seeker, arena.getArenaLocations().getSeekersWarp());
+ MemoryStorage.seekerTime.put(seeker, arena.getWaitingTimeSeeker());
seeker.setWalkSpeed(0.3F);
// Fix for client not showing players after they join
@@ -211,8 +211,8 @@ public final class ArenaHelper {
* @param arena The arena in which the seekers won
*/
public static void seekersWin(Arena arena) {
- String cause = "[BlockHunt] Seekers have won " + arena.arenaName;
- rewardWinnersAndStop(arena, cause, arena.seekers, arena.seekersWinCommands, arena.seekersTokenWin,
+ String cause = "[BlockHunt] Seekers have won " + arena.getArenaOptions().arenaName();
+ rewardWinnersAndStop(arena, cause, arena.getSeekers(), arena.getArenaOptions().seekersWinCommands(), arena.getSeekersTokenWin(),
MessageKey.NORMAL_WIN_SEEKERS);
}
@@ -222,8 +222,8 @@ public final class ArenaHelper {
* @param arena The arena in which the hiders won
*/
public static void hidersWin(Arena arena) {
- String cause = "[BlockHunt] Hiders have won " + arena.arenaName;
- rewardWinnersAndStop(arena, cause, arena.hiders, arena.hidersWinCommands, arena.hidersTokenWin,
+ String cause = "[BlockHunt] Hiders have won " + arena.getArenaOptions().arenaName();
+ rewardWinnersAndStop(arena, cause, arena.getHiders(), arena.getArenaOptions().hidersWinCommands(), arena.getHidersTokenWin(),
MessageKey.NORMAL_WIN_HIDERS);
}
@@ -243,7 +243,7 @@ public final class ArenaHelper {
List winners = new ArrayList<>();
List losers = new ArrayList<>();
- for (Player player : arena.playersInArena) {
+ for (Player player : arena.getPlayersInArena()) {
if (winnerTeam.contains(player)) {
winners.add(player);
grantRewards(player, winCommands, winTokens);
@@ -306,18 +306,18 @@ public final class ArenaHelper {
public static void stopArena(Arena arena, String cause, MessageKey message) {
BlockHunt.plugin.getLogger().log(Level.INFO, cause);
ArenaHelper.sendMessage(arena, message);
- arena.seekers.clear();
- arena.hiders.clear();
+ arena.getSeekers().clear();
+ arena.getHiders().clear();
- for (Player player : arena.playersInArena) {
+ for (Player player : arena.getPlayersInArena()) {
playerLeaveArena(player, false, false);
MemoryStorage.playerArena.remove(player);
player.playSound(player.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1, 1);
}
- arena.gameState = ArenaState.WAITING;
- arena.timer = 0;
- arena.playersInArena.clear();
+ arena.setGameState(ArenaGameState.WAITING);
+ arena.setTimer(0);
+ arena.getPlayersInArena().clear();
}
/**
@@ -328,7 +328,7 @@ public final class ArenaHelper {
public static boolean noPlayersInArenas() {
// Check if there are any players in any arena (quick way to early exit for event handlers)
for (Arena arena : MemoryStorage.arenaMap.values()) {
- if (arena.playersInArena.size() > 0) {
+ if (arena.getPlayersInArena().size() > 0) {
return false;
}
}
@@ -350,20 +350,20 @@ public final class ArenaHelper {
// Check that the arena has been properly set up before allowing the player to play
// TODO: It would be better to have a DISABLED state for arenas until they are properly set up.
- ArenaLocations locations = arena.arenaLocations;
+ ArenaLocations locations = arena.getArenaLocations();
if (!areWarpsSet(locations, player.getWorld())) {
MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_WARPS_NOT_SET);
return;
}
// Make sure the game isn't already running
- if (arena.gameState == ArenaState.IN_GAME) {
+ if (arena.getGameState() == ArenaGameState.IN_GAME) {
MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_ARENA_IN_GAME);
return;
}
// Check if the arena is already full
- if (arena.playersInArena.size() >= arena.maxPlayers &&
+ if (arena.getPlayersInArena().size() >= arena.getMaxPlayers() &&
!PermissionsManager.hasPermission(player, Permission.JOIN_FULL, false)) {
MessageHelper.sendMessage(player, MessageKey.ERROR_JOIN_FULL);
return;
@@ -376,8 +376,8 @@ public final class ArenaHelper {
return;
}
- BlockHunt.plugin.getLogger().log(Level.INFO, player.getName() + " has joined " + arena.arenaName);
- arena.playersInArena.add(player);
+ BlockHunt.plugin.getLogger().log(Level.INFO, player.getName() + " has joined " + arena.getArenaOptions().arenaName());
+ arena.getPlayersInArena().add(player);
MemoryStorage.playerArena.put(player, arena);
// Call the join event for any add-ons
Bukkit.getPluginManager().callEvent(new JoinArenaEvent(player, arena));
@@ -408,10 +408,10 @@ public final class ArenaHelper {
// Announce that the player joined
ArenaHelper.sendMessage(arena, MessageKey.NORMAL_JOIN_JOINED_ARENA, "%playerName%-" + player.getName(),
- "1-" + arena.playersInArena.size(), "2-" + arena.maxPlayers);
- if (arena.playersInArena.size() < arena.minPlayers) {
+ "1-" + arena.getPlayersInArena().size(), "2-" + arena.getMaxPlayers());
+ if (arena.getPlayersInArena().size() < arena.getMinPlayers()) {
// Announce that additional players are required for the arena to start
- sendMessage(arena, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-" + arena.minPlayers);
+ sendMessage(arena, MessageKey.WARNING_LOBBY_NEED_AT_LEAST, "1-" + arena.getMinPlayers());
}
}
@@ -520,7 +520,7 @@ public final class ArenaHelper {
if (healthAttribute != null) {
healthAttribute.setBaseValue(20);
}
- player.setLevel(arena.timer);
+ player.setLevel(arena.getTimer());
player.setExp(0);
player.getInventory().clear();
player.getInventory().setHelmet(new ItemStack(Material.AIR));
diff --git a/src/main/java/net/knarcraft/blockhunt/util/InventoryHelper.java b/src/main/java/net/knarcraft/blockhunt/util/InventoryHelper.java
index d695eda..bd4dcd0 100644
--- a/src/main/java/net/knarcraft/blockhunt/util/InventoryHelper.java
+++ b/src/main/java/net/knarcraft/blockhunt/util/InventoryHelper.java
@@ -28,7 +28,7 @@ public final class InventoryHelper {
Arena arena = MemoryStorage.arenaMap.get(arenaName.toLowerCase());
if (arena != null) {
- String shorten = arena.arenaName;
+ String shorten = arena.getArenaOptions().arenaName();
if (shorten.length() > 6) {
shorten = shorten.substring(0, 6);
}
@@ -36,34 +36,34 @@ public final class InventoryHelper {
ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1);
ItemMeta arenaNameNote_IM = arenaNameNote.getItemMeta();
- arenaNameNote_IM.setDisplayName(MessageHelper.replaceAll("%NBlockHunt arena: %A" + arena.arenaName));
+ arenaNameNote_IM.setDisplayName(MessageHelper.replaceAll("%NBlockHunt arena: %A" + arena.getArenaOptions().arenaName()));
arenaNameNote.setItemMeta(arenaNameNote_IM);
panel.setItem(0, arenaNameNote);
//
ItemStack maxPlayers_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack maxPlayers = new ItemStack(Material.BEDROCK, arena.maxPlayers);
+ ItemStack maxPlayers = new ItemStack(Material.BEDROCK, arena.getMaxPlayers());
ItemStack maxPlayers_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack minPlayers_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack minPlayers = new ItemStack(Material.BEDROCK, arena.minPlayers);
+ ItemStack minPlayers = new ItemStack(Material.BEDROCK, arena.getMinPlayers());
ItemStack minPlayers_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack amountSeekersOnStart_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack amountSeekersOnStart = new ItemStack(Material.BEDROCK, arena.amountSeekersOnStart);
+ ItemStack amountSeekersOnStart = new ItemStack(Material.BEDROCK, arena.getAmountSeekersOnStart());
ItemStack amountSeekersOnStart_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeInLobbyUntilStart_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack timeInLobbyUntilStart = new ItemStack(Material.BEDROCK, arena.timeInLobbyUntilStart);
+ ItemStack timeInLobbyUntilStart = new ItemStack(Material.BEDROCK, arena.getTimeInLobbyUntilStart());
ItemStack timeInLobbyUntilStart_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack waitingTimeSeeker_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack waitingTimeSeeker = new ItemStack(Material.BEDROCK, arena.waitingTimeSeeker);
+ ItemStack waitingTimeSeeker = new ItemStack(Material.BEDROCK, arena.getWaitingTimeSeeker());
ItemStack waitingTimeSeeker_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack gameTime_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack gameTime = new ItemStack(Material.BEDROCK, arena.gameTime);
+ ItemStack gameTime = new ItemStack(Material.BEDROCK, arena.getGameTime());
ItemStack gameTime_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack disguiseBlocks_NOTE = new ItemStack(Material.BOOK, 1);
@@ -73,23 +73,23 @@ public final class InventoryHelper {
panel.setItem(36, disguiseBlocks_NOTE);
ItemStack blockAnnouncerTime_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack blockAnnouncerTime = new ItemStack(Material.BEDROCK, arena.blockAnnouncerTime);
+ ItemStack blockAnnouncerTime = new ItemStack(Material.BEDROCK, arena.getBlockAnnouncerTime());
ItemStack blockAnnouncerTime_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack timeUntilHidersSword_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack timeUntilHidersSword = new ItemStack(Material.BEDROCK, arena.timeUntilHidersSword);
+ ItemStack timeUntilHidersSword = new ItemStack(Material.BEDROCK, arena.getTimeUntilHidersSword());
ItemStack timeUntilHidersSword_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack hidersTokenWin_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack hidersTokenWin = new ItemStack(Material.BEDROCK, arena.hidersTokenWin);
+ ItemStack hidersTokenWin = new ItemStack(Material.BEDROCK, arena.getHidersTokenWin());
ItemStack hidersTokenWin_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack seekersTokenWin_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack seekersTokenWin = new ItemStack(Material.BEDROCK, arena.seekersTokenWin);
+ ItemStack seekersTokenWin = new ItemStack(Material.BEDROCK, arena.getSeekersTokenWin());
ItemStack seekersTokenWin_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
ItemStack killTokens_UP = new ItemStack(Material.GOLD_NUGGET, 1);
- ItemStack killTokens = new ItemStack(Material.BEDROCK, arena.killTokens);
+ ItemStack killTokens = new ItemStack(Material.BEDROCK, arena.getKillTokens());
ItemStack killTokens_DOWN = new ItemStack(Material.GOLD_NUGGET, 1);
//
@@ -136,17 +136,17 @@ public final class InventoryHelper {
upItem.setItemMeta(upItemItemMeta);
int setting = switch (arenaProperty) {
- case MAX_PLAYERS -> arena.maxPlayers;
- case MIN_PLAYERS -> arena.minPlayers;
- case AMOUNT_SEEKERS_ON_START -> arena.amountSeekersOnStart;
- case TIME_IN_LOBBY_UNTIL_START -> arena.timeInLobbyUntilStart;
- case WAITING_TIME_SEEKER -> arena.waitingTimeSeeker;
- case GAME_TIME -> arena.gameTime;
- case TIME_UNTIL_HIDERS_SWORD -> arena.timeUntilHidersSword;
- case BLOCK_ANNOUNCER_TIME -> arena.blockAnnouncerTime;
- case HIDERS_TOKEN_WIN -> arena.hidersTokenWin;
- case SEEKERS_TOKEN_WIN -> arena.seekersTokenWin;
- case KILL_TOKENS -> arena.killTokens;
+ case MAX_PLAYERS -> arena.getMaxPlayers();
+ case MIN_PLAYERS -> arena.getMinPlayers();
+ case AMOUNT_SEEKERS_ON_START -> arena.getAmountSeekersOnStart();
+ case TIME_IN_LOBBY_UNTIL_START -> arena.getTimeInLobbyUntilStart();
+ case WAITING_TIME_SEEKER -> arena.getWaitingTimeSeeker();
+ case GAME_TIME -> arena.getGameTime();
+ case TIME_UNTIL_HIDERS_SWORD -> arena.getTimeUntilHidersSword();
+ case BLOCK_ANNOUNCER_TIME -> arena.getBlockAnnouncerTime();
+ case HIDERS_TOKEN_WIN -> arena.getHidersTokenWin();
+ case SEEKERS_TOKEN_WIN -> arena.getSeekersTokenWin();
+ case KILL_TOKENS -> arena.getKillTokens();
};
ItemMeta buttonItemMeta = buttonItem.getItemMeta();
@@ -165,7 +165,7 @@ public final class InventoryHelper {
}
public static void openDisguiseBlocks(Arena arena, Player player) {
- String arenaName = arena.arenaName;
+ String arenaName = arena.getArenaOptions().arenaName();
Inventory panel = Bukkit.createInventory(null, 36, MessageHelper.replaceAll("%N&lDisguiseBlocks"));
ItemStack arenaNameNote = new ItemStack(Material.PAPER, 1);
@@ -176,9 +176,9 @@ public final class InventoryHelper {
arenaNameNoteItemMeta.setLore(loreLines);
arenaNameNote.setItemMeta(arenaNameNoteItemMeta);
panel.setItem(0, arenaNameNote);
- if (arena.disguiseBlocks != null) {
- for (int i = arena.disguiseBlocks.size(); i > 0; i = i - 1) {
- panel.setItem(i, arena.disguiseBlocks.get(i - 1));
+ if (arena.getDisguiseBlocks() != null) {
+ for (int i = arena.getDisguiseBlocks().size(); i > 0; i = i - 1) {
+ panel.setItem(i, arena.getDisguiseBlocks().get(i - 1));
}
}
player.openInventory(panel);
diff --git a/src/main/java/net/knarcraft/blockhunt/util/ScoreboardHelper.java b/src/main/java/net/knarcraft/blockhunt/util/ScoreboardHelper.java
index 14caa64..4ac93c1 100644
--- a/src/main/java/net/knarcraft/blockhunt/util/ScoreboardHelper.java
+++ b/src/main/java/net/knarcraft/blockhunt/util/ScoreboardHelper.java
@@ -3,7 +3,7 @@ package net.knarcraft.blockhunt.util;
import net.knarcraft.blockhunt.BlockHunt;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.ConfigKey;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -21,37 +21,37 @@ public final class ScoreboardHelper {
public static void createScoreboard(Arena arena) {
if ((Boolean) MemoryStorage.config.get(ConfigKey.SCOREBOARD_ENABLED)) {
- Scoreboard board = arena.scoreboard;
- if (board.getObjective(arena.arenaName) != null) {
+ Scoreboard board = arena.getScoreboard();
+ if (board.getObjective(arena.getArenaOptions().arenaName()) != null) {
updateScoreboard(arena);
return;
}
String displayName = BlockHunt.cutString(MessageHelper.replaceAll(
(String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_TITLE)), 32);
- Objective object = board.registerNewObjective(BlockHunt.cutString(arena.arenaName, 32),
+ Objective object = board.registerNewObjective(BlockHunt.cutString(arena.getArenaOptions().arenaName(), 32),
Criteria.DUMMY, displayName);
object.setDisplaySlot(DisplaySlot.SIDEBAR);
String temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_TIME_LEFT)), 32);
Score timeleft = object.getScore(temp);
- timeleft.setScore(arena.timer);
+ timeleft.setScore(arena.getTimer());
temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_SEEKERS)), 32);
Score seekers = object.getScore(temp);
- seekers.setScore(arena.seekers.size());
+ seekers.setScore(arena.getSeekers().size());
temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_HIDERS)), 32);
Score hiders = object.getScore(temp);
- hiders.setScore(arena.playersInArena.size() - arena.seekers.size());
+ hiders.setScore(arena.getPlayersInArena().size() - arena.getSeekers().size());
- if (arena.gameState == ArenaState.IN_GAME) {
- for (Player pl : arena.playersInArena) {
+ if (arena.getGameState() == ArenaGameState.IN_GAME) {
+ for (Player pl : arena.getPlayersInArena()) {
pl.setScoreboard(board);
}
} else {
- for (Player pl : arena.playersInArena) {
+ for (Player pl : arena.getPlayersInArena()) {
pl.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
}
@@ -60,28 +60,28 @@ public final class ScoreboardHelper {
public static void updateScoreboard(Arena arena) {
if ((Boolean) MemoryStorage.config.get(ConfigKey.SCOREBOARD_ENABLED)) {
- Scoreboard board = arena.scoreboard;
+ Scoreboard board = arena.getScoreboard();
Objective object = board.getObjective(DisplaySlot.SIDEBAR);
object.setDisplayName(BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_TITLE)), 32));
String temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_TIME_LEFT)), 32);
Score timeleft = object.getScore(temp);
- timeleft.setScore(arena.timer);
+ timeleft.setScore(arena.getTimer());
temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_SEEKERS)), 32);
Score seekers = object.getScore(temp);
- seekers.setScore(arena.seekers.size());
+ seekers.setScore(arena.getSeekers().size());
temp = BlockHunt.cutString(MessageHelper.replaceAll((String) MemoryStorage.config.get(ConfigKey.SCOREBOARD_HIDERS)), 32);
Score hiders = object.getScore(temp);
- hiders.setScore(arena.playersInArena.size() - arena.seekers.size());
+ hiders.setScore(arena.getPlayersInArena().size() - arena.getSeekers().size());
- if (arena.gameState == ArenaState.IN_GAME) {
- for (Player pl : arena.playersInArena) {
+ if (arena.getGameState() == ArenaGameState.IN_GAME) {
+ for (Player pl : arena.getPlayersInArena()) {
pl.setScoreboard(board);
}
} else {
- for (Player pl : arena.playersInArena) {
+ for (Player pl : arena.getPlayersInArena()) {
pl.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
}
}
diff --git a/src/main/java/net/knarcraft/blockhunt/util/SignsHelper.java b/src/main/java/net/knarcraft/blockhunt/util/SignsHelper.java
index 9ed5170..1aca2e6 100644
--- a/src/main/java/net/knarcraft/blockhunt/util/SignsHelper.java
+++ b/src/main/java/net/knarcraft/blockhunt/util/SignsHelper.java
@@ -2,7 +2,7 @@ package net.knarcraft.blockhunt.util;
import net.knarcraft.blockhunt.MemoryStorage;
import net.knarcraft.blockhunt.arena.Arena;
-import net.knarcraft.blockhunt.arena.ArenaState;
+import net.knarcraft.blockhunt.arena.ArenaGameState;
import net.knarcraft.blockhunt.config.ConfigKey;
import net.knarcraft.blockhunt.config.MessageKey;
import org.bukkit.Location;
@@ -28,7 +28,7 @@ public final class SignsHelper {
boolean saved = false;
Arena arena = MemoryStorage.arenaMap.get(lines[1].toLowerCase());
if (arena != null) {
- saveSign(arena.arenaName, location);
+ saveSign(arena.getArenaOptions().arenaName(), location);
saved = true;
}
@@ -117,22 +117,22 @@ public final class SignsHelper {
//TODO: Store the relationships between signs and arenas directly
for (Arena arena : MemoryStorage.arenaMap.values()) {
//Find the correct arena
- if (!arenaName.endsWith(arena.arenaName)) {
+ if (!arenaName.endsWith(arena.getArenaOptions().arenaName())) {
continue;
}
- if (arena.gameState.equals(ArenaState.WAITING)) {
+ if (arena.getGameState().equals(ArenaGameState.WAITING)) {
drawSign(MemoryStorage.config.getFileConfiguration().getStringList(ConfigKey.SIGN_WAITING.getPath()), signBlock, arena);
- } else if (arena.gameState.equals(ArenaState.STARTING)) {
+ } else if (arena.getGameState().equals(ArenaGameState.STARTING)) {
drawSign(MemoryStorage.config.getFileConfiguration().getStringList(ConfigKey.SIGN_STARTING.getPath()), signBlock, arena);
- } else if (arena.gameState.equals(ArenaState.IN_GAME)) {
+ } else if (arena.getGameState().equals(ArenaGameState.IN_GAME)) {
drawSign(MemoryStorage.config.getFileConfiguration().getStringList(ConfigKey.SIGN_IN_GAME.getPath()), signBlock, arena);
}
}
}
private static void drawSign(List signLines, Sign signBlock, Arena arena) {
- drawSign(signLines, signBlock, "arenaName-" + arena.arenaName, "players-" + arena.playersInArena.size(),
- "maxplayers-" + arena.maxPlayers, "timeleft-" + arena.timer);
+ drawSign(signLines, signBlock, "arenaName-" + arena.getArenaOptions().arenaName(), "players-" +
+ arena.getPlayersInArena().size(), "maxplayers-" + arena.getMaxPlayers(), "timeleft-" + arena.getTimer());
}
private static void drawSign(List signLines, Sign signBlock, String... variables) {
diff --git a/src/main/java/net/knarcraft/blockhunt/util/VisibilityHelper.java b/src/main/java/net/knarcraft/blockhunt/util/VisibilityHelper.java
index 599ba19..d001176 100644
--- a/src/main/java/net/knarcraft/blockhunt/util/VisibilityHelper.java
+++ b/src/main/java/net/knarcraft/blockhunt/util/VisibilityHelper.java
@@ -32,6 +32,44 @@ public final class VisibilityHelper {
}
+ /**
+ * Updates the hidden state of the given hider
+ *
+ * @param player A player that's currently a hider
+ */
+ public static void updateHiddenState(Player player) {
+ Location playerLocation = player.getLocation();
+ Location moveLocation = MemoryStorage.moveLocation.get(player);
+
+ // If the hider has somehow lost their disguise block from their inventory,
+ ItemStack inventoryBlock = player.getInventory().getItem(8);
+ if (inventoryBlock == null && MemoryStorage.playerBlock.get(player) != null) {
+ inventoryBlock = MemoryStorage.playerBlock.get(player);
+ player.getInventory().setItem(8, inventoryBlock);
+ }
+
+ if (moveLocation == null || inventoryBlock == null) {
+ return;
+ }
+
+ // If the player is standing still, try to turn the player into a solid block
+ if (moveLocation.getX() == playerLocation.getX() && moveLocation.getY() == playerLocation.getY() &&
+ moveLocation.getZ() == playerLocation.getZ()) {
+ if (inventoryBlock.getAmount() > 1) {
+ // Just decrease the timer
+ inventoryBlock.setAmount(inventoryBlock.getAmount() - 1);
+ } else {
+ VisibilityHelper.makePlayerSolid(player, inventoryBlock);
+ }
+ } else {
+ // The player moved. Un-hide and reset the hide timer
+ inventoryBlock.setAmount(5);
+ if (!DisguiseAPI.isDisguised(player)) {
+ VisibilityHelper.makePlayerUnSolid(player);
+ }
+ }
+ }
+
/**
* Makes a player visible to players in an arena and the other way around
*
@@ -39,7 +77,7 @@ public final class VisibilityHelper {
* @param player The player to make visible
*/
public static void makePlayerVisible(Arena arena, Player player) {
- for (Player otherPlayer : arena.playersInArena) {
+ for (Player otherPlayer : arena.getPlayersInArena()) {
if (otherPlayer.canSee(player)) {
// Make player visible to others
otherPlayer.showPlayer(BlockHunt.plugin, player);
@@ -133,7 +171,7 @@ public final class VisibilityHelper {
* @param player The player to make solid
* @param solidBlock The block to solidify the player as
*/
- public static void makePlayerSolid(Player player, ItemStack solidBlock) {
+ private static void makePlayerSolid(Player player, ItemStack solidBlock) {
Block playerBlock = player.getLocation().getBlock();
BlockData playerBlockData = playerBlock.getBlockData();
if (playerBlockData.getMaterial().isAir() || !playerBlockData.getMaterial().isSolid()) {