diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-07-01 01:08:26 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-07-01 01:08:26 -0400 | 
| commit | e1c1d130937c0e56535f8ab20fa0b2719b759a01 (patch) | |
| tree | 74868e93516a5b6dabbf17a47980113c5bfbde60 | |
| parent | 4a48e1a3a32f9a3b0b72be897377443c65ea55e8 (diff) | |
| download | Tumble-e1c1d130937c0e56535f8ab20fa0b2719b759a01.tar.gz Tumble-e1c1d130937c0e56535f8ab20fa0b2719b759a01.tar.bz2 Tumble-e1c1d130937c0e56535f8ab20fa0b2719b759a01.zip | |
config file validation, and non static managers
21 files changed, 258 insertions, 198 deletions
| @@ -1,16 +1,9 @@  ## temporary stuff (not ready for merge) -### known issues -- [x] file writing not fully implemented (just need to call ArenaManager.write() somewhere) -- [ ] issues with join command -- [ ] no config validation -  ### todo -- [x] finish og-guide +- [ ] separate waiting state code +- [ ] fix join command  - [ ] improve inventory saving  - [ ] improve Game.leave() method -- [ ] perhaps replace spectator mode with survival flight -- [ ] clean up and make config managers uniform in structure -- [ ] improve language flow  - [ ] put javadoc comments everywhere  # Tumble   diff --git a/src/main/java/com/MylesAndMore/Tumble/Main.java b/src/main/java/com/MylesAndMore/Tumble/Main.java index eff7a10..067b839 100644 --- a/src/main/java/com/MylesAndMore/Tumble/Main.java +++ b/src/main/java/com/MylesAndMore/Tumble/Main.java @@ -15,13 +15,17 @@ import java.util.Objects;  public class Main extends JavaPlugin{      public static Main plugin; +    public static LanguageManager languageManager; +    public static ArenaManager arenaManager; +    public static ConfigManager configManager; +      @Override      public void onEnable() {          plugin = this; -        LanguageManager.init(); -        ArenaManager.init(); -        ConfigManager.init(); +        languageManager = new LanguageManager(); +        arenaManager = new ArenaManager(); +        configManager = new ConfigManager();          Objects.requireNonNull(this.getCommand("tumble")).setExecutor(new Tumble());          new Metrics(this, 16940); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Create.java b/src/main/java/com/MylesAndMore/Tumble/commands/Create.java index aa39db3..d21f8a4 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Create.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Create.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -13,6 +11,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class Create implements SubCommand, CommandExecutor, TabCompleter {      @Override      public String getCommandName() { @@ -27,14 +28,14 @@ public class Create implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        ArenaManager.arenas.put(arenaName, new Arena(arenaName)); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("create-success")); +        arenaManager.arenas.put(arenaName, new Arena(arenaName)); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("create-success"));          return true;      } diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java index 905e5da..2d39c83 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.ArrayList;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class ForceStart implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -31,35 +32,35 @@ public class ForceStart implements SubCommand, CommandExecutor, TabCompleter {          Game game;          if (args.length < 1 || args[0] == null) { -            game = ArenaManager.findGamePlayerIsIn((Player)sender); +            game = arenaManager.findGamePlayerIsIn((Player)sender);              if (game == null) { -                sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +                sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));                  return false;              }          }          else {              String arenaName = args[0]; -            if (!ArenaManager.arenas.containsKey(arenaName)) { -                sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +            if (!arenaManager.arenas.containsKey(arenaName)) { +                sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));                  return false;              } -            game = ArenaManager.arenas.get(arenaName).game; +            game = arenaManager.arenas.get(arenaName).game;          }          if (game == null) { -            sender.sendMessage(LanguageManager.fromKey("no-game-in-arena")); +            sender.sendMessage(languageManager.fromKey("no-game-in-arena"));              return false;          }          game.gameStart(); -        sender.sendMessage(LanguageManager.fromKey("forcestart-success")); +        sender.sendMessage(languageManager.fromKey("forcestart-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return new ArrayList<>();      } diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java index 3d98d91..5ca856b 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.ArrayList;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class ForceStop implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -31,35 +32,35 @@ public class ForceStop implements SubCommand, CommandExecutor, TabCompleter {          Game game;          if (args.length < 1 || args[0] == null) { -            game = ArenaManager.findGamePlayerIsIn((Player)sender); +            game = arenaManager.findGamePlayerIsIn((Player)sender);              if (game == null) { -                sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +                sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));                  return false;              }          }          else {              String arenaName = args[0]; -            if (!ArenaManager.arenas.containsKey(arenaName)) { -                sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +            if (!arenaManager.arenas.containsKey(arenaName)) { +                sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));                  return false;              } -            game = ArenaManager.arenas.get(arenaName).game; +            game = arenaManager.arenas.get(arenaName).game;          }          if (game == null) { -            sender.sendMessage(LanguageManager.fromKey("no-game-in-arena")); +            sender.sendMessage(languageManager.fromKey("no-game-in-arena"));              return false;          }          game.gameEnd(); -        sender.sendMessage(LanguageManager.fromKey("forcestop-success")); +        sender.sendMessage(languageManager.fromKey("forcestop-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return new ArrayList<>();      } diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java index a887c99..3bda96c 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.game.Game;  import com.MylesAndMore.Tumble.plugin.GameState;  import com.MylesAndMore.Tumble.plugin.GameType; @@ -21,6 +19,9 @@ import java.util.List;  import java.util.Objects;  import java.util.stream.Collectors; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class Join implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -37,25 +38,25 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          } -        if (ArenaManager.findGamePlayerIsIn((Player)sender) != null) { -            sender.sendMessage(LanguageManager.fromKey("already-in-game")); +        if (arenaManager.findGamePlayerIsIn((Player)sender) != null) { +            sender.sendMessage(languageManager.fromKey("already-in-game"));          }          if (args.length < 1 || args[0] == null) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) +        if (!arenaManager.arenas.containsKey(arenaName))          { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%", arenaName)); +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%", arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          Game game;          if (args.length < 2 || args[1] == null) { @@ -74,7 +75,7 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {                  case "snowballs", "snowball" -> type = GameType.SNOWBALLS;                  case "mix", "mixed"          -> type = GameType.MIXED;                  default                      -> { -                    sender.sendMessage(LanguageManager.fromKey("invalid-type")); +                    sender.sendMessage(languageManager.fromKey("invalid-type"));                      return false;                  }              } @@ -88,7 +89,7 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {                      game = arena.game;                  }                  else { -                    sender.sendMessage(LanguageManager.fromKey("another-type-in-arena") +                    sender.sendMessage(languageManager.fromKey("another-type-in-arena")                              .replace("%type%",type.toString())                              .replace("%arena%",arenaName));                      return false; @@ -97,12 +98,12 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {          }          if (game.gameState != GameState.WAITING) { -            sender.sendMessage(LanguageManager.fromKey("game-in-progress")); +            sender.sendMessage(languageManager.fromKey("game-in-progress"));              return false;          }          game.addPlayer((Player)sender); -        sender.sendMessage(LanguageManager.fromKey("join-success") +        sender.sendMessage(languageManager.fromKey("join-success")                  .replace("%type%", game.type.toString())                  .replace("%arena%", arena.name));          return true; @@ -111,7 +112,7 @@ public class Join implements SubCommand, CommandExecutor, TabCompleter {      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          if (args.length == 2) {              return Arrays.stream(GameType.values()).map(Objects::toString).collect(Collectors.toList()); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java index 0250cc6..f5a4eeb 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.ArrayList;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class Leave implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -30,18 +31,18 @@ public class Leave implements SubCommand, CommandExecutor, TabCompleter {      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          } -        Game game = ArenaManager.findGamePlayerIsIn((Player)sender); +        Game game = arenaManager.findGamePlayerIsIn((Player)sender);          if (game == null) { -            sender.sendMessage(LanguageManager.fromKey("no-game-in-arena")); +            sender.sendMessage(languageManager.fromKey("no-game-in-arena"));              return false;          }          game.removePlayer((Player) sender); -        sender.sendMessage(LanguageManager.fromKey("leave-success") +        sender.sendMessage(languageManager.fromKey("leave-success")                  .replace("%arena%", game.arena.name)                  .replace("%type%", game.type.toString()));          return true; diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java b/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java index 66535d5..7d6041e 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -13,7 +11,7 @@ import org.jetbrains.annotations.NotNull;  import java.util.ArrayList;  import java.util.List; -import static com.MylesAndMore.Tumble.Main.plugin; +import static com.MylesAndMore.Tumble.Main.*;  public class Reload implements SubCommand, CommandExecutor, TabCompleter { @@ -30,14 +28,14 @@ public class Reload implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { -        for (Arena a : ArenaManager.arenas.values()) { +        for (Arena a : arenaManager.arenas.values()) {              if (a.game != null) {                  a.game.gameEnd();              }          }          plugin.onEnable(); -        sender.sendMessage(LanguageManager.fromKey("reload-success")); +        sender.sendMessage(languageManager.fromKey("reload-success"));          return true;      } diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java b/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java index 32ee232..2d6f9eb 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java @@ -1,7 +1,5 @@  package com.MylesAndMore.Tumble.commands; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -12,6 +10,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class Remove implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -27,26 +28,26 @@ public class Remove implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        ArenaManager.arenas.remove(arenaName); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("remove-success")); +        arenaManager.arenas.remove(arenaName); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("remove-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java index 783434c..b98d186 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class SetGameSpawn implements SubCommand, CommandExecutor, TabCompleter {      @Override      public String getCommandName() { @@ -28,32 +29,32 @@ public class SetGameSpawn implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          }          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          arena.gameSpawn = ((Player)sender).getLocation(); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("set-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYLevel.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYLevel.java index fec52ea..c6f7891 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYLevel.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYLevel.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class SetKillYLevel implements SubCommand, CommandExecutor, TabCompleter {      @Override @@ -29,32 +30,32 @@ public class SetKillYLevel implements SubCommand, CommandExecutor, TabCompleter      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          }          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          arena.killAtY = ((int) ((Player) sender).getLocation().getY()); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("set-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java index e50b3e0..85e9fd8 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class SetLobby implements SubCommand, CommandExecutor, TabCompleter {      @Override      public String getCommandName() { @@ -28,32 +29,32 @@ public class SetLobby implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          }          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          arena.lobby = ((Player)sender).getLocation(); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("set-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java index d251d3f..be97431 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class SetWaitArea implements SubCommand, CommandExecutor, TabCompleter {      @Override      public String getCommandName() { @@ -28,32 +29,32 @@ public class SetWaitArea implements SubCommand, CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          }          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          arena.waitArea = ((Player)sender).getLocation(); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("set-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java index 64a0386..6e4550f 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java @@ -1,8 +1,6 @@  package com.MylesAndMore.Tumble.commands;  import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.config.LanguageManager; -import com.MylesAndMore.Tumble.config.ArenaManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -14,6 +12,9 @@ import org.jetbrains.annotations.NotNull;  import java.util.Collections;  import java.util.List; +import static com.MylesAndMore.Tumble.Main.arenaManager; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class SetWinnerLobby implements SubCommand, CommandExecutor, TabCompleter {      @Override      public String getCommandName() { @@ -28,32 +29,32 @@ public class SetWinnerLobby implements SubCommand, CommandExecutor, TabCompleter      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!(sender instanceof Player)) { -            sender.sendMessage(LanguageManager.fromKey("not-for-console")); +            sender.sendMessage(languageManager.fromKey("not-for-console"));              return false;          }          if (args.length == 0 || args[0] == null || args[0].isEmpty()) { -            sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); +            sender.sendMessage(languageManager.fromKey("missing-arena-parameter"));              return false;          }          String arenaName = args[0]; -        if (!ArenaManager.arenas.containsKey(arenaName)) { -            sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); +        if (!arenaManager.arenas.containsKey(arenaName)) { +            sender.sendMessage(languageManager.fromKey("invalid-arena").replace("%arena%",arenaName));              return false;          } -        Arena arena = ArenaManager.arenas.get(arenaName); +        Arena arena = arenaManager.arenas.get(arenaName);          arena.winnerLobby = ((Player)sender).getLocation(); -        ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        arenaManager.WriteConfig(); +        sender.sendMessage(languageManager.fromKey("set-success"));          return true;      }      @Override      public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (args.length == 1) { -            return ArenaManager.arenas.keySet().stream().toList(); +            return arenaManager.arenas.keySet().stream().toList();          }          return Collections.emptyList(); diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java b/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java index f1d2e38..2cf5b90 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java @@ -1,6 +1,5 @@  package com.MylesAndMore.Tumble.commands; -import com.MylesAndMore.Tumble.config.LanguageManager;  import com.MylesAndMore.Tumble.plugin.SubCommand;  import org.bukkit.command.Command;  import org.bukkit.command.CommandExecutor; @@ -10,6 +9,8 @@ import org.jetbrains.annotations.NotNull;  import java.util.*; +import static com.MylesAndMore.Tumble.Main.languageManager; +  public class Tumble implements CommandExecutor, TabCompleter {      private static final Map<String, SubCommand> subCommands = Map.ofEntries( @@ -30,14 +31,14 @@ public class Tumble implements CommandExecutor, TabCompleter {      @Override      public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {          if (!subCommands.containsKey(args[0])) { -            sender.sendMessage(LanguageManager.fromKey("unknown-command")); +            sender.sendMessage(languageManager.fromKey("unknown-command"));              return true;          }          var subCmd = subCommands.get(args[0]);          if (!sender.hasPermission(subCmd.getPermission())) { -            sender.sendMessage(LanguageManager.fromKey("no-permission").replace("%permission%", subCmd.getPermission())); +            sender.sendMessage(languageManager.fromKey("no-permission").replace("%permission%", subCmd.getPermission()));              return false;          } diff --git a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java index 911b02e..aa29cf1 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java @@ -2,6 +2,7 @@ package com.MylesAndMore.Tumble.config;  import com.MylesAndMore.Tumble.game.Arena;  import com.MylesAndMore.Tumble.game.Game; +import com.MylesAndMore.Tumble.plugin.CustomConfig;  import com.MylesAndMore.Tumble.plugin.Result;  import org.bukkit.Bukkit;  import org.bukkit.Location; @@ -9,6 +10,7 @@ import org.bukkit.World;  import org.bukkit.configuration.ConfigurationSection;  import org.bukkit.configuration.file.FileConfiguration;  import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull;  import org.jetbrains.annotations.Nullable;  import java.util.HashMap; @@ -18,20 +20,17 @@ import static com.MylesAndMore.Tumble.Main.plugin;  public class ArenaManager { -    public static HashMap<String, Arena> arenas; +    public HashMap<String, Arena> arenas; -    private static final CustomConfig customConfig = new CustomConfig("arenas.yml"); -    private static final FileConfiguration config = customConfig.getConfig(); +    private final CustomConfig arenasYml = new CustomConfig("arenas.yml"); +    private final FileConfiguration config = arenasYml.getConfig(); -    public static void init() { -        customConfig.saveDefaultConfig(); +    public ArenaManager() { +        arenasYml.saveDefaultConfig();          readConfig();      } -    /** -     * Reads config file and populates values above -     */ -    public static void readConfig() { +    public void readConfig() {          // arenas          ConfigurationSection arenasSection = config.getConfigurationSection("arenas"); @@ -79,17 +78,28 @@ public class ArenaManager {          }      } -    public static void WriteConfig() { +    public void WriteConfig() {          config.set("arenas", null); // clear everything          for (Arena arena: arenas.values()) { -            WriteWorld("arenas." + arena.name + ".game-spawn", arena.gameSpawn); -            WriteWorld("arenas." + arena.name + ".lobby", arena.lobby); -            WriteWorld("arenas." + arena.name + ".winner-lobby", arena.winnerLobby); -            WriteWorld("arenas." + arena.name + ".wait-area", arena.waitArea); +            if (arena.killAtY != null) { +                config.set("arenas." + arena.name + ".kill-at-y", arena.killAtY); +            } +            if (arena.gameSpawn != null) { +                WriteWorld("arenas." + arena.name + ".game-spawn", arena.gameSpawn); +            } +            if (arena.lobby != null) { +                WriteWorld("arenas." + arena.name + ".lobby", arena.lobby); +            } +            if (arena.winnerLobby != null) { +                WriteWorld("arenas." + arena.name + ".winner-lobby", arena.winnerLobby); +            } +            if (arena.waitArea != null) { +                WriteWorld("arenas." + arena.name + ".wait-area", arena.waitArea); +            }          } -        customConfig.saveConfig(); +        arenasYml.saveConfig();      } @@ -98,7 +108,7 @@ public class ArenaManager {       * @param p Player to search for       * @return the game the player is in, or null if not found       */ -    public static Game findGamePlayerIsIn(Player p) { +    public Game findGamePlayerIsIn(Player p) {          for (Arena a : arenas.values()) {              if (a.game != null && a.game.gamePlayers.contains(p)) {                  return a.game; @@ -119,7 +129,7 @@ public class ArenaManager {       *   success = true and a world       *   success = false and an error string       */ -    private static Result<Location> readWorld(@Nullable ConfigurationSection section) { +    private Result<Location> readWorld(@Nullable ConfigurationSection section) {          if (section == null) {              return new Result<>("Section missing from config"); @@ -145,10 +155,7 @@ public class ArenaManager {          return new Result<>(new Location(world,x,y,z));      } -    private static void WriteWorld(String path, @Nullable Location location) { -        if (location == null) { -            return; -        } +    private void WriteWorld(String path, @NotNull Location location) {          ConfigurationSection section = config.getConfigurationSection(path); diff --git a/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java b/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java index 322f949..b5fbba6 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java @@ -1,20 +1,41 @@  package com.MylesAndMore.Tumble.config; -import org.bukkit.configuration.file.FileConfiguration; +import com.MylesAndMore.Tumble.plugin.CustomConfig; +import org.bukkit.configuration.Configuration; + +import java.util.Objects; + +import static com.MylesAndMore.Tumble.Main.plugin;  public class ConfigManager { -    private static final CustomConfig customConfig = new CustomConfig("config.yml"); -    private static final FileConfiguration config = customConfig.getConfig(); +    private final CustomConfig configYml = new CustomConfig("config.yml"); +    private final Configuration config = configYml.getConfig(); +    private final Configuration defaultConfig = Objects.requireNonNull(config.getDefaults()); + -    public static boolean HideLeaveJoin; -    public static int waitDuration; +    public boolean HideLeaveJoin; +    public int waitDuration; -    public static void init() { -        customConfig.saveDefaultConfig(); +    public ConfigManager() { +        configYml.saveDefaultConfig(); +        validate();          readConfig();      } -    public static void readConfig() { +    public void validate() { +        boolean invalid = false; +        for (String key : defaultConfig.getKeys(true)) { +            if (!config.contains(key,true)) { +                plugin.getLogger().warning("config.yml is missing key '" + key + "'."); +                invalid = true; +            } +        } +        if (invalid) { +            plugin.getLogger().severe("Errors were found in config.yml, default values will be used."); +        } +    } + +    public void readConfig() {          HideLeaveJoin = config.getBoolean("hide-join-leave-messages", false);          waitDuration = config.getInt("wait-duration", 15);      } diff --git a/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java b/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java index f214902..cd96551 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java @@ -1,27 +1,42 @@  package com.MylesAndMore.Tumble.config; +import com.MylesAndMore.Tumble.plugin.CustomConfig;  import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.Configuration; + +import java.util.Objects;  import static com.MylesAndMore.Tumble.Main.plugin;  public class LanguageManager { -    private static final CustomConfig customConfig = new CustomConfig("language.yml"); -    private static final FileConfiguration config = customConfig.getConfig(); +    private final CustomConfig languageYml = new CustomConfig("language.yml"); +    private final Configuration config = languageYml.getConfig(); +    private final Configuration defaultConfig = Objects.requireNonNull(config.getDefaults()); + +    public LanguageManager() { +        languageYml.saveDefaultConfig(); +        validate(); +    } -    public static void init() { -        customConfig.saveDefaultConfig(); +    public void validate() { +        boolean invalid = false; +        for (String key : defaultConfig.getKeys(true)) { +            if (!config.contains(key,true)) { +                plugin.getLogger().warning("language.yml is missing key '" + key + "'."); +                invalid = true; +            } +        } +        if (invalid) { +            plugin.getLogger().severe("Errors were found in language.yml, default values will be used."); +        }      } -    public static String fromKey(String key) { +    public String fromKey(String key) {          return fromKeyNoPrefix("prefix") + fromKeyNoPrefix(key);      } -    public static String fromKeyNoPrefix(String key) { -        String tmp = config.getString(key, "LANG_ERR"); -        if (tmp.equals("LANG_ERR")) { -            plugin.getLogger().severe("There was an error getting key '"+ key +"' from language.yml"); -        } -        return ChatColor.translateAlternateColorCodes('&',tmp); +    public String fromKeyNoPrefix(String key) { +        String val = config.getString(key, "LANG_ERR"); +        return ChatColor.translateAlternateColorCodes('&',val);      }  } diff --git a/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java b/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java index 36d02b6..7abf774 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/EventListener.java @@ -2,8 +2,6 @@ package com.MylesAndMore.Tumble.game;  import java.util.Objects; -import com.MylesAndMore.Tumble.config.ArenaManager; -import com.MylesAndMore.Tumble.config.ConfigManager;  import com.MylesAndMore.Tumble.plugin.GameState;  import com.MylesAndMore.Tumble.plugin.GameType;  import org.bukkit.*; @@ -22,6 +20,7 @@ import org.bukkit.util.Vector;  import org.bukkit.inventory.ItemStack;  import org.jetbrains.annotations.Nullable; +import static com.MylesAndMore.Tumble.Main.configManager;  import static com.MylesAndMore.Tumble.Main.plugin;  /** @@ -39,7 +38,7 @@ public class EventListener implements Listener {      @EventHandler      public void PlayerJoinEvent(PlayerJoinEvent event) {          // Hide/show join message accordingly -        if (ConfigManager.HideLeaveJoin) { +        if (configManager.HideLeaveJoin) {              event.setJoinMessage(null);          }          if (event.getPlayer().getWorld() == gameWorld) { @@ -51,7 +50,7 @@ public class EventListener implements Listener {      @EventHandler      public void PlayerQuitEvent(PlayerQuitEvent event) {          // Hide/show leave message accordingly -        if (ConfigManager.HideLeaveJoin) { +        if (configManager.HideLeaveJoin) {              event.setQuitMessage(null);          }          if (event.getPlayer().getWorld() == gameWorld) { diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Game.java b/src/main/java/com/MylesAndMore/Tumble/game/Game.java index dd13b31..5988180 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/Game.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/Game.java @@ -1,8 +1,5 @@  package com.MylesAndMore.Tumble.game; -import com.MylesAndMore.Tumble.config.ArenaManager; -import com.MylesAndMore.Tumble.config.ConfigManager; -import com.MylesAndMore.Tumble.config.LanguageManager;  import com.MylesAndMore.Tumble.plugin.GameState;  import com.MylesAndMore.Tumble.plugin.GameType;  import net.md_5.bungee.api.ChatMessageType; @@ -18,7 +15,7 @@ import org.jetbrains.annotations.Nullable;  import java.util.*; -import static com.MylesAndMore.Tumble.Main.plugin; +import static com.MylesAndMore.Tumble.Main.*;  /**   * Everything relating to the Tumble game @@ -62,7 +59,9 @@ public class Game {          Bukkit.getServer().getPluginManager().registerEvents(eventListener, plugin);          for (Player p : gamePlayers) { -            inventories.put(p, p.getInventory().getContents()); +            if (!inventories.containsKey(p)) { +                inventories.put(p, p.getInventory().getContents()); +            }          }          roundStart(); @@ -115,7 +114,7 @@ public class Game {                  gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {                      clearInventories(gamePlayers);                      giveItems(gamePlayers, new ItemStack(Material.SNOWBALL)); -                    displayActionbar(gamePlayers, LanguageManager.fromKeyNoPrefix("showdown")); +                    displayActionbar(gamePlayers, languageManager.fromKeyNoPrefix("showdown"));                      playSound(gamePlayers, Sound.ENTITY_ELDER_GUARDIAN_CURSE, SoundCategory.HOSTILE, 1, 1);                      // End the round in another 2m30s                      gameID = Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this::roundEnd, 3000); @@ -154,12 +153,12 @@ public class Game {              }              // If that player doesn't have three wins, nobody else does, so we need another round              else { -                displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("round-over"), LanguageManager.fromKeyNoPrefix("round-winner").replace("%winner%", winner.getDisplayName()), 5, 60, 5); +                displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("round-over"), languageManager.fromKeyNoPrefix("round-winner").replace("%winner%", winner.getDisplayName()), 5, 60, 5);                  Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this::roundStart, 100);              }          }          else { -            displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("round-over"), LanguageManager.fromKeyNoPrefix("round-draw"), 5, 60, 5); +            displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("round-over"), languageManager.fromKeyNoPrefix("round-draw"), 5, 60, 5);              Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, this::roundStart, 100);          }      } @@ -175,9 +174,9 @@ public class Game {              Player winner = getPlayerWithMostWins(gameWins);              if (winner != null) { -                displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("game-over"), LanguageManager.fromKeyNoPrefix("game-winner").replace("%winner%",winner.getDisplayName()), 5, 60, 5); +                displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("game-over"), languageManager.fromKeyNoPrefix("game-winner").replace("%winner%",winner.getDisplayName()), 5, 60, 5);              } -            displayActionbar(gamePlayers, LanguageManager.fromKeyNoPrefix("lobby-in-10")); +            displayActionbar(gamePlayers, languageManager.fromKeyNoPrefix("lobby-in-10"));              // Wait 10s (200t), then              Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { @@ -214,15 +213,28 @@ public class Game {       * @param p Player to remove       */      public void removePlayer(Player p) { -        gamePlayers.remove(p); -        if (gamePlayers.size() < 2) { -            gameEnd(); + +        if (gameState == GameState.WAITING) { +            gamePlayers.remove(p); +            if (gamePlayers.size() < 2) { +                displayActionbar(gamePlayers, languageManager.fromKeyNoPrefix("waiting-for-players")); +            } + +            if (arena.waitArea != null) { +                p.teleport(arena.lobby); +            }          } -        p.getInventory().clear(); -        if (inventories.containsKey(p)) { -            p.getInventory().setContents(inventories.get(p)); +        else { +            gamePlayers.remove(p); +            if (gamePlayers.size() < 2) { +                gameEnd(); +            } +            p.getInventory().clear(); +            if (inventories.containsKey(p)) { +                p.getInventory().setContents(inventories.get(p)); +            } +            p.teleport(arena.lobby);          } -        p.teleport(arena.lobby);      }      /** @@ -234,6 +246,7 @@ public class Game {          gamePlayers.add(p);          // save inventory          if (arena.waitArea != null) { +            inventories.put(p,p.getInventory().getContents());              p.teleport(arena.waitArea);              p.getInventory().clear();          } @@ -241,7 +254,7 @@ public class Game {              autoStart();          }          else { -            displayActionbar(Collections.singletonList(p), LanguageManager.fromKeyNoPrefix("waiting-for-players")); +            displayActionbar(Collections.singletonList(p), languageManager.fromKeyNoPrefix("waiting-for-players"));          }      } @@ -250,9 +263,9 @@ public class Game {       */      public void autoStart() {          // Wait for the player to load in -        int waitDuration = ConfigManager.waitDuration; +        int waitDuration = configManager.waitDuration;          Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> { -            displayActionbar(gamePlayers, LanguageManager.fromKeyNoPrefix("time-till-start").replace("%wait%",waitDuration+"")); +            displayActionbar(gamePlayers, languageManager.fromKeyNoPrefix("time-till-start").replace("%wait%",waitDuration+""));              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::gameStart, waitDuration * 20L); @@ -307,16 +320,16 @@ public class Game {       */      private void countdown(Runnable doAfter) {          playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); -        displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("count-3"), null, 3, 10, 7); +        displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("count-3"), null, 3, 10, 7);          Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {              playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); -            displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("count-2"), null, 3, 10, 7); +            displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("count-2"), null, 3, 10, 7);              Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {                  playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 1); -                displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("count-1"), null, 3, 10, 7); +                displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("count-1"), null, 3, 10, 7);                  Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {                      playSound(gamePlayers, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, SoundCategory.NEUTRAL, 5, 2); -                    displayTitles(gamePlayers, LanguageManager.fromKeyNoPrefix("count-go"), null, 1, 5, 1); +                    displayTitles(gamePlayers, languageManager.fromKeyNoPrefix("count-go"), null, 1, 5, 1);                      doAfter.run();                  }, 20);              }, 20); @@ -405,9 +418,7 @@ public class Game {       * @param pitch The pitch of the sound       */      private void playSound(@NotNull List<Player> players, @NotNull Sound sound, @NotNull SoundCategory category, float volume, float pitch) { -        for (Player aPlayer : players) { -            aPlayer.playSound(aPlayer.getLocation(), sound, category, volume, pitch); -        } +        players.forEach(player -> player.playSound(player.getLocation(), sound, category, volume, pitch));      }      /** diff --git a/src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java b/src/main/java/com/MylesAndMore/Tumble/plugin/CustomConfig.java index 20a0aa5..b77a59d 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java +++ b/src/main/java/com/MylesAndMore/Tumble/plugin/CustomConfig.java @@ -1,4 +1,4 @@ -package com.MylesAndMore.Tumble.config; +package com.MylesAndMore.Tumble.plugin;  import com.google.common.base.Charsets;  import org.bukkit.configuration.file.FileConfiguration; | 
