aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles <mylesandmore9@gmail.com>2022-12-07 21:54:26 -0600
committerMyles <mylesandmore9@gmail.com>2022-12-07 21:54:26 -0600
commit102627d4b28589676ddccc359a9ecd0dffa13f85 (patch)
tree87d30fa50159732410155e1d3ab938e9764219d3
parent777f510256896bbf7cd73b6da7109b875ef6218e (diff)
downloadTumble-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.java57
-rw-r--r--src/main/java/com/MylesAndMore/tumble/commands/StartGame.java40
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]);
+ }
}
}
}