diff options
author | Myles <43725835+MylesAndMore@users.noreply.github.com> | 2022-12-11 17:49:35 +0000 |
---|---|---|
committer | Myles <43725835+MylesAndMore@users.noreply.github.com> | 2022-12-11 17:49:35 +0000 |
commit | b3a697e36b2f86ac215ee766c2b6f7ddf123e0fb (patch) | |
tree | db0697e9a0afb5f56e8711aa572797b14f113c71 | |
parent | aedd6cdd4013061010e6c2c2fb1a88e085d2470b (diff) | |
download | Tumble-b3a697e36b2f86ac215ee766c2b6f7ddf123e0fb.tar.gz Tumble-b3a697e36b2f86ac215ee766c2b6f7ddf123e0fb.tar.bz2 Tumble-b3a697e36b2f86ac215ee766c2b6f7ddf123e0fb.zip |
make rounds timed
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | src/main/java/com/MylesAndMore/tumble/Game.java | 68 | ||||
-rw-r--r-- | src/main/java/com/MylesAndMore/tumble/Main.java | 2 | ||||
-rw-r--r-- | src/main/java/com/MylesAndMore/tumble/api/Generator.java | 1 |
4 files changed, 55 insertions, 20 deletions
@@ -23,8 +23,8 @@ once this list is complete and all bugs are fixed, we *should* be ready for rele - [x] make it so that you can't remove any of the game items from your inventory - [x] make snowballs actually break blocks (duh) - [x] make the randomized mode logic -- [ ] make it so rounds end in a draw after 5m -- [ ] make it so that players get snowballs instead of shovels in shovels rounds after 2m 30s +- [x] make it so rounds end in a draw after 5m +- [x] make it so that players get snowballs instead of shovels in shovels rounds after 2m 30s - [x] remove snowball knockback ## game logic diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/tumble/Game.java index 064b5ae..2b3d7b4 100644 --- a/src/main/java/com/MylesAndMore/tumble/Game.java +++ b/src/main/java/com/MylesAndMore/tumble/Game.java @@ -42,6 +42,8 @@ public class Game { private String gameState; // Define a variable for the gameType private String gameType; + // Define a variable for the game ID + private int gameID = -1; // Define a variable for the autostart PID private int autoStartID = -1; // Define a variable for music ID @@ -91,7 +93,6 @@ public class Game { if (generateLayers(type)) { // Send all players from lobby to the game scatterPlayers(TumbleManager.getPlayersInLobby()); - // Keep in mind that after this runs, this command will complete and return true } else { return false; @@ -256,6 +257,17 @@ public class Game { else if (Objects.equals(gameState, "starting")) { giveItems(TumbleManager.getPlayersInLobby(), shovel); } + // Schedule a process to give snowballs after 2m30s (so people can't island, the OG game had this) + // Add 160t because of the countdown + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + clearInventories(gamePlayers); + giveItems(gamePlayers, new ItemStack(Material.SNOWBALL)); + displayActionbar(gamePlayers, ChatColor.DARK_RED + "Showdown!"); + // End the round in another 2m30s + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + roundEnd(null); + }, 3000); + }, 3160); } else if (Objects.equals(type, "snowballs")) { layer.setY(layer.getY() - 1); @@ -272,6 +284,10 @@ public class Game { else if (Objects.equals(gameState, "starting")) { giveItems(TumbleManager.getPlayersInLobby(), new ItemStack(Material.SNOWBALL)); } + // End the round in 5m + gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + roundEnd(null); + }, 6160); } else if (Objects.equals(type, "mixed")) { // Randomly select either shovels or snowballs and re-run the method @@ -364,7 +380,9 @@ public class Game { } private void playMusic(@NotNull List<Player> players, @NotNull SoundCategory category, float volume, float pitch) { - List<String> sounds = new ArrayList<>(List.of( + List<String> sounds = new ArrayList<>(); + if (sounds.size() == 0) { + sounds = new ArrayList<>(List.of( "minecraft:tumble.0", "minecraft:tumble.1", "minecraft:tumble.2", @@ -375,13 +393,17 @@ 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(), currentSong, category, volume, pitch); } - musicID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { - playMusic(gamePlayers, SoundCategory.NEUTRAL, 1, 1); - }, 1460); + else { + String currentSong = sounds.get(Random.nextInt(sounds.size())); + for (Player aPlayer : players) { + aPlayer.playSound(aPlayer.getLocation(), currentSong, category, volume, pitch); + } + sounds.remove(currentSong); + musicID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { + playMusic(gamePlayers, SoundCategory.NEUTRAL, 1, 1); + }, 1460); + } } /** @@ -414,15 +436,23 @@ public class Game { } } - private void roundEnd(Player winner) { - // Set the wins of the player to their current # of wins + 1 - gameWins.set(gamePlayers.indexOf(winner), (gameWins.get(gamePlayers.indexOf(winner)) + 1)); + private void roundEnd(@Nullable Player winner) { + // Cancel the tasks to auto-end the round + Bukkit.getServer().getScheduler().cancelTask(gameID); + // Check if there was a winner of the round + if (winner != null) { + // Set the wins of the player to their current # of wins + 1 + gameWins.set(gamePlayers.indexOf(winner), (gameWins.get(gamePlayers.indexOf(winner)) + 1)); + } // Clear old layers (as a fill command, this would be /fill ~-20 ~-4 ~-20 ~20 ~ ~20 relative to spawn) Generator.generateCuboid(new Location(gameSpawn.getWorld(), gameSpawn.getX() - 20, gameSpawn.getY() - 4, gameSpawn.getZ() - 20), new Location(gameSpawn.getWorld(), gameSpawn.getX() + 20, gameSpawn.getY(), gameSpawn.getZ() + 20), Material.AIR); playSound(gamePlayers, Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.BLOCKS, 5, 0); - // If the player has three wins, they won the game, so initiate the gameEnd - if (gameWins.get(gamePlayers.indexOf(winner)) == 3) { - gameEnd(winner); + // Again, check if there was a winner to...win + if (winner != null) { + // If the player has three wins, they won the game, so initiate the gameEnd + if (gameWins.get(gamePlayers.indexOf(winner)) == 3) { + gameEnd(winner); + } } // If that player doesn't have three wins, nobody else does, so we need another round else { @@ -430,8 +460,14 @@ public class Game { roundPlayers.remove(0); roundPlayers.addAll(gamePlayers); clearInventories(gamePlayers); - displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + winner.getName() + " has won the round!", 5, 60, 5); - // Wait for player to respawn before completely l a g g i n g the server ._. + // Display personalized title if someone won, generalized if not + if (winner != null) { + displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + winner.getName() + " has won the round!", 5, 60, 5); + } + else { + displayTitles(gamePlayers, ChatColor.RED + "Round over!", ChatColor.GOLD + "Draw!", 5, 60, 5); + } + // Wait for player to respawn before completely l a g g i n g the server ._. Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> { // Re-generate layers generateLayers(gameType); diff --git a/src/main/java/com/MylesAndMore/tumble/Main.java b/src/main/java/com/MylesAndMore/tumble/Main.java index 620322c..73dedf5 100644 --- a/src/main/java/com/MylesAndMore/tumble/Main.java +++ b/src/main/java/com/MylesAndMore/tumble/Main.java @@ -34,6 +34,6 @@ public class Main extends JavaPlugin{ } // Init message - Bukkit.getServer().getLogger().info("[tumble] tumble successfully enabled!"); + Bukkit.getServer().getLogger().info("[tumble] Tumble successfully enabled!"); } }
\ No newline at end of file diff --git a/src/main/java/com/MylesAndMore/tumble/api/Generator.java b/src/main/java/com/MylesAndMore/tumble/api/Generator.java index f4439b6..d66352a 100644 --- a/src/main/java/com/MylesAndMore/tumble/api/Generator.java +++ b/src/main/java/com/MylesAndMore/tumble/api/Generator.java @@ -1,6 +1,5 @@ package com.MylesAndMore.tumble.api; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; |