diff options
author | Myles <mylesandmore9@gmail.com> | 2022-12-07 21:54:26 -0600 |
---|---|---|
committer | Myles <mylesandmore9@gmail.com> | 2022-12-07 21:54:26 -0600 |
commit | 102627d4b28589676ddccc359a9ecd0dffa13f85 (patch) | |
tree | 87d30fa50159732410155e1d3ab938e9764219d3 | |
parent | 777f510256896bbf7cd73b6da7109b875ef6218e (diff) | |
download | Tumble-102627d4b28589676ddccc359a9ecd0dffa13f85.tar.gz Tumble-102627d4b28589676ddccc359a9ecd0dffa13f85.tar.bz2 Tumble-102627d4b28589676ddccc359a9ecd0dffa13f85.zip |
rewrite basically an entire method (rip my sanity)
you can now specify what type of game in the cmd and not just the config file (although the config file still works)
but now testing should be easier!
and also flexibility is cool
I wonder how many bugs this will cause in the future...
-rw-r--r-- | src/main/java/com/MylesAndMore/tumble/Game.java | 57 | ||||
-rw-r--r-- | src/main/java/com/MylesAndMore/tumble/commands/StartGame.java | 40 |
2 files changed, 54 insertions, 43 deletions
diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/tumble/Game.java index f3c7ef4..2106e9a 100644 --- a/src/main/java/com/MylesAndMore/tumble/Game.java +++ b/src/main/java/com/MylesAndMore/tumble/Game.java @@ -30,8 +30,6 @@ public class Game { // Define local game vars - // The gameType keeps the current game type (shocker) - private static String gameType = TumbleManager.getGameType(); // The gameState keeps the current state of the game (I'm so creative, I know) private String gameState; // Define a variable for the roundType @@ -57,9 +55,10 @@ public class Game { /** * Creates a new Game + * @param type The type of game * @return true if the game succeeds creation, and false if not */ - public boolean startGame() { + 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; @@ -68,15 +67,14 @@ public class Game { return false; } else { - gameState = "starting"; - if (Objects.equals(TumbleManager.getGameType(), "shovels")) { + // Define the gameType + if (Objects.equals(type, "shovels")) { + gameState = "starting"; // Set the roundType to gameType since it won't change for this mode - roundType = gameType; + roundType = type; // Generate the correct layers for a Shovels game // The else statement is just in case the generator fails; this command will fail - if (generateLayers(gameType)) { - // If the layer generation succeeds, give players diamond shovels - giveItems(lobbyPlayers, new ItemStack(Material.DIAMOND_SHOVEL)); + if (generateLayers(type)) { // Send all players from lobby to the game scatterPlayers(lobbyPlayers); // Keep in mind that after this runs, this command will complete and return true @@ -85,29 +83,24 @@ public class Game { return false; } } - else if (Objects.equals(TumbleManager.getGameType(), "snowballs")) { - roundType = gameType; - if (generateLayers(gameType)) { - giveItems(lobbyPlayers, new ItemStack(Material.SNOWBALL)); + else if (Objects.equals(type, "snowballs")) { + gameState = "starting"; + roundType = type; + if (generateLayers(type)) { scatterPlayers(lobbyPlayers); } else { return false; } } - else if (Objects.equals(TumbleManager.getGameType(), "mixed")) { - // Mixed gamemode (choose random shovels/0 or snowballs/1) - if (Random.nextInt(2) == 0) { - roundType = "shovels"; - generateLayers("shovels"); - giveItems(lobbyPlayers, new ItemStack(Material.DIAMOND_SHOVEL)); + else if (Objects.equals(type, "mixed")) { + gameState = "starting"; + roundType = type; + if (generateLayers(type)) { scatterPlayers(lobbyPlayers); } else { - roundType = "snowballs"; - generateLayers("snowballs"); - giveItems(lobbyPlayers, new ItemStack(Material.SNOWBALL)); - scatterPlayers(lobbyPlayers); + return false; } } else { @@ -141,7 +134,7 @@ public class Game { }, 20); }, 20); }, 20); - }, 100); + }, 100); } return true; } @@ -183,13 +176,13 @@ public class Game { /** * Generates the layers in the gameWorld for a certain gameType - * @param gameType can be either "shovels", "snowballs", or "mixed", anything else will fail generation + * @param type can be either "shovels", "snowballs", or "mixed", anything else will fail generation * @return true if gameType was recognized and layers were (hopefully) generated, false if unrecognized */ - private boolean generateLayers(String gameType) { + private boolean generateLayers(String type) { // Create a new Location for the layers to work with--this is so that we don't modify the actual gameSpawn var Location layer = new Location(gameSpawn.getWorld(), gameSpawn.getX(), gameSpawn.getY(), gameSpawn.getZ(), gameSpawn.getYaw(), gameSpawn.getPitch()); - if (Objects.equals(roundType, "shovels")) { + if (Objects.equals(type, "shovels")) { layer.setY(layer.getY() - 1); Generator.generateLayer(layer, 17, 1, Material.SNOW_BLOCK); Generator.generateLayer(layer, 13, 1, Material.AIR); @@ -199,9 +192,9 @@ public class Game { Generator.generateLayer(layer, 4, 1, Material.PODZOL); layer.setY(layer.getY() + 2); Generator.generateLayer(layer, 4, 2, Material.TALL_GRASS); - roundType = "shovels"; + giveItems(lobbyPlayers, new ItemStack(Material.DIAMOND_SHOVEL)); } - else if (Objects.equals(roundType, "snowballs")) { + else if (Objects.equals(type, "snowballs")) { layer.setY(layer.getY() - 1); Generator.generateLayer(layer, 17, 1, Material.COAL_ORE); Generator.generateLayer(layer, 13, 1, Material.AIR); @@ -210,9 +203,9 @@ public class Game { Generator.generateLayer(layer, 4, 1, Material.AIR); layer.setY(layer.getY() - 1); Generator.generateLayer(layer, 4, 1, Material.LIME_GLAZED_TERRACOTTA); - roundType = "snowballs"; + giveItems(lobbyPlayers, new ItemStack(Material.SNOWBALL)); } - else if (Objects.equals(gameType, "mixed")) { + else if (Objects.equals(type, "mixed")) { // Randomly select either shovels or snowballs and re-run the method if (Random.nextInt(2) == 0) { generateLayers("shovels"); @@ -338,7 +331,7 @@ public class Game { else { displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + winner.getName() + " has won the round!", 5, 60, 5); // Re-generate layers - generateLayers(gameType); + generateLayers(roundType); // Wait 5s (100t) for tp method Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { // Re-scatter players diff --git a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java index 315219a..17d2a34 100644 --- a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java +++ b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java @@ -19,21 +19,39 @@ public class StartGame implements CommandExecutor { if (TumbleManager.getPlayersInLobby().size() > 0) { // Check if there is a gameWorld specified in config if (TumbleManager.getGameWorld() != null) { + sender.sendMessage(ChatColor.BLUE + "Starting game, please wait."); // Use multiverse to load game world // If the load was successful, start game if (TumbleManager.getMVWorldManager().loadWorld(TumbleManager.getGameWorld())) { - // Check which gamemode to initiate from the config file - if (!Game.getGame().startGame()) { - sender.sendMessage(ChatColor.BLUE + "Starting game, please wait."); - // Sender feedback for if the game failed to start - if (Objects.equals(Game.getGame().getGameState(), "starting")) { - sender.sendMessage(ChatColor.RED + "A game is already starting!"); + // If there is no starting argument, + if (args.length == 0) { + // pull which gamemode to initiate from the config file + if (!Game.getGame().startGame(TumbleManager.getGameType())) { + // Sender feedback for if the game failed to start + if (Objects.equals(Game.getGame().getGameState(), "starting")) { + sender.sendMessage(ChatColor.RED + "A game is already starting!"); + } + else if (Objects.equals(Game.getGame().getGameState(), "running")) { + sender.sendMessage(ChatColor.RED + "A game is already running!"); + } + else { + sender.sendMessage(ChatColor.RED + "Failed to recognize game of type " + ChatColor.GRAY + TumbleManager.getPlugin().getConfig().getString("gameMode")); + } } - else if (Objects.equals(Game.getGame().getGameState(), "running")) { - sender.sendMessage(ChatColor.RED + "A game is already running!"); - } - else { - sender.sendMessage(ChatColor.RED + "Failed to recognize game of type " + ChatColor.GRAY + TumbleManager.getPlugin().getConfig().getString("gameMode")); + } + // If there was an argument for gameType, pass that into the startGame method + else { + if (!Game.getGame().startGame(args[0])) { + // Sender feedback for if the game failed to start + if (Objects.equals(Game.getGame().getGameState(), "starting")) { + sender.sendMessage(ChatColor.RED + "A game is already starting!"); + } + else if (Objects.equals(Game.getGame().getGameState(), "running")) { + sender.sendMessage(ChatColor.RED + "A game is already running!"); + } + else { + sender.sendMessage(ChatColor.RED + "Failed to recognize game of type " + ChatColor.GRAY + args[0]); + } } } } |