diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-06-10 00:42:55 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-06-10 00:42:55 -0400 |
commit | 2aa28e390b8a9fa763baef30e204af78e1a28456 (patch) | |
tree | c5cffbcfb36419633263bc68d5a1c239df540a56 /src/main | |
parent | 8cb97b0bc66f6d29770e6994ee19cd0c3835055c (diff) | |
download | Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.gz Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.bz2 Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.zip |
Add config comand and file writing
Diffstat (limited to 'src/main')
5 files changed, 137 insertions, 19 deletions
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java b/src/main/java/com/MylesAndMore/Tumble/commands/Config.java index d91a5b5..256b45e 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Config.java @@ -1,5 +1,7 @@ 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; @@ -9,6 +11,7 @@ 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 { @@ -24,12 +27,96 @@ public class Config implements CommandExecutor, TabCompleter { return false; } - sender.sendMessage(ChatColor.RED + "Not implemented yet"); // TODO + 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())); + 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/Leave.java b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java index abf0592..1d00ca4 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java @@ -27,16 +27,10 @@ public class Leave implements CommandExecutor, TabCompleter { return false; } - Game game; - if (args.length < 1 || args[0] == null) { - game = ConfigManager.findGamePlayerIsIn((Player)sender); - if (game == null) { - sender.sendMessage(ChatColor.RED + "Missing arena name"); - return false; - } - } - else { - game = ConfigManager.arenas.get(args[0]).game; + Game game = ConfigManager.findGamePlayerIsIn((Player)sender); + if (game == null) { + sender.sendMessage(ChatColor.RED + "You are not in a game."); + return false; } game.removePlayer((Player) sender); @@ -46,9 +40,6 @@ public class Leave implements CommandExecutor, TabCompleter { @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 new ArrayList<>(); } }
\ No newline at end of file diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Arena.java b/src/main/java/com/MylesAndMore/Tumble/game/Arena.java index ef477d2..499fa6c 100644 --- a/src/main/java/com/MylesAndMore/Tumble/game/Arena.java +++ b/src/main/java/com/MylesAndMore/Tumble/game/Arena.java @@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull; public class Arena { public Game game = null; public final World world; - public final Location location; + public Location location; public final String name; /** diff --git a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java index dae6dd5..3207e1b 100644 --- a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java @@ -52,7 +52,7 @@ public class ConfigManager { Result<Location>res = readWorld(config.getConfigurationSection("lobby-spawn")); if (!res.success) { plugin.getLogger().warning("Failed to load lobby: "+res.error); - plugin.getLogger().severe("^ THIS IS REQUIRED, PLEASE FIX TO AVOID UNDEFINED BEHAVIOR"); + plugin.getLogger().severe("Lobby world is required. Run '/tumble:config set lobbyWorld' ASAP"); } lobby = res.value; @@ -136,6 +136,46 @@ public class ConfigManager { return res; } + public static void WriteConfig() { + if (waitArea != null) { + WriteWorld(plugin.getConfig().getConfigurationSection("wait-area"), waitArea); + plugin.getConfig().set("enable-wait-area", true); + } + else { + plugin.getConfig().set("enable-wait-area", false); + } + + if (lobby != null) { + WriteWorld(plugin.getConfig().getConfigurationSection("lobby-spawn"), lobby); + } + + if (winnerLobby != null) { + WriteWorld(plugin.getConfig().getConfigurationSection("winner-spawn"), winnerLobby); + plugin.getConfig().set("enable-winner-lobby", true); + } + else { + plugin.getConfig().set("enable-winner-lobby", true); + } + + for (String arenaName: arenas.keySet()) { + ConfigurationSection c = plugin.getConfig().getConfigurationSection("arenas."+arenaName); + if (c == null) { + c = plugin.getConfig().createSection("arenas."+arenaName); + } + WriteWorld(c, arenas.get(arenaName).location); + } + + plugin.saveConfig(); + + } + + private static void WriteWorld(ConfigurationSection section, Location location) { + section.set("x", location.getX()); + section.set("y", location.getY()); + section.set("z", location.getZ()); + section.set("world", Objects.requireNonNull(location.getWorld()).getName()); + } + /** * Searches all arenas for a game that player p is in * @param p Player to search for diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a890bdd..0d9b70c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -13,7 +13,7 @@ commands: permission: tumble.join leave: description: Quits a Tumble match. - usage: '§cUsage: /tumble:leave [arenaName]' + usage: '§cUsage: /tumble:leave' permission: tumble.leave forcestart: description: Force starts a Tumble match. @@ -24,8 +24,8 @@ commands: usage: '§cUsage: /tumble:forcestop [arenaName]' permission: tumble.forcestop config: - description: Modify arenas and settings - usage: '§cUsage: /tumble:config *not implemented yet*' + description: Modify arenas and worlds. + usage: '§cUsage: /tumble:config <add|set|disable|delete> <data>' permission: tumble.config reload: description: Reloads the plugin's config. |