From bfc632c3d5d9b4419de023542c32a58869c7eb60 Mon Sep 17 00:00:00 2001 From: Myles Date: Sun, 11 Dec 2022 01:08:11 -0600 Subject: fix bugs --- src/main/java/com/MylesAndMore/tumble/Game.java | 26 +++++++++++++++++++--- .../MylesAndMore/tumble/commands/StartGame.java | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/tumble/Game.java index b5932e3..064b5ae 100644 --- a/src/main/java/com/MylesAndMore/tumble/Game.java +++ b/src/main/java/com/MylesAndMore/tumble/Game.java @@ -8,6 +8,8 @@ import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.*; import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -42,6 +44,8 @@ public class Game { private String gameType; // Define a variable for the autostart PID private int autoStartID = -1; + // Define a variable for music ID + private int musicID = -1; // Initialize a new instance of the Random class for use later private final Random Random = new Random(); @@ -186,7 +190,14 @@ public class Game { */ public void playerDeath(Player player) { player.setGameMode(GameMode.SPECTATOR); - player.teleport(gameSpawn); + // 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(), () -> { + player.teleport(gameSpawn); + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + player.setGameMode(GameMode.SPECTATOR); + }, 5); + }, 5); // If there are more than 2 players in the game, if (roundPlayers.size() > 2) { // remove that player (who just died) from the roundPlayersArray, effectively eliminating them, @@ -364,10 +375,11 @@ public class Game { "minecraft:tumble.7", "minecraft:tumble.8", "minecraft:tumble.9")); + String currentSong = sounds.get(Random.nextInt(sounds.size())); for (Player aPlayer : players) { - aPlayer.playSound(aPlayer.getLocation(), sounds.get(Random.nextInt(sounds.size())), category, volume, pitch); + aPlayer.playSound(aPlayer.getLocation(), currentSong, category, volume, pitch); } - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + musicID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { playMusic(gamePlayers, SoundCategory.NEUTRAL, 1, 1); }, 1460); } @@ -425,6 +437,12 @@ public class Game { generateLayers(gameType); // Wait 5s (100t) for tp method Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.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); @@ -457,6 +475,8 @@ public class Game { displayActionbar(gamePlayers, ChatColor.BLUE + "Returning to lobby in ten seconds..."); // Wait 10s (200t), then Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + // Stop music from replaying + Bukkit.getServer().getScheduler().cancelTask(musicID); // 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 diff --git a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java index 652b222..c138cda 100644 --- a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java +++ b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java @@ -17,7 +17,7 @@ public class StartGame implements CommandExecutor { // Check if there is a lobbyWorld specified in config if (TumbleManager.getLobbyWorld() != null) { // Check if there is more than one person in lobby - if (TumbleManager.getPlayersInLobby().size() > 0) { + if (TumbleManager.getPlayersInLobby().size() > 1) { // Check if there is a gameWorld specified in config if (TumbleManager.getGameWorld() != null) { // Check if a game is already pending to start -- cgit v1.2.3