aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles <43725835+MylesAndMore@users.noreply.github.com>2022-12-06 17:15:24 +0000
committerMyles <43725835+MylesAndMore@users.noreply.github.com>2022-12-06 17:15:24 +0000
commit43761076f359278756dfcddbcdeeca14b45c6f2b (patch)
treea0e701b32118bd7997beb42415284978e1af59ec
parent81a433dbbae4ac4494e6084c166608fa40fe23b7 (diff)
downloadTumble-43761076f359278756dfcddbcdeeca14b45c6f2b.tar.gz
Tumble-43761076f359278756dfcddbcdeeca14b45c6f2b.tar.bz2
Tumble-43761076f359278756dfcddbcdeeca14b45c6f2b.zip
new tp method and more comments
-rw-r--r--src/main/java/com/MylesAndMore/tumble/Game.java72
1 files changed, 56 insertions, 16 deletions
diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/tumble/Game.java
index 16916ff..793d4dd 100644
--- a/src/main/java/com/MylesAndMore/tumble/Game.java
+++ b/src/main/java/com/MylesAndMore/tumble/Game.java
@@ -30,7 +30,7 @@ public class Game {
// Define local game vars
// The gameType keeps the current game type (shocker)
- private static String gameType;
+ 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
@@ -56,16 +56,15 @@ public class Game {
public boolean startGame() {
gameState = "starting";
if (Objects.equals(TumbleManager.getGameType(), "shovels")) {
- // Set the correct gameType for the game we're playing, for later
- gameType = "shovels";
+ // Set the roundType to gameType since it won't change for this mode
+ roundType = gameType;
// 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
- // Reminder: we need a way for blocks to break instantly and for these to not lose durability!
giveItems(new ItemStack(Material.DIAMOND_SHOVEL));
- // Send players to the game
- sendPlayers();
+ // Send all players from lobby to the game
+ teleportPlayers(TumbleManager.getPlayersInLobby());
// Keep in mind that after this runs, this command will complete and return true
}
else {
@@ -73,45 +72,51 @@ public class Game {
}
}
else if (Objects.equals(TumbleManager.getGameType(), "snowballs")) {
- gameType = "snowballs";
+ roundType = gameType;
if (generateLayers(gameType)) {
giveItems(new ItemStack(Material.SNOWBALL));
- sendPlayers();
+ teleportPlayers(TumbleManager.getPlayersInLobby());
}
else {
return false;
}
}
else if (Objects.equals(TumbleManager.getGameType(), "mixed")) {
- gameType = "mixed";
- // Mixed gamemode (choose random shovels or snowballs)
+ // Mixed gamemode (choose random shovels/0 or snowballs/1)
if (Random.nextInt(2) == 0) {
roundType = "shovels";
generateLayers("shovels");
giveItems(new ItemStack(Material.DIAMOND_SHOVEL));
- sendPlayers();
+ teleportPlayers(TumbleManager.getPlayersInLobby());
}
else {
roundType = "snowballs";
generateLayers("snowballs");
giveItems(new ItemStack(Material.SNOWBALL));
- sendPlayers();
-
+ teleportPlayers(TumbleManager.getPlayersInLobby());
}
}
else {
// The game type in the config did not match a specified game type; return false to signify that
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());
+ // 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));
gameState = "running";
return true;
}
+ /**
+ * Generates the layers in the gameWorld for a certain gameType
+ * @param gameType 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) {
Location layer = new Location(gameSpawn.getWorld(), gameSpawn.getX(), gameSpawn.getY(), gameSpawn.getZ(), gameSpawn.getYaw(), gameSpawn.getPitch());
if (Objects.equals(roundType, "shovels")) {
@@ -150,6 +155,9 @@ public class Game {
return true;
}
+ // THIS METHOD IS DEPRECATED!!
+ // It has been replaced by teleportPlayers(), I'm just leaving this just in case teleportPlayers() doesn't work out
+ /**
private void sendPlayers() {
// Get the X, Y, and Z coords of that location
double x = gameSpawn.getX();
@@ -182,6 +190,39 @@ public class Game {
scatterLocations.remove(0);
}
}
+ */
+
+ /**
+ * Teleports a list of players to the specified scatter locations in the gameWorld
+ * @param players a List of Players to teleport
+ */
+ private void teleportPlayers(List<Player> players) {
+ // Get the coords of the game's spawn location
+ double x = gameSpawn.getX();
+ double y = gameSpawn.getY();
+ double z = gameSpawn.getZ();
+ // Create the scatter locations based off the game's spawn
+ List<Location> scatterLocations = new ArrayList<>();
+ scatterLocations.addAll(List.of(
+ new Location(gameWorld, (x - 14.5), y, (z + 0.5) , -90, 0),
+ new Location(gameWorld, (x + 0.5), y, (z - 14.5), 0, 0),
+ new Location(gameWorld, (x + 15.5), y, (z + 0.5), 90, 0),
+ new Location(gameWorld, (x + 0.5), y, (z + 15.5), 180, 0 ),
+ new Location(gameWorld, (x - 10.5), y, (z - 10.5), -45, 0),
+ 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);
+ }
+ }
private void setSurvival() {
for (List<Player> spectators = gamePlayers; spectators.size() > 0; spectators.remove(0)) {
@@ -230,9 +271,8 @@ public class Game {
else {
// Re-generate layers
generateLayers(gameType);
- // Teleport players
- // A new method will need to be written for this; current one only supports lobby
-
+ // Re-scatter players
+ teleportPlayers(gamePlayers);
// Set their gamemodes to survival
setSurvival();
}