diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-03 01:34:15 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-03 01:34:15 -0400 | 
| commit | 8493680d8b53604acf3775ae8176ea6b8a9751a6 (patch) | |
| tree | 5f2a1600ddab3e38d52d2244f4a2377073031c7d /src | |
| parent | eb36fc31873f1b2479b11d9f2612c15df4082d1b (diff) | |
| download | Tumble-8493680d8b53604acf3775ae8176ea6b8a9751a6.tar.gz Tumble-8493680d8b53604acf3775ae8176ea6b8a9751a6.tar.bz2 Tumble-8493680d8b53604acf3775ae8176ea6b8a9751a6.zip | |
More code clean up and comments
Diffstat (limited to 'src')
6 files changed, 93 insertions, 75 deletions
| diff --git a/src/main/java/com/MylesAndMore/Tumble/Main.java b/src/main/java/com/MylesAndMore/Tumble/Main.java index e4c9452..ca1c4f7 100644 --- a/src/main/java/com/MylesAndMore/Tumble/Main.java +++ b/src/main/java/com/MylesAndMore/Tumble/Main.java @@ -5,6 +5,7 @@ import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.config.ConfigManager;  import com.MylesAndMore.Tumble.config.LanguageManager; +import com.MylesAndMore.Tumble.game.Arena;  import org.bstats.bukkit.Metrics;  import org.bukkit.Bukkit; @@ -32,4 +33,14 @@ public class Main extends JavaPlugin{          Bukkit.getServer().getLogger().info("[Tumble] Tumble successfully enabled!");      } + +    @Override +    public void onDisable() { +        // stop running games +        for (Arena a : arenaManager.arenas.values()) { +            if (a.game != null) { +                a.game.stopGame(); +            } +        } +    }  }
\ No newline at end of file diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java index d05155d..121b946 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java @@ -1,6 +1,7 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Game; +import com.MylesAndMore.Tumble.plugin.GameState;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -53,6 +54,10 @@ public class ForceStart implements SubCommand, CommandExecutor, TabCompleter {              return false;          } +        if (game.gameState != GameState.WAITING) { +            return false; +        } +          game.gameStart();          sender.sendMessage(languageManager.fromKey("forcestart-success"));          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 3989960..6b5494d 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java @@ -59,16 +59,17 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {          Game game;          if (args.length < 2 || args[1] == null) { -            // try to infer game type from game taking place in the arena +            // no type specified: try to infer game type from game taking place in the arena              if (arena.game == null) { +                // cant infer if no game is taking place                  sender.sendMessage(languageManager.fromKey("specify-game-type"));                  return false;              } -            else { -                game = arena.game; -            } + +            game = arena.game;          }          else { +            // type specified              GameType type;              switch (args[1]) {                  case "shovels", "shovel"     -> type = GameType.SHOVELS; diff --git a/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java b/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java index 1bc31b3..28fd314 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java @@ -27,28 +27,23 @@ import static com.MylesAndMore.Tumble.Main.plugin;   * An event listener for a game of tumble.   */  public class EventListener implements Listener { -    World gameWorld;      Game game;      /** -     * Create a new EventListener +     * Create a new EventListener for a game. +     * This should be active when the game starts (not while it is waiting)       * @param game The game that the EventListener belongs to.       */      public EventListener(Game game) {          this.game = game; -        this.gameWorld = game.arena.gameSpawn.getWorld();      } -     +      @EventHandler      public void PlayerJoinEvent(PlayerJoinEvent event) {          // Hide/show join message accordingly          if (configManager.HideLeaveJoin) {              event.setJoinMessage(null);          } -        if (event.getPlayer().getWorld() == gameWorld) { -            // Send the player back to the lobby if they try to join in the middle of a game -            event.getPlayer().teleport(Objects.requireNonNull(game.arena.lobby)); -        }      }      @EventHandler @@ -57,15 +52,17 @@ public class EventListener implements Listener {          if (configManager.HideLeaveJoin) {              event.setQuitMessage(null);          } -        if (event.getPlayer().getWorld() == gameWorld) { -            event.getPlayer().teleport(game.arena.lobby); + +        // remove player from game if they leave during a game +        if (game.gamePlayers.contains(event.getPlayer())) {              game.removePlayer(event.getPlayer());          }      }      @EventHandler      public void PlayerDeathEvent(PlayerDeathEvent event) { -        if (game.gamePlayers.contains(event.getEntity())) { +        // inform the game that the player died and respawn them +        if (game.gamePlayers.contains(event.getEntity()) && game.gameState == GameState.RUNNING) {              game.playerDeath(event.getEntity());              Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> event.getEntity().spigot().respawn(), 10);          } @@ -74,51 +71,47 @@ public class EventListener implements Listener {      @EventHandler      public void PlayerItemDamageEvent(PlayerItemDamageEvent event) {          // Remove item damage within games -        if (event.getPlayer().getWorld() == gameWorld) { +        if (game.gamePlayers.contains(event.getPlayer()) && game.gameState == GameState.RUNNING) {              event.setCancelled(true);          }      }      @EventHandler      public void ProjectileLaunchEvent(ProjectileLaunchEvent event) { -        if (game.roundType != GameType.SNOWBALLS) { return; } -        if (event.getEntity().getWorld() == gameWorld -                && event.getEntity() instanceof Snowball -                && event.getEntity().getShooter() instanceof Player player) { +        if (!(event.getEntity().getShooter() instanceof Player p)) { return; } +        if (!game.gamePlayers.contains(p)) { return; } -            // Prevent projectiles (snowballs) from being thrown before the game starts -            if (Objects.equals(game.gameState, GameState.STARTING)) { -                event.setCancelled(true); -            } -            else { +        if (game.roundType == GameType.SNOWBALLS && event.getEntity() instanceof Snowball) { +            if (game.gameState == GameState.RUNNING) {                  // Give players a snowball when they've used one (infinite snowballs) -                Bukkit.getServer().getScheduler().runTask(plugin, () -> player.getInventory().addItem(new ItemStack(Material.SNOWBALL, 1))); +                Bukkit.getServer().getScheduler().runTask(plugin, () -> p.getInventory().addItem(new ItemStack(Material.SNOWBALL, 1))); +            } else { +                // Prevent projectiles (snowballs) from being thrown before the game starts +                event.setCancelled(true);              }          }      }      @EventHandler      public void ProjectileHitEvent(ProjectileHitEvent event) { -        if (event.getHitBlock() == null || game.roundType != GameType.SNOWBALLS) { return; } +        if (!(event.getEntity().getShooter() instanceof Player p)) { return; } +        if (!game.gamePlayers.contains(p)) { return; } +          // Removes blocks that snowballs thrown by players have hit in the game world -        if (event.getHitBlock().getWorld() == gameWorld) { -            if (event.getEntity() instanceof Snowball) { -                if (event.getEntity().getShooter() instanceof Player p) { -                    if (event.getHitBlock() != null) { -                        if (event.getHitBlock().getLocation().distanceSquared(Objects.requireNonNull(game.arena.gameSpawn)) < 579) { -                            p.playEffect( -                                event.getHitBlock().getLocation(), -                                Effect.STEP_SOUND, -                                event.getHitBlock().getType()); -                            event.getHitBlock().setType(Material.AIR); -                        } -                    } -                    else if (event.getHitEntity() != null) { -                        if (event.getHitEntity() instanceof Player hitPlayer) { -                            // Also cancel any knockback -                            Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> hitPlayer.setVelocity(new Vector())); -                        } -                    } +        if (game.roundType == GameType.SNOWBALLS && event.getEntity() instanceof Snowball) { +            if (event.getHitBlock() != null) { +                if (event.getHitBlock().getLocation().distanceSquared(game.arena.gameSpawn) < 579) { +                    p.playEffect( +                            event.getHitBlock().getLocation(), +                            Effect.STEP_SOUND, +                            event.getHitBlock().getType()); +                    event.getHitBlock().setType(Material.AIR); +                } +            } +            else if (event.getHitEntity() != null) { +                if (event.getHitEntity() instanceof Player hitPlayer) { +                    // Also cancel any knockback +                    Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> hitPlayer.setVelocity(new Vector()));                  }              }          } @@ -126,22 +119,21 @@ public class EventListener implements Listener {      @EventHandler      public void PlayerDropItemEvent(PlayerDropItemEvent event) { -        // Don't allow items to drop in the game world -        if (event.getPlayer().getWorld() == gameWorld) { +        // Don't allow items to drop during the game +        if (game.gamePlayers.contains(event.getPlayer())) {              event.setCancelled(true);          }      }      @EventHandler      public void PlayerMoveEvent(PlayerMoveEvent event) { +        if (!game.gamePlayers.contains(event.getPlayer())) { return; }          // Cancel movement if the game is starting (so players can't move before the game starts) -        if (Objects.equals(game.gameState, GameState.STARTING) -                && event.getPlayer().getWorld().equals(gameWorld) -                && !equalPosition(event.getFrom(),event.getTo())) { +        if (Objects.equals(game.gameState, GameState.STARTING) && !equalPosition(event.getFrom(),event.getTo())) {              event.setCancelled(true);          }          // kill player if they are below a Y level -        if (event.getPlayer().getWorld().equals(gameWorld) && game.arena.killAtY != null) { +        if (game.arena.killAtY != null && game.gameState == GameState.RUNNING) {              if (event.getPlayer().getLocation().getY() <= game.arena.killAtY) {                  event.getPlayer().setHealth(0);              } @@ -151,17 +143,17 @@ public class EventListener implements Listener {      @EventHandler      public void BlockDropItemEvent(BlockDropItemEvent event) {          // If a block was going to drop an item (ex. snow dropping snowballs) in the game world, cancel it -        if (event.getBlock().getWorld() == gameWorld) { +        if (event.getBlock().getWorld() == game.arena.gameSpawn.getWorld()) {              event.setCancelled(true);          }      }      @EventHandler      public void PlayerInteractEvent(PlayerInteractEvent event) { -//        if (game.roundType != GameType.SHOVELS) {return;} -        // Remove blocks when clicked in the game world (all gamemodes require this functionality) -        if (event.getAction() == Action.LEFT_CLICK_BLOCK -                && Objects.requireNonNull(event.getClickedBlock()).getWorld() == gameWorld) { +        if (!game.gamePlayers.contains(event.getPlayer())) { return; } + +        // Remove blocks when clicked in the game world (all game types require this functionality) +        if (event.getAction() == Action.LEFT_CLICK_BLOCK && event.getClickedBlock() != null) {              event.getPlayer().playEffect(                      event.getClickedBlock().getLocation(),                      Effect.STEP_SOUND, @@ -175,38 +167,38 @@ public class EventListener implements Listener {      public void BlockBreakEvent(BlockBreakEvent event) {          // This just doesn't allow blocks to break in the gameWorld; the PlayerInteractEvent will take care of everything          // This prevents any weird client-server desync -        if (event.getBlock().getWorld() == gameWorld) { +        if (game.gamePlayers.contains(event.getPlayer())) {              event.setCancelled(true);          }      }      @EventHandler      public void FoodLevelChangeEvent(FoodLevelChangeEvent event) { +        if (!(event.getEntity() instanceof Player p)) { return; } +        if (!game.gamePlayers.contains(p)) { return; }          // INFINITE FOOD (YAY!!!!) -        if (event.getEntity().getWorld() == gameWorld) { -            event.setCancelled(true); -        } +        event.setCancelled(true);      }      @EventHandler      public void EntityDamageEvent(EntityDamageEvent event) { +        if (!(event.getEntity() instanceof Player p)) { return; } +        if (!game.gamePlayers.contains(p)) { return; } +          // Check to see if a player got damaged by another entity (player, snowball, etc) in the gameWorld, if so, cancel it -        if (event.getEntity().getWorld() == gameWorld) { -            if (event.getEntity() instanceof Player) { -                if (event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK -                        || event.getCause() == EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK -                        || event.getCause() == EntityDamageEvent.DamageCause.FALL) { -                    event.setCancelled(true); -                } -            } +        if (event.getCause() == EntityDamageEvent.DamageCause.ENTITY_ATTACK +                || event.getCause() == EntityDamageEvent.DamageCause.ENTITY_SWEEP_ATTACK +                || event.getCause() == EntityDamageEvent.DamageCause.FALL) { +            event.setCancelled(true);          }      }      @EventHandler      public void InventoryDragEvent(InventoryDragEvent event) { -        if (event.getWhoClicked().getWorld() == gameWorld) { -            event.setCancelled(true); -        } +        if (!(event.getWhoClicked() instanceof Player p)) { return; } +        if (!game.gamePlayers.contains(p)) { return; } +        // Disable inventory dragging +        event.setCancelled(true);      }      @EventHandler @@ -217,8 +209,13 @@ public class EventListener implements Listener {          }      } -    // TODO: stop tile drops for pistons, stop player from getting stuck in the waiting area after they leave - +    /** +     * Check to see if two locations are in the same place. +     * A location also includes where the player is facing which is why this is used instead of .equals() +     * @param l1 The first location +     * @param l2 The second location +     * @return True if they are in the same place +     */      public static boolean equalPosition(Location l1, @Nullable Location l2) {          if (l2 == null) {              return true; diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Game.java b/src/main/java/com/MylesAndMore/Tumble/game/Game.java index e32ba92..f46d907 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/Game.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/Game.java @@ -226,6 +226,8 @@ public class Game {                  // teleport player back and restore inventory                  for (Player p : gamePlayers) { +                    p.getInventory().clear(); +                    p.setGameMode(GameMode.SURVIVAL);                      if (p == winner && arena.winnerLobby != null) {                          p.teleport(arena.winnerLobby);                      } @@ -283,6 +285,7 @@ public class Game {              // teleport player back and restore inventory              if (arena.waitArea != null) {                  p.getInventory().clear(); +                p.setGameMode(GameMode.SURVIVAL);                  p.teleport(arena.lobby);                  if (inventories.containsKey(p)) {                      p.getInventory().setContents(inventories.get(p)); @@ -297,6 +300,7 @@ public class Game {              // teleport player back and restore inventory              p.getInventory().clear(); +            p.setGameMode(GameMode.SURVIVAL);              p.teleport(arena.lobby);              if (inventories.containsKey(p)) {                  p.getInventory().setContents(inventories.get(p)); diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Layers.java b/src/main/java/com/MylesAndMore/Tumble/game/Layers.java index 05e289a..99f3aef 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/Layers.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/Layers.java @@ -146,13 +146,13 @@ public class Layers {              List<Material> gen3 = new ArrayList<>() {{                  add(Material.PACKED_ICE);                  add(Material.PACKED_ICE); -                add(Material.NOTE_BLOCK); +                add(Material.JUKEBOX);                  add(Material.TNT);                  add(Material.LIGHT_BLUE_CONCRETE);                  add(Material.GLASS);                  add(Material.PACKED_ICE);                  add(Material.PACKED_ICE); -                add(Material.NOTE_BLOCK); +                add(Material.JUKEBOX);                  add(Material.TNT);                  add(Material.LIGHT_BLUE_CONCRETE);                  add(Material.GLASS); | 
