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 | |
| parent | 8cb97b0bc66f6d29770e6994ee19cd0c3835055c (diff) | |
| download | Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.gz Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.bz2 Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.zip | |
Add config comand and file writing
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. | 
