aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyles <mylesandmore9@gmail.com>2022-12-08 20:04:41 -0600
committerMyles <mylesandmore9@gmail.com>2022-12-08 20:04:41 -0600
commit2d7de58b65fb7ecdd7c784707dbe2a39fa3d6e27 (patch)
tree6dde141c7022be968111dcd4a771d113d03344c1
parent126b83f1ca45457dc1c9e08c1d0fc30b4fc8b88d (diff)
downloadTumble-2d7de58b65fb7ecdd7c784707dbe2a39fa3d6e27.tar.gz
Tumble-2d7de58b65fb7ecdd7c784707dbe2a39fa3d6e27.tar.bz2
Tumble-2d7de58b65fb7ecdd7c784707dbe2a39fa3d6e27.zip
fix (most of) the bugs
-rw-r--r--src/main/java/com/MylesAndMore/tumble/EventListener.java32
-rw-r--r--src/main/java/com/MylesAndMore/tumble/Game.java39
-rw-r--r--src/main/java/com/MylesAndMore/tumble/commands/SetAutoStart.java41
-rw-r--r--src/main/java/com/MylesAndMore/tumble/commands/StartGame.java74
4 files changed, 126 insertions, 60 deletions
diff --git a/src/main/java/com/MylesAndMore/tumble/EventListener.java b/src/main/java/com/MylesAndMore/tumble/EventListener.java
index 8f9ab25..7d07ab4 100644
--- a/src/main/java/com/MylesAndMore/tumble/EventListener.java
+++ b/src/main/java/com/MylesAndMore/tumble/EventListener.java
@@ -12,11 +12,7 @@ import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.entity.ProjectileLaunchEvent;
-import org.bukkit.event.player.PlayerDropItemEvent;
-import org.bukkit.event.player.PlayerItemDamageEvent;
-import org.bukkit.event.player.PlayerJoinEvent;
-import org.bukkit.event.player.PlayerMoveEvent;
-import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.event.player.*;
import org.bukkit.inventory.ItemStack;
public class EventListener implements Listener{
@@ -38,7 +34,7 @@ public class EventListener implements Listener{
// For auto-start function: check if the autoStart is enabled
if (TumbleManager.getPlugin().getConfig().getBoolean("autoStart.enabled")) {
// If so, check if the amount of players has been reached
- if (Bukkit.getWorld(TumbleManager.getGameWorld()).getPlayers().size() == TumbleManager.getPlugin().getConfig().getInt("autoStart.players")) {
+ if (TumbleManager.getPlayersInLobby().size() == TumbleManager.getPlugin().getConfig().getInt("autoStart.players")) {
// The autoStart should begin; pass this to the Game
Game.getGame().autoStart();
}
@@ -47,6 +43,28 @@ public class EventListener implements Listener{
}
@EventHandler
+ public void PlayerChangedWorldEvent(PlayerChangedWorldEvent event) {
+ // If the gameWorld and lobbyWorld is not null, then check
+ if (TumbleManager.getGameWorld() != null && TumbleManager.getLobbyWorld() != null) {
+ // if the player changed to the lobbyWorld, then
+ if (event.getPlayer().getWorld() == Bukkit.getWorld(TumbleManager.getLobbyWorld())) {
+ // run the autostart checks (from above)
+ if (TumbleManager.getPlugin().getConfig().getBoolean("autoStart.enabled")) {
+ if (TumbleManager.getPlayersInLobby().size() == TumbleManager.getPlugin().getConfig().getInt("autoStart.players")) {
+ Game.getGame().autoStart();
+ }
+ }
+ }
+ // also check if the player left to another world
+ else if (event.getFrom() == Bukkit.getWorld(TumbleManager.getLobbyWorld())) {
+ if (Objects.equals(Game.getGame().getGameState(), "waiting")) {
+ Game.getGame().cancelStart();
+ }
+ }
+ }
+ }
+
+ @EventHandler
public void PlayerQuitEvent(PlayerQuitEvent event) {
// On a PlayerQuitEvent, check if the config is set to hide the join/leave messages
// If true, null out the quit message (which just makes it so that there is no message)
@@ -60,7 +78,7 @@ public class EventListener implements Listener{
// Check if the game is in the process of autostarting
if (Objects.equals(Game.getGame().getGameState(), "waiting")) {
// Cancel the autostart
- Bukkit.getServer().getScheduler().cancelTask(Game.getGame().getAutoStartID());
+ Game.getGame().cancelStart();
}
}
}
diff --git a/src/main/java/com/MylesAndMore/tumble/Game.java b/src/main/java/com/MylesAndMore/tumble/Game.java
index 8099c80..8eb9035 100644
--- a/src/main/java/com/MylesAndMore/tumble/Game.java
+++ b/src/main/java/com/MylesAndMore/tumble/Game.java
@@ -39,7 +39,7 @@ public class Game {
// Define a variable for the roundType
private String roundType;
// Define a variable for the autostart PID
- private int autoStartID;
+ private int autoStartID = -1;
// Initialize a new instance of the Random class for use later
private final Random Random = new Random();
@@ -73,6 +73,7 @@ public class Game {
return false;
}
else {
+ Bukkit.getServer().broadcastMessage("game starting");
// Define the gameType
if (Objects.equals(type, "shovels")) {
gameState = "starting";
@@ -145,14 +146,36 @@ public class Game {
return true;
}
+ /**
+ * Initiates an automatic start of a Tumble game
+ */
public void autoStart() {
- gameState = "waiting";
- displayActionbar(lobbyPlayers, ChatColor.GREEN + "Game will begin in 15 seconds!");
- playSound(lobbyPlayers, 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(TumbleManager.getPlugin(), () -> {
- startGame(TumbleManager.getGameType());
- }, 300);
+ Bukkit.getServer().broadcastMessage("autoStart()");
+ // Wait for the player to load in
+ Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(TumbleManager.getPlugin(), () -> {
+ gameState = "waiting";
+ displayActionbar(lobbyPlayers, ChatColor.GREEN + "Game will begin in 15 seconds!");
+ playSound(lobbyPlayers, Sound.BLOCK_NOTE_BLOCK_CHIME, SoundCategory.BLOCKS, 1, 1);
+ Bukkit.getServer().broadcastMessage("title + sound");
+ TumbleManager.getMVWorldManager().loadWorld(TumbleManager.getGameWorld());
+ // 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(TumbleManager.getPlugin(), () -> {
+ Bukkit.getServer().broadcastMessage("startGame");
+ startGame(TumbleManager.getGameType());
+ }, 300);
+ }, 50);
+ }
+
+ /**
+ * Cancels a "waiting" automatic start
+ */
+ public void cancelStart() {
+ Bukkit.getServer().getScheduler().cancelTask(Game.getGame().getAutoStartID());
+ displayActionbar(lobbyPlayers, ChatColor.RED + "Game start cancelled!");
+ playSound(lobbyPlayers, Sound.BLOCK_NOTE_BLOCK_BASS, SoundCategory.BLOCKS, 1, 1);
+ Bukkit.getServer().broadcastMessage("game start cancelled");
+ gameState = null;
+ autoStartID = -1;
}
/**
diff --git a/src/main/java/com/MylesAndMore/tumble/commands/SetAutoStart.java b/src/main/java/com/MylesAndMore/tumble/commands/SetAutoStart.java
index d64573c..0dcb4d9 100644
--- a/src/main/java/com/MylesAndMore/tumble/commands/SetAutoStart.java
+++ b/src/main/java/com/MylesAndMore/tumble/commands/SetAutoStart.java
@@ -1,6 +1,7 @@
package com.MylesAndMore.tumble.commands;
import com.MylesAndMore.tumble.TumbleManager;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -16,30 +17,36 @@ public class SetAutoStart implements CommandExecutor{
// Check if game and lobby worlds are null
if (TumbleManager.getGameWorld() != null) {
if (TumbleManager.getLobbyWorld() != null) {
- // Check the player # argument and parse it into an int
- int args0 = 0;
- try {
- args0 = Integer.parseInt(args[0]);
- } catch (NumberFormatException nfe){
- sender.sendMessage(ChatColor.RED + "Player amount must be a valid number.");
- } catch (Exception e){
- sender.sendMessage(ChatColor.RED + "Invalid player amount.");
- }
// Check the amount of args entered
if (args.length == 2) {
+ // Check the player # argument and parse it into an int
+ int args0;
+ try {
+ args0 = Integer.parseInt(args[0]);
+ } catch (NumberFormatException nfe){
+ sender.sendMessage(ChatColor.RED + "Player amount must be a valid number.");
+ return true;
+ } catch (Exception e){
+ sender.sendMessage(ChatColor.RED + "Invalid player amount.");
+ return true;
+ }
// PlayerAmount & enable/disable were entered
// Check if a playerAmount between 2-8 was entered
if ((args0 >= 2) && (args0 <= 8)) {
if (Objects.equals(args[1], "enable")) {
// Write values to the config
TumbleManager.getPlugin().getConfig().set("autoStart.players", args0);
- TumbleManager.getPlugin().getConfig().set("autoStart.enabled", args[1]);
+ TumbleManager.getPlugin().getConfig().set("autoStart.enabled", true);
TumbleManager.getPlugin().saveConfig();
+ sender.sendMessage(ChatColor.GREEN + "Configuration saved!");
+ sender.sendMessage(ChatColor.GREEN + "Run " + ChatColor.GRAY + "/tumble:reload " + ChatColor.GREEN + "the changes to take effect.");
}
else if (Objects.equals(args[1], "disable")) {
TumbleManager.getPlugin().getConfig().set("autoStart.players", args0);
- TumbleManager.getPlugin().getConfig().set("autoStart.enabled", args[1]);
+ TumbleManager.getPlugin().getConfig().set("autoStart.enabled", false);
TumbleManager.getPlugin().saveConfig();
+ sender.sendMessage(ChatColor.GREEN + "Configuration saved!");
+ sender.sendMessage(ChatColor.GREEN + "Run " + ChatColor.GRAY + "/tumble:reload " + ChatColor.GREEN + "the changes to take effect.");
}
else {
return false;
@@ -51,9 +58,21 @@ public class SetAutoStart implements CommandExecutor{
}
else if (args.length == 1) {
// Only PlayerAmount was entered
+ int args0;
+ try {
+ args0 = Integer.parseInt(args[0]);
+ } catch (NumberFormatException nfe){
+ sender.sendMessage(ChatColor.RED + "Player amount must be a valid number.");
+ return true;
+ } catch (Exception e){
+ sender.sendMessage(ChatColor.RED + "Invalid player amount.");
+ return true;
+ }
if ((args0 >= 2) && (args0 <= 8)) {
TumbleManager.getPlugin().getConfig().set("autoStart.players", args0);
TumbleManager.getPlugin().saveConfig();
+ sender.sendMessage(ChatColor.GREEN + "Configuration saved!");
+ sender.sendMessage(ChatColor.GREEN + "Run " + ChatColor.GRAY + "/tumble:reload " + ChatColor.GREEN + "the changes to take effect.");
}
else {
sender.sendMessage(ChatColor.RED + "Please enter a player amount between two and eight!");
diff --git a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java
index 46ca6ce..d488fec 100644
--- a/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java
+++ b/src/main/java/com/MylesAndMore/tumble/commands/StartGame.java
@@ -20,48 +20,54 @@ 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())) {
- // 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!");
+ // Check if a game is already pending to start
+ if (!Objects.equals(Game.getGame().getGameState(), "waiting")) {
+ 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())) {
+ // 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]);
+ }
}
}
}
- // If there was an argument for gameType, pass that into the startGame method
+ // If load was unsuccessful, give feedback
+ // Note: this should not occur unless the config file was edited externally,
+ // because the plugin prevents adding "worlds" that are not actually present to the config.
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]);
- }
- }
+ sender.sendMessage(ChatColor.RED + "Failed to find a world named " + ChatColor.GRAY + TumbleManager.getGameWorld());
+ sender.sendMessage(ChatColor.RED + "Is the configuration file correct?");
}
}
- // If load was unsuccessful, give feedback
- // Note: this should not occur unless the config file was edited externally,
- // because the plugin prevents adding "worlds" that are not actually present to the config.
else {
- sender.sendMessage(ChatColor.RED + "Failed to find a world named " + ChatColor.GRAY + TumbleManager.getGameWorld());
- sender.sendMessage(ChatColor.RED + "Is the configuration file correct?");
+ sender.sendMessage(ChatColor.RED + "A game is already queued to begin!");
}
}
// Feedback for if there is no gameWorld in the config