diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-06-27 02:40:06 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-06-27 02:40:06 -0400 |
commit | 02cc74cc5ac06a69ec59d6277234ce69031402f4 (patch) | |
tree | e213f687ac5fb5731fa7f2ed7420c54028c919b4 /src/main/java/com/MylesAndMore/Tumble/commands | |
parent | d849ab8d085675715622dcef212d32239eb5d4bb (diff) | |
download | Tumble-02cc74cc5ac06a69ec59d6277234ce69031402f4.tar.gz Tumble-02cc74cc5ac06a69ec59d6277234ce69031402f4.tar.bz2 Tumble-02cc74cc5ac06a69ec59d6277234ce69031402f4.zip |
overhaul command and config formats (again)
Diffstat (limited to 'src/main/java/com/MylesAndMore/Tumble/commands')
14 files changed, 593 insertions, 190 deletions
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java b/src/main/java/com/MylesAndMore/Tumble/commands/Config.java deleted file mode 100644 index 5fc2de6..0000000 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.MylesAndMore.Tumble.commands; - -import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.plugin.ConfigManager; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.command.TabCompleter; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class Config implements CommandExecutor, TabCompleter { - @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "This cannot be run by the console"); - return false; - } - - if (!sender.hasPermission("tumble.config")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); - return false; - } - - if (args.length < 2 || args[0] == null || args[1] == null) { - sender.sendMessage(ChatColor.RED + "Missing arguments"); - return false; - } - - switch (args[0]) { - case "add" -> { - String arenaName = args[1]; - ConfigManager.arenas.put(arenaName, new Arena(arenaName, ((Player)sender).getLocation(), null)); - sender.sendMessage(ChatColor.GREEN + "Arena added."); - } - case "set" -> { - String world = args[1]; - if (ConfigManager.arenas.containsKey(world)) { - ConfigManager.arenas.get(world).location = ((Player)sender).getLocation(); - } - else if (world.equals("waitArea")) { - ConfigManager.waitArea = ((Player)sender).getLocation(); - } - else if (world.equals("lobbySpawn")) { - ConfigManager.lobby = ((Player)sender).getLocation(); - } - else if (world.equals("winnerLobbySpawn")) { - ConfigManager.winnerLobby = ((Player)sender).getLocation(); - } - else { - sender.sendMessage(ChatColor.RED + "Invalid parameter"); - return false; - } - sender.sendMessage(ChatColor.GREEN + "Location set."); - } - case "disable" -> { - String world = args[1]; - if (world.equals("waitArea")) { - ConfigManager.waitArea = null; - } - else if (world.equals("winnerLobbySpawn")) { - ConfigManager.winnerLobby = null; - } - else { - sender.sendMessage(ChatColor.RED + "Invalid parameter"); - return false; - } - sender.sendMessage(ChatColor.GREEN + "World disabled."); - } - case "remove" -> { - String world = args[1]; - if (ConfigManager.arenas.containsKey(world)) { - ConfigManager.arenas.remove(world); - } - else { - sender.sendMessage(ChatColor.RED + "Invalid parameter"); - return false; - } - sender.sendMessage(ChatColor.GREEN + "Location set"); - } - default -> { - sender.sendMessage(ChatColor.RED + "Invalid parameter"); - return false; - } - } - - ConfigManager.WriteConfig(); - sender.sendMessage(ChatColor.GREEN + "Wrote changes to file."); - return true; - } - - @Override - public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (args.length == 1) { - return new ArrayList<>(Arrays.asList("add", "set", "disable", "remove")); - } - if (args.length == 2) { - switch (args[0]) { - case "set" -> { - ArrayList<String> temp = new ArrayList<>(ConfigManager.arenas.keySet()); - temp.addAll(Arrays.asList("waitArea", "lobbySpawn", "winnerLobbySpawn")); - return temp; - } - case "disable" -> { - return Arrays.asList("waitArea", "winnerLobbySpawn"); - } - case "delete" -> { - return ConfigManager.arenas.keySet().stream().toList(); - } - default -> { - return new ArrayList<>(); - } - } - } - return new ArrayList<>(); - } -} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Create.java b/src/main/java/com/MylesAndMore/Tumble/commands/Create.java new file mode 100644 index 0000000..3340cc6 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Create.java @@ -0,0 +1,44 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class Create implements SubCommand, CommandExecutor, TabCompleter { + @Override + public String getCommandName() { + return "create"; + } + + @Override + public String getPermission() { + return "tumble.create"; + } + + @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")); + return false; + } + + String arenaName = args[0]; + ArenaManager.arenas.put(arenaName, new Arena(arenaName)); + sender.sendMessage(LanguageManager.fromKey("create-success")); + return true; + } + + @Override + public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + return Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java index bdead44..c8042bc 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStart.java @@ -1,8 +1,9 @@ package com.MylesAndMore.Tumble.commands; import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.plugin.ConfigManager; -import org.bukkit.ChatColor; +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; import org.bukkit.command.CommandSender; @@ -13,36 +14,42 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class ForceStart implements CommandExecutor, TabCompleter { +public class ForceStart implements SubCommand, CommandExecutor, TabCompleter { + @Override - public boolean onCommand(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + public String getCommandName() { + return "forceStart"; + } - if (!sender.hasPermission("tumble.forcestart")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); - return false; - } + @Override + public String getPermission() { + return "tumble.forceStart"; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { Game game; if (args.length < 1 || args[0] == null) { - game = ConfigManager.findGamePlayerIsIn((Player)sender); + game = ArenaManager.findGamePlayerIsIn((Player)sender); if (game == null) { - sender.sendMessage(ChatColor.RED + "Missing arena name"); + sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); return false; } } else { - game = ConfigManager.arenas.get(args[0]).game; + game = ArenaManager.arenas.get(args[0]).game; } game.gameStart(); - sender.sendMessage(ChatColor.GREEN + "Starting game"); + 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 ConfigManager.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 ddd5826..96e8334 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/ForceStop.java @@ -1,8 +1,9 @@ package com.MylesAndMore.Tumble.commands; import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.plugin.ConfigManager; -import org.bukkit.ChatColor; +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; import org.bukkit.command.CommandSender; @@ -13,41 +14,47 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class ForceStop implements CommandExecutor, TabCompleter { +public class ForceStop implements SubCommand, CommandExecutor, TabCompleter { + @Override - public boolean onCommand(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + public String getCommandName() { + return "forcestop"; + } - if (!sender.hasPermission("tumble.forcestop")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); - return false; - } + @Override + public String getPermission() { + return "tumble.forcestop"; + } + + @Override + public boolean onCommand(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { Game game; if (args.length < 1 || args[0] == null) { - game = ConfigManager.findGamePlayerIsIn((Player)sender); + game = ArenaManager.findGamePlayerIsIn((Player)sender); if (game == null) { - sender.sendMessage(ChatColor.RED + "Missing arena name"); + sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); return false; } } else { - game = ConfigManager.arenas.get(args[0]).game; + game = ArenaManager.arenas.get(args[0]).game; } if (game == null) { - sender.sendMessage(ChatColor.RED + "No game is currently running in this arena"); + sender.sendMessage(LanguageManager.fromKey("no-game-in-arena")); return false; } game.gameEnd(); - sender.sendMessage(ChatColor.GREEN + "Game stopped."); + 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 ConfigManager.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 de44da1..a887c99 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Join.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Join.java @@ -1,10 +1,12 @@ package com.MylesAndMore.Tumble.commands; import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.plugin.ConfigManager; +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; +import com.MylesAndMore.Tumble.plugin.SubCommand; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -19,35 +21,41 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; -public class Join implements CommandExecutor, TabCompleter { +public class Join implements SubCommand, CommandExecutor, TabCompleter { + + @Override + public String getCommandName() { + return "join"; + } + + @Override + public String getPermission() { + return "tumble.join"; + } + @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "This cannot be run by the console"); - return false; - } - - if (!sender.hasPermission("tumble.join")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); + sender.sendMessage(LanguageManager.fromKey("not-for-console")); return false; } - if (ConfigManager.findGamePlayerIsIn((Player)sender) != null) { - sender.sendMessage(ChatColor.RED + "You are already in a game! Leave it to join another one"); + if (ArenaManager.findGamePlayerIsIn((Player)sender) != null) { + sender.sendMessage(LanguageManager.fromKey("already-in-game")); } if (args.length < 1 || args[0] == null) { - sender.sendMessage(ChatColor.RED + "Missing arena name"); + sender.sendMessage(LanguageManager.fromKey("missing-arena-parameter")); return false; } String arenaName = args[0]; - if (!ConfigManager.arenas.containsKey(arenaName)) + if (!ArenaManager.arenas.containsKey(arenaName)) { - sender.sendMessage(ChatColor.RED + "This arena does not exist"); + sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%", arenaName)); return false; } - Arena arena = ConfigManager.arenas.get(arenaName); + Arena arena = ArenaManager.arenas.get(arenaName); Game game; if (args.length < 2 || args[1] == null) { @@ -66,7 +74,7 @@ public class Join implements CommandExecutor, TabCompleter { case "snowballs", "snowball" -> type = GameType.SNOWBALLS; case "mix", "mixed" -> type = GameType.MIXED; default -> { - sender.sendMessage(ChatColor.RED + "Invalid game type"); + sender.sendMessage(LanguageManager.fromKey("invalid-type")); return false; } } @@ -80,26 +88,30 @@ public class Join implements CommandExecutor, TabCompleter { game = arena.game; } else { - sender.sendMessage(ChatColor.RED + "A game of "+type+" is currently taking place in this arena, choose another arena or join it with /tumble:join "+arena.name+" "+type); + sender.sendMessage(LanguageManager.fromKey("another-type-in-arena") + .replace("%type%",type.toString()) + .replace("%arena%",arenaName)); return false; } } } if (game.gameState != GameState.WAITING) { - sender.sendMessage(ChatColor.RED + "This game is still in progress, wait until it finishes or join another game"); + sender.sendMessage(LanguageManager.fromKey("game-in-progress")); return false; } game.addPlayer((Player)sender); - sender.sendMessage(ChatColor.GREEN + "Joined game " + arena.name + " - " + game.type); + sender.sendMessage(LanguageManager.fromKey("join-success") + .replace("%type%", game.type.toString()) + .replace("%arena%", arena.name)); return true; } @Override public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (args.length == 1) { - return ConfigManager.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 1d00ca4..0250cc6 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java @@ -1,8 +1,9 @@ package com.MylesAndMore.Tumble.commands; import com.MylesAndMore.Tumble.game.Game; -import com.MylesAndMore.Tumble.plugin.ConfigManager; -import org.bukkit.ChatColor; +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; import org.bukkit.command.CommandSender; @@ -13,28 +14,36 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; -public class Leave implements CommandExecutor, TabCompleter { +public class Leave implements SubCommand, CommandExecutor, TabCompleter { + + @Override + public String getCommandName() { + return "leave"; + } + + @Override + public String getPermission() { + return "tumble.leave"; + } + @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "This cannot be run by the console"); - return false; - } - - if (!sender.hasPermission("tumble.leave")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); + sender.sendMessage(LanguageManager.fromKey("not-for-console")); return false; } - Game game = ConfigManager.findGamePlayerIsIn((Player)sender); + Game game = ArenaManager.findGamePlayerIsIn((Player)sender); if (game == null) { - sender.sendMessage(ChatColor.RED + "You are not in a game."); + sender.sendMessage(LanguageManager.fromKey("no-game-in-arena")); return false; } game.removePlayer((Player) sender); - sender.sendMessage(ChatColor.GREEN + "Game left."); + 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 ca67a2e..66535d5 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Reload.java @@ -1,8 +1,9 @@ package com.MylesAndMore.Tumble.commands; import com.MylesAndMore.Tumble.game.Arena; -import com.MylesAndMore.Tumble.plugin.ConfigManager; -import org.bukkit.ChatColor; +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; import org.bukkit.command.CommandSender; @@ -14,23 +15,29 @@ import java.util.List; import static com.MylesAndMore.Tumble.Main.plugin; -public class Reload implements CommandExecutor, TabCompleter { +public class Reload implements SubCommand, CommandExecutor, TabCompleter { @Override - public boolean onCommand(CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (!sender.hasPermission("tumble.reload")) { - sender.sendMessage(ChatColor.RED + "You do not have permission to perform this command!"); - return false; - } + public String getCommandName() { + return "reload"; + } + + @Override + public String getPermission() { + return "tumble.reload"; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - for (Arena a : ConfigManager.arenas.values()) { + for (Arena a : ArenaManager.arenas.values()) { if (a.game != null) { a.game.gameEnd(); } } plugin.onEnable(); - sender.sendMessage(ChatColor.GREEN + "Tumble configuration reloaded. Check console for errors."); + 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 new file mode 100644 index 0000000..118aa77 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java @@ -0,0 +1,53 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class Remove implements SubCommand, CommandExecutor, TabCompleter { + + @Override + public String getCommandName() { + return "remove"; + } + + @Override + public String getPermission() { + return "tumble.remove"; + } + + @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")); + return false; + } + String arenaName = args[0]; + + if (!ArenaManager.arenas.containsKey(arenaName)) { + sender.sendMessage(LanguageManager.fromKey("invalid-arena").replace("%arena%",arenaName)); + return false; + } + + ArenaManager.arenas.remove(arenaName); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java new file mode 100644 index 0000000..62d22f8 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetGameSpawn.java @@ -0,0 +1,60 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class SetGameSpawn implements SubCommand, CommandExecutor, TabCompleter { + @Override + public String getCommandName() { + return "setGameSpawn"; + } + + @Override + public String getPermission() { + return "tumble.setGameSpawn"; + } + + @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")); + return false; + } + + if (args.length == 0 || args[0] == null || args[0].isEmpty()) { + 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)); + return false; + } + Arena arena = ArenaManager.arenas.get(arenaName); + + arena.gameSpawn = ((Player)sender).getLocation(); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYCordinate.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYCordinate.java new file mode 100644 index 0000000..0be156f --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetKillYCordinate.java @@ -0,0 +1,61 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class SetKillYCordinate implements SubCommand, CommandExecutor, TabCompleter { + + @Override + public String getCommandName() { + return "setKillYLevel"; + } + + @Override + public String getPermission() { + return "tumble.setKillYLevel"; + } + + @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")); + return false; + } + + if (args.length == 0 || args[0] == null || args[0].isEmpty()) { + 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)); + return false; + } + Arena arena = ArenaManager.arenas.get(arenaName); + + arena.killAtY = ((int) ((Player) sender).getLocation().getY()); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java new file mode 100644 index 0000000..dbb6b53 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetLobby.java @@ -0,0 +1,60 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class SetLobby implements SubCommand, CommandExecutor, TabCompleter { + @Override + public String getCommandName() { + return "setLobby"; + } + + @Override + public String getPermission() { + return "tumble.setLobby"; + } + + @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")); + return false; + } + + if (args.length == 0 || args[0] == null || args[0].isEmpty()) { + 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)); + return false; + } + Arena arena = ArenaManager.arenas.get(arenaName); + + arena.lobby = ((Player)sender).getLocation(); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java new file mode 100644 index 0000000..f789658 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetWaitArea.java @@ -0,0 +1,60 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class SetWaitArea implements SubCommand, CommandExecutor, TabCompleter { + @Override + public String getCommandName() { + return "setWaitArea"; + } + + @Override + public String getPermission() { + return "tumble.setWaitArea"; + } + + @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")); + return false; + } + + if (args.length == 0 || args[0] == null || args[0].isEmpty()) { + 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)); + return false; + } + Arena arena = ArenaManager.arenas.get(arenaName); + + arena.waitArea = ((Player)sender).getLocation(); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java b/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java new file mode 100644 index 0000000..01817b0 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/SetWinnerLobby.java @@ -0,0 +1,60 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; + +public class SetWinnerLobby implements SubCommand, CommandExecutor, TabCompleter { + @Override + public String getCommandName() { + return "setWinnerLobby"; + } + + @Override + public String getPermission() { + return "tumble.setWinnerLobby"; + } + + @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")); + return false; + } + + if (args.length == 0 || args[0] == null || args[0].isEmpty()) { + 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)); + return false; + } + Arena arena = ArenaManager.arenas.get(arenaName); + + arena.winnerLobby = ((Player)sender).getLocation(); + 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 Collections.emptyList(); + } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java b/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java new file mode 100644 index 0000000..6e44352 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Tumble.java @@ -0,0 +1,85 @@ +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; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; + +import java.util.*; + +public class Tumble implements CommandExecutor, TabCompleter { + + private static final Map<String, SubCommand> subCommands = Map.ofEntries( + CmdNameAsKey(new Create()), + CmdNameAsKey(new ForceStart()), + CmdNameAsKey(new ForceStop()), + CmdNameAsKey(new Join()), + CmdNameAsKey(new Leave()), + CmdNameAsKey(new Reload()), + CmdNameAsKey(new Remove()), + CmdNameAsKey(new SetGameSpawn()), + CmdNameAsKey(new SetKillYCordinate()), + CmdNameAsKey(new SetLobby()), + CmdNameAsKey(new SetWaitArea()), + CmdNameAsKey(new SetWinnerLobby()) + ); + + @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")); + return true; + } + + var subCmd = subCommands.get(args[0]); + + if (!sender.hasPermission(subCmd.getPermission())) { + sender.sendMessage(LanguageManager.fromKey("no-permission").replace("%permission%", subCmd.getPermission())); + return false; + } + + subCmd.onCommand(sender, command, args[0], removeFirst(args)); + return true; + } + + @Override + public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + if (args.length == 1) { + ArrayList<String> PermittedSubCmds = new ArrayList<>(); + for (SubCommand subCmd: subCommands.values()) { + if (sender.hasPermission(subCmd.getPermission())) { + PermittedSubCmds.add(subCmd.getCommandName()); + } + } + return PermittedSubCmds; + } + + if (args.length > 1) { + if (!subCommands.containsKey(args[0])) { + return Collections.emptyList(); + } + + if (subCommands.get(args[0]) instanceof TabCompleter tcmp) { + return tcmp.onTabComplete(sender, command, args[0], removeFirst(args)); + } + else { + return null; + } + } + + return Collections.emptyList(); + } + + private String[] removeFirst(String[] arr) { + ArrayList<String> tmp = new ArrayList<>(List.of(arr)); + tmp.remove(0); + return tmp.toArray(new String[0]); + } + + private static Map.Entry<String, SubCommand> CmdNameAsKey(SubCommand s) { + return Map.entry(s.getCommandName(),s); + } +} |