aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-06-13 21:50:11 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-06-13 21:50:11 -0400
commitd849ab8d085675715622dcef212d32239eb5d4bb (patch)
tree506559b6721282c9d7ee04f99bf81540cf5a6eb5 /src/main
parent39ce49b6c25492bd1268c8ce9bba2731f013aab2 (diff)
downloadTumble-d849ab8d085675715622dcef212d32239eb5d4bb.tar.gz
Tumble-d849ab8d085675715622dcef212d32239eb5d4bb.tar.bz2
Tumble-d849ab8d085675715622dcef212d32239eb5d4bb.zip
Clean up code and fix join cmd
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java2
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java2
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/Join.java12
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/Reload.java2
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/game/Game.java78
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/game/Layers.java1
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java2
7 files changed, 53 insertions, 46 deletions
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java
index a862268..bdead44 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java
@@ -34,7 +34,7 @@ public class ForceStart implements CommandExecutor, TabCompleter {
game = ConfigManager.arenas.get(args[0]).game;
}
- game.startGame();
+ game.gameStart();
sender.sendMessage(ChatColor.GREEN + "Starting game");
return true;
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java
index d862586..ddd5826 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java
@@ -39,7 +39,7 @@ public class ForceStop implements CommandExecutor, TabCompleter {
return false;
}
- game.killGame();
+ game.gameEnd();
sender.sendMessage(ChatColor.GREEN + "Game stopped.");
return true;
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java
index 4dd4ef8..de44da1 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java
@@ -74,9 +74,15 @@ public class Join implements CommandExecutor, TabCompleter {
if (arena.game == null) {
game = arena.game = new Game(arena, type);
}
- else {
- sender.sendMessage(ChatColor.RED + "A game of "+type+" is currently taking place in this arena, choose another arena or join it with /tumble:join "+arena.name+" "+type);
- return false;
+ else
+ {
+ if (arena.game.type == type) {
+ game = arena.game;
+ }
+ else {
+ sender.sendMessage(ChatColor.RED + "A game of "+type+" is currently taking place in this arena, choose another arena or join it with /tumble:join "+arena.name+" "+type);
+ return false;
+ }
}
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java b/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java
index a19b04b..ca67a2e 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java
@@ -25,7 +25,7 @@ public class Reload implements CommandExecutor, TabCompleter {
for (Arena a : ConfigManager.arenas.values()) {
if (a.game != null) {
- a.game.killGame();
+ a.game.gameEnd();
}
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Game.java b/src/main/java/com/MylesAndMore/Tumble/game/Game.java
index 9bb2bc8..113a5cd 100644
--- a/src/main/java/com/MylesAndMore/Tumble/game/Game.java
+++ b/src/main/java/com/MylesAndMore/Tumble/game/Game.java
@@ -26,9 +26,10 @@ public class Game {
public final GameType type;
public final Arena arena;
public final World gameWorld;
- public final List<Player> gamePlayers = new ArrayList<>();
private final Location gameSpawn;
+ public final List<Player> gamePlayers = new ArrayList<>();
private final HashMap<Player, Integer> gameWins = new HashMap<>();
+ private final HashMap<Player, ItemStack[]> inventories = new HashMap<>();
public GameState gameState = GameState.WAITING;
public GameType roundType;
private int gameID = -1;
@@ -47,7 +48,7 @@ public class Game {
/**
* Creates a new Game
*/
- public void startGame() {
+ public void gameStart() {
// Check if the game is starting or running
if (gameState != GameState.WAITING) {
@@ -72,6 +73,7 @@ public class Game {
scatterPlayers(gamePlayers);
// Put all players in spectator to prevent them from getting kicked for flying
setGamemode(gamePlayers, GameMode.SPECTATOR);
+ Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> setGamemode(gamePlayers, GameMode.SPECTATOR), 10);
clearInventories(gamePlayers);
clearArena();
prepareGameType(type);
@@ -126,7 +128,7 @@ public class Game {
}
/**
- * Round end stuff: Finds and displays winner, starts next round if necessary
+ * Ends round: Finds and displays winner, starts next round if necessary
*/
private void roundEnd() {
// Cancel the tasks that auto-end the round
@@ -159,60 +161,51 @@ public class Game {
}
/**
- * Game end stuff: Displays overall winner and teleports players to lobby
+ * Ends game: Displays overall winner and teleports players to lobby
*/
- private void gameEnd() {
+ public void gameEnd() {
if (!gamePlayers.isEmpty()) {
- Bukkit.getServer().getScheduler().cancelTask(gameID);
- gameID = -1;
- Bukkit.getServer().getScheduler().cancelTask(autoStartID);
- autoStartID = -1;
- Player winner = getPlayerWithMostWins(gameWins);
+
setGamemode(gamePlayers, GameMode.SPECTATOR);
clearInventories(gamePlayers);
+
+ Player winner = getPlayerWithMostWins(gameWins);
if (winner != null) {
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(plugin, () -> {
- // First, check to see if there is a separate location to tp the winner to
+
clearArena();
- if (ConfigManager.winnerLobby != null && winner != null) {
- winner.teleport(ConfigManager.winnerLobby);
- // Remove the winner from the game so they don't get double-tp'd
- gamePlayers.remove(winner);
- }
- // Send all players back to lobby (spawn)
- for (Player aPlayer : gamePlayers) {
- aPlayer.teleport(Objects.requireNonNull(ConfigManager.lobby));
+
+ for (Player p : gamePlayers) {
+ // Restore inventories
+ if (inventories.containsKey(p)) {
+ p.getInventory().setContents(inventories.get(p));
+ }
+
+ if (p == winner && ConfigManager.winnerLobby != null) {
+ p.teleport(ConfigManager.winnerLobby);
+ }
+ else {
+ p.teleport(Objects.requireNonNull(ConfigManager.lobby));
+ }
}
+
}, 200);
}
- HandlerList.unregisterAll(eventListener);
- arena.game = null;
- }
-
- /**
- * Force stops a game
- */
- public void killGame() {
Bukkit.getServer().getScheduler().cancelTask(gameID);
gameID = -1;
Bukkit.getServer().getScheduler().cancelTask(autoStartID);
autoStartID = -1;
HandlerList.unregisterAll(eventListener);
- clearInventories(gamePlayers);
- for (Player aPlayer : gamePlayers) {
- if (aPlayer.getWorld().equals(arena.world)) {
- aPlayer.teleport(Objects.requireNonNull(ConfigManager.lobby));
- }
- }
arena.game = null;
}
/**
- * Removes a player from the game
+ * Removes a player from the game.
* Called when a player leaves the server, or if they issue the leave command
* @param p Player to remove
*/
@@ -222,13 +215,24 @@ public class Game {
gameEnd();
}
p.getInventory().clear();
+ if (inventories.containsKey(p)) {
+ p.getInventory().setContents(inventories.get(p));
+ }
p.teleport(ConfigManager.lobby);
}
+ /**
+ * Adds a player to the wait area. Called from /tumble-join
+ * Precondition: the game is in state WAITING
+ * @param p Player to add
+ */
public void addPlayer(Player p) {
gamePlayers.add(p);
+ // save inventory
+ inventories.put(p, p.getInventory().getContents());
if (ConfigManager.waitArea != null) {
p.teleport(ConfigManager.waitArea);
+ p.getInventory().clear();
}
if (gamePlayers.size() >= 2 && gameState == GameState.WAITING) {
autoStart();
@@ -248,7 +252,7 @@ public class Game {
displayActionbar(gamePlayers, ChatColor.GREEN + "Game will begin in "+waitDuration+" seconds!");
playSound(gamePlayers, Sound.BLOCK_NOTE_BLOCK_CHIME, SoundCategory.BLOCKS, 1, 1);
// 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(plugin, this::startGame, waitDuration * 20L);
+ autoStartID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this::gameStart, waitDuration * 20L);
}, 50);
}
@@ -288,9 +292,7 @@ public class Game {
new Location(gameWorld, (x + 11.5), y, (z + 11.5), 135, 0)));
Collections.shuffle(scatterLocations);
for (Player aPlayer : players) {
- if (!aPlayer.teleport(scatterLocations.get(0))) {
- plugin.getLogger().info("dbg: FAILED TELEPORT");
- }
+ aPlayer.teleport(scatterLocations.get(0));
scatterLocations.remove(0); // Remove that location so multiple players won't get the same one
}
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Layers.java b/src/main/java/com/MylesAndMore/Tumble/game/Layers.java
index 9c60393..05e289a 100644
--- a/src/main/java/com/MylesAndMore/Tumble/game/Layers.java
+++ b/src/main/java/com/MylesAndMore/Tumble/game/Layers.java
@@ -190,7 +190,6 @@ public class Layers {
add(Material.REDSTONE_BLOCK);
add(Material.REDSTONE_LAMP);
add(Material.TARGET);
- add(Material.PISTON);
add(Material.SLIME_BLOCK);
add(Material.OBSERVER);
}};
diff --git a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
index 855e755..c4c1943 100644
--- a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
+++ b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
@@ -120,7 +120,7 @@ public class ConfigManager {
double x = section.getDouble("x");
double y = section.getDouble("y");
- double z = section.getDouble("x");
+ double z = section.getDouble("z");
if (x == 0 || y == 0 || z == 0) {
return new Result<>("Arena coordinates are missing or are zero. Coordinates cannot be zero.");
}