diff options
author | MylesAndMore <mylesandmore9@gmail.com> | 2023-06-17 20:46:36 +0200 |
---|---|---|
committer | MylesAndMore <mylesandmore9@gmail.com> | 2023-06-17 20:46:36 +0200 |
commit | 19d8ffbc6659c7de13b81a587dae7081078649c6 (patch) | |
tree | b15435cb788f0a221a7393739908b4c84baa51ad /src/main/java/com/MylesAndMore/tumble/Game.java | |
parent | 3c48bd3f9587ae9459d789f70ba1ebaaf691209b (diff) | |
download | Tumble-19d8ffbc6659c7de13b81a587dae7081078649c6.tar.gz Tumble-19d8ffbc6659c7de13b81a587dae7081078649c6.tar.bz2 Tumble-19d8ffbc6659c7de13b81a587dae7081078649c6.zip |
refactoring!
it's been a while, I thought I would clean up the code a bit and test to make sure everything works on 1.20 :)
Diffstat (limited to '')
-rw-r--r-- | src/main/java/com/MylesAndMore/Tumble/game/Game.java (renamed from src/main/java/com/MylesAndMore/tumble/Game.java) | 182 |
1 files changed, 62 insertions, 120 deletions
diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/Tumble/game/Game.java index 1400887..0ea74f5 100644 --- a/src/main/java/com/MylesAndMore/tumble/Game.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/Game.java @@ -1,8 +1,7 @@ -package com.MylesAndMore.tumble; +package com.MylesAndMore.Tumble.game; -import com.MylesAndMore.tumble.api.Generator; +import com.MylesAndMore.Tumble.plugin.Constants; -import com.MylesAndMore.tumble.api.Layers; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; @@ -18,20 +17,15 @@ import javax.annotation.Nullable; import java.util.*; /** - * This class holds all methods relating to the tumble Game in any way! + * Everything relating to the Tumble game */ public class Game { // Singleton class logic - // Define the gameInstance private static Game gameInstance; - - // Private Game() constructor for singleton instance private Game() { - gameWorld = Bukkit.getWorld(TumbleManager.getGameWorld()); - gameSpawn = gameWorld.getSpawnLocation(); + gameWorld = Bukkit.getWorld(Constants.getGameWorld()); + gameSpawn = Objects.requireNonNull(gameWorld).getSpawnLocation(); } - - // ONLY Public method to get the game instance public static Game getGame() { if (gameInstance == null) { gameInstance = new Game(); @@ -39,33 +33,18 @@ public class Game { return gameInstance; } - // Define local game vars - // The gameState keeps the current state of the game (I'm so creative, I know) private String gameState; - // Define a variable for the gameType private String gameType; - // Define a variable for the game ID private int gameID = -1; - // Define a variable for the autostart PID private int autoStartID = -1; - // Define a variable to keep the list of tracks that have already played in the game - List<String> sounds = new ArrayList<>(); - - // Initialize a new instance of the Random class for use later - private final Random Random = new Random(); - // Define the game world and its spawnpoint as a new Location for use later private final World gameWorld; private final Location gameSpawn; - // Make a list of the game's players for later private List<Player> gamePlayers; - // Make a list of the round's players private List<Player> roundPlayers; - // Initialize a list to keep track of wins between rounds private List<Integer> gameWins; - - // BEGIN PUBLIC METHODS + private final Random Random = new Random(); /** * Creates a new Game @@ -73,61 +52,52 @@ public class Game { * @return true if the game succeeds creation, and false if not */ public boolean startGame(@NotNull String type) { - // Check if the game is starting or running, if so, do not start - if (Objects.equals(gameState, "starting")) { - return false; - } - else if (Objects.equals(gameState, "running")) { - return false; - } + // Check if the game is starting or running + if (Objects.equals(gameState, "starting")) { return false; } + else if (Objects.equals(gameState, "running")) { return false; } else { // Define the gameType switch (type) { - case "shovels": - case "snowballs": - case "mixed": + case "shovels", "snowballs", "mixed" -> { gameState = "starting"; // Set the type to gameType since it won't change for this mode gameType = type; // Clear the players' inventories so they can't bring any items into the game - clearInventories(TumbleManager.getPlayersInLobby()); + clearInventories(Constants.getPlayersInLobby()); // Generate the correct layers for a Shovels game // The else statement is just in case the generator fails; this command will fail if (generateLayers(type)) { // Send all players from lobby to the game - scatterPlayers(TumbleManager.getPlayersInLobby()); + scatterPlayers(Constants.getPlayersInLobby()); } else { return false; } - break; - default: - // The game type in the config did not match a specified game type; return false to signify that + } + default -> { + // The game type in the config did not match a specified game type return false; + } } - // If a game creation succeeded, then, - // Update the game's players for later - gamePlayers = new ArrayList<>(TumbleManager.getPlayersInGame()); - // Update the round's players for later - roundPlayers = new ArrayList<>(TumbleManager.getPlayersInGame()); + // Update the game/round players for later + gamePlayers = new ArrayList<>(Constants.getPlayersInGame()); + roundPlayers = new ArrayList<>(Constants.getPlayersInGame()); // Create a list that will later keep track of each player's wins gameWins = new ArrayList<>(); gameWins.addAll(List.of(0,0,0,0,0,0,0,0)); - // Put all players in spectator to prevent them from getting kicked for flying (this needs a delay bc servers are SLOOOWWW) - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - setGamemode(gamePlayers, GameMode.SPECTATOR); - }, 25); + // Put all players in spectator to prevent them from getting kicked for flying (this needs a delay bc servers are slow) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> setGamemode(gamePlayers, GameMode.SPECTATOR), 25); // Wait 5s (100t) for the clients to load in - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { // Begin the countdown sequence playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_GREEN + "3", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.YELLOW + "2", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_RED + "1", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 2); displayTitles(gamePlayers, ChatColor.GREEN + "Go!", null, 1, 5, 1); setGamemode(gamePlayers, GameMode.SURVIVAL); @@ -145,15 +115,13 @@ public class Game { */ public void autoStart() { // Wait for the player to load in - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { gameState = "waiting"; - displayActionbar(TumbleManager.getPlayersInLobby(), ChatColor.GREEN + "Game will begin in 15 seconds!"); - playSound(TumbleManager.getPlayersInLobby(), Sound.BLOCK_NOTE_BLOCK_CHIME, SoundCategory.BLOCKS, 1, 1); - TumbleManager.getMVWorldManager().loadWorld(TumbleManager.getGameWorld()); + displayActionbar(Constants.getPlayersInLobby(), ChatColor.GREEN + "Game will begin in 15 seconds!"); + playSound(Constants.getPlayersInLobby(), Sound.BLOCK_NOTE_BLOCK_CHIME, SoundCategory.BLOCKS, 1, 1); + Constants.getMVWorldManager().loadWorld(Constants.getGameWorld()); // Schedule a process to start the game in 300t (15s) and save the PID so we can cancel it later if needed - autoStartID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - startGame(TumbleManager.getGameType()); - }, 300); + autoStartID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> startGame(Constants.getGameType()), 300); }, 50); } @@ -162,8 +130,8 @@ public class Game { */ public void cancelStart() { Bukkit.getServer().getScheduler().cancelTask(Game.getGame().getAutoStartID()); - displayActionbar(TumbleManager.getPlayersInLobby(), ChatColor.RED + "Game start cancelled!"); - playSound(TumbleManager.getPlayersInLobby(), Sound.BLOCK_NOTE_BLOCK_BASS, SoundCategory.BLOCKS, 1, 1); + displayActionbar(Constants.getPlayersInLobby(), ChatColor.RED + "Game start cancelled!"); + playSound(Constants.getPlayersInLobby(), Sound.BLOCK_NOTE_BLOCK_BASS, SoundCategory.BLOCKS, 1, 1); gameState = null; autoStartID = -1; } @@ -174,19 +142,16 @@ public class Game { */ public void playerDeath(Player player) { player.setGameMode(GameMode.SPECTATOR); - // Add a delay to tp them to the gameWorld just in case they have a bed in another world - // Delay is needed because instant respawn takes 1t - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + // Add a delay to tp them to the gameWorld just in case they have a bed in another world (yes you Jacob) + // Delay is needed because instant respawn is a lie (it's not actually instant) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { player.teleport(gameSpawn); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - player.setGameMode(GameMode.SPECTATOR); - }, 5); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> player.setGameMode(GameMode.SPECTATOR), 5); }, 5); // remove that player (who just died) from the roundPlayersArray, effectively eliminating them, roundPlayers.remove(player); // If there are less than 2 players in the game (1 just died), if (roundPlayers.size() < 2) { - // End the game, passing the winner to the gameEnd method roundEnd(roundPlayers.get(0)); } } @@ -201,14 +166,11 @@ public class Game { /** * @return The Bukkit process ID of the autostart process, if applicable - * Can also be null if not initialized, and -1 if the process failed to schedule. + * Can also be null if not initialized, or -1 if the process failed to schedule. */ public int getAutoStartID() { return autoStartID; } - // BEGIN PRIVATE METHODS - - // Initialize Layers class private final Layers layers = new Layers(); /** * Generates the layers in the gameWorld for a certain gameType @@ -252,22 +214,19 @@ public class Game { ItemStack shovel = new ItemStack(Material.IRON_SHOVEL); shovel.addEnchantment(Enchantment.SILK_TOUCH, 1); if (Objects.equals(gameState, "running")) { - giveItems(TumbleManager.getPlayersInGame(), shovel); + giveItems(Constants.getPlayersInGame(), shovel); } else if (Objects.equals(gameState, "starting")) { - giveItems(TumbleManager.getPlayersInLobby(), shovel); + giveItems(Constants.getPlayersInLobby(), shovel); } - // Schedule a process to give snowballs after 2m30s (so people can't island, the OG game had this) - // Add 160t because of the countdown - gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + // Schedule a process to give snowballs after 2m30s (so people can't island, the OG game had this); add 160t because of the countdown + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { clearInventories(gamePlayers); giveItems(gamePlayers, new ItemStack(Material.SNOWBALL)); displayActionbar(gamePlayers, ChatColor.DARK_RED + "Showdown!"); playSound(gamePlayers, Sound.ENTITY_ELDER_GUARDIAN_CURSE, SoundCategory.HOSTILE, 1, 1); // End the round in another 2m30s - gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - roundEnd(null); - }, 3000); + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> roundEnd(null), 3000); }, 3160); } else if (Objects.equals(type, "snowballs")) { @@ -346,13 +305,13 @@ public class Game { Generator.generateClumps(Generator.generateCuboid(new Location(layer.getWorld(), layer.getX() - 7, layer.getY(), layer.getZ() - 7), new Location(layer.getWorld(), layer.getX() + 7, layer.getY(), layer.getZ() + 7), Material.LIME_GLAZED_TERRACOTTA), layers.getMaterialList()); } if (Objects.equals(gameState, "running")) { - giveItems(TumbleManager.getPlayersInGame(), new ItemStack(Material.SNOWBALL)); + giveItems(Constants.getPlayersInGame(), new ItemStack(Material.SNOWBALL)); } else if (Objects.equals(gameState, "starting")) { - giveItems(TumbleManager.getPlayersInLobby(), new ItemStack(Material.SNOWBALL)); + giveItems(Constants.getPlayersInLobby(), new ItemStack(Material.SNOWBALL)); } // End the round in 5m - gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> roundEnd(null), 6160); + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> roundEnd(null), 6160); } else if (Objects.equals(type, "mixed")) { // Randomly select either shovels or snowballs and re-run the method @@ -376,7 +335,6 @@ public class Game { */ private void giveItems(List<Player> players, ItemStack itemStack) { for (Player aPlayer : players) { - // Get a singular player from the player list and give that player the specified item aPlayer.getInventory().addItem(itemStack); } } @@ -398,7 +356,6 @@ public class Game { */ private void setGamemode(List<Player> players, GameMode gameMode) { for (Player aPlayer : players) { - // Get a singular player from the player list and set their gamemode to the specified gamemode aPlayer.setGameMode(gameMode); } } @@ -414,7 +371,6 @@ public class Game { */ private void displayTitles(List<Player> players, String title, @Nullable String subtitle, int fadeIn, int stay, int fadeOut) { for (Player aPlayer : players) { - // Get a singular player from the player list and display them the specified title aPlayer.sendTitle(title, subtitle, fadeIn, stay, fadeOut); } } @@ -449,7 +405,6 @@ public class Game { * @param players a List of Players to teleport */ private void scatterPlayers(List<Player> players) { - // Get the coords of the game's spawn location double x = gameSpawn.getX(); double y = gameSpawn.getY(); double z = gameSpawn.getZ(); @@ -463,14 +418,10 @@ public class Game { new Location(gameWorld, (x - 10.5), y, (z + 11.5), -135, 0), new Location(gameWorld, (x + 11.5), y, (z - 10.5), 45, 0), new Location(gameWorld, (x + 11.5), y, (z + 11.5), 135, 0))); - // Shuffle the list (randomize) Collections.shuffle(scatterLocations); - // While there are still unteleported players from the list, teleport them for (Player aPlayer : players) { - // Select a singular player and singular location from the lists and teleport that player aPlayer.teleport(scatterLocations.get(0)); - // Remove that location so multiple players won't get the same one - scatterLocations.remove(0); + scatterLocations.remove(0); // Remove that location so multiple players won't get the same one } } @@ -495,30 +446,28 @@ public class Game { roundPlayers.addAll(gamePlayers); clearInventories(gamePlayers); displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + winner.getName() + " has won the round!", 5, 60, 5); - // Wait for player to respawn before completely l a g g i n g the server ._. - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - // Re-generate layers + // Wait for the player to respawn before completely lagging the server ._. + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { generateLayers(gameType); // Wait 5s (100t) for tp method - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { // Kill all items (pistons are weird) for (Entity entity : gameWorld.getEntities()) { if (entity instanceof Item) { entity.remove(); } } - // Re-scatter players gameState = "starting"; scatterPlayers(gamePlayers); playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_GREEN + "3", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.YELLOW + "2", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_RED + "1", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 2); displayTitles(gamePlayers, ChatColor.GREEN + "Go!", null, 1, 5, 1); setGamemode(gamePlayers, GameMode.SURVIVAL); @@ -532,34 +481,29 @@ public class Game { } else { setGamemode(gamePlayers, GameMode.SPECTATOR); - roundPlayers.removeAll(roundPlayers); + roundPlayers.clear(); roundPlayers.addAll(gamePlayers); clearInventories(gamePlayers); displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + "Draw!", 5, 60, 5); - // Wait for player to respawn before completely l a g g i n g the server ._. - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - // Re-generate layers + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { generateLayers(gameType); - // Wait 5s (100t) for tp method - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - // Kill all items (pistons are weird) + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { for (Entity entity : gameWorld.getEntities()) { if (entity instanceof Item) { entity.remove(); } } - // Re-scatter players gameState = "starting"; scatterPlayers(gamePlayers); playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_GREEN + "3", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.YELLOW + "2", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); displayTitles(gamePlayers, ChatColor.DARK_RED + "1", null, 3, 10, 7); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 2); displayTitles(gamePlayers, ChatColor.GREEN + "Go!", null, 1, 5, 1); setGamemode(gamePlayers, GameMode.SURVIVAL); @@ -575,21 +519,19 @@ public class Game { private void gameEnd(Player winner) { winner.setGameMode(GameMode.SPECTATOR); clearInventories(gamePlayers); - // Announce win displayTitles(gamePlayers, ChatColor.RED + "Game over!", ChatColor.GOLD + winner.getName() + " has won the game!", 5, 60, 5); displayActionbar(gamePlayers, ChatColor.BLUE + "Returning to lobby in ten seconds..."); // Wait 10s (200t), then - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Constants.getPlugin(), () -> { // First, check to see if there is a separate location to tp the winner to - if ((TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.x") != 0) && (TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.y") != 0) && (TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.z") != 0)) { - // Tp the winner to that location - winner.teleport(new Location(Bukkit.getWorld(TumbleManager.getLobbyWorld()), TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.x"), TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.y"), TumbleManager.getPlugin().getConfig().getDouble("winnerTeleport.z"))); + if ((Constants.getPlugin().getConfig().getDouble("winnerTeleport.x") != 0) && (Constants.getPlugin().getConfig().getDouble("winnerTeleport.y") != 0) && (Constants.getPlugin().getConfig().getDouble("winnerTeleport.z") != 0)) { + winner.teleport(new Location(Bukkit.getWorld(Constants.getLobbyWorld()), Constants.getPlugin().getConfig().getDouble("winnerTeleport.x"), Constants.getPlugin().getConfig().getDouble("winnerTeleport.y"), Constants.getPlugin().getConfig().getDouble("winnerTeleport.z"))); // Remove the winner from the gamePlayers so they don't get double-tp'd gamePlayers.remove(winner); } // Send all players back to lobby (spawn) for (Player aPlayer : gamePlayers) { - aPlayer.teleport(Bukkit.getWorld(TumbleManager.getLobbyWorld()).getSpawnLocation()); + aPlayer.teleport(Objects.requireNonNull(Bukkit.getWorld(Constants.getLobbyWorld())).getSpawnLocation()); } }, 200); gameState = "complete"; |