diff options
| author | sowgro <tpoke.ferrari@gmail.com> | 2024-06-29 23:45:42 -0400 | 
|---|---|---|
| committer | sowgro <tpoke.ferrari@gmail.com> | 2024-06-29 23:45:42 -0400 | 
| commit | 4a48e1a3a32f9a3b0b72be897377443c65ea55e8 (patch) | |
| tree | ed7dbeade650f29c0061669971dac49b30385135 | |
| parent | ef13a2cc5d579c96bd1461c678502cf44a8989ae (diff) | |
| download | Tumble-4a48e1a3a32f9a3b0b72be897377443c65ea55e8.tar.gz Tumble-4a48e1a3a32f9a3b0b72be897377443c65ea55e8.tar.bz2 Tumble-4a48e1a3a32f9a3b0b72be897377443c65ea55e8.zip | |
Make file writing actually work, reorganize managers
6 files changed, 110 insertions, 90 deletions
| diff --git a/src/main/java/com/MylesAndMore/Tumble/Main.java b/src/main/java/com/MylesAndMore/Tumble/Main.java index 6e2123c..eff7a10 100644 --- a/src/main/java/com/MylesAndMore/Tumble/Main.java +++ b/src/main/java/com/MylesAndMore/Tumble/Main.java @@ -18,15 +18,14 @@ public class Main extends JavaPlugin{      @Override      public void onEnable() {          plugin = this; -        ArenaManager.loadConfig(); -        ConfigManager.loadConfig(); -        LanguageManager.loadConfig(); + +        LanguageManager.init(); +        ArenaManager.init(); +        ConfigManager.init();          Objects.requireNonNull(this.getCommand("tumble")).setExecutor(new Tumble());          new Metrics(this, 16940); -        this.saveDefaultConfig(); // Saves the default config file (packaged in the JAR) if we haven't already -          Bukkit.getServer().getLogger().info("[Tumble] Tumble successfully enabled!");      }  }
\ No newline at end of file diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java b/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java index 1d28993..32ee232 100644 --- a/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java +++ b/src/main/java/com/MylesAndMore/Tumble/commands/Remove.java @@ -39,7 +39,7 @@ public class Remove implements SubCommand, CommandExecutor, TabCompleter {          ArenaManager.arenas.remove(arenaName);          ArenaManager.WriteConfig(); -        sender.sendMessage(LanguageManager.fromKey("set-success")); +        sender.sendMessage(LanguageManager.fromKey("remove-success"));          return true;      } diff --git a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java index 4d5b782..911b02e 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/ArenaManager.java @@ -7,42 +7,24 @@ import org.bukkit.Bukkit;  import org.bukkit.Location;  import org.bukkit.World;  import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.InvalidConfigurationException;  import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration;  import org.bukkit.entity.Player;  import org.jetbrains.annotations.Nullable; -import java.io.File; -import java.io.IOException;  import java.util.HashMap;  import java.util.Objects;  import static com.MylesAndMore.Tumble.Main.plugin;  public class ArenaManager { -    private static FileConfiguration config; +      public static HashMap<String, Arena> arenas; -    public static void loadConfig() { -        String fileName = "arenas.yml"; -        // create config -        File customConfigFile = new File(plugin.getDataFolder(), fileName); -        if (!customConfigFile.exists()) { -            customConfigFile.getParentFile().mkdirs(); -            plugin.saveResource(fileName, false); -        } +    private static final CustomConfig customConfig = new CustomConfig("arenas.yml"); +    private static final FileConfiguration config = customConfig.getConfig(); -        config = new YamlConfiguration(); -        try { -            config.load(customConfigFile); -        } catch (IOException | InvalidConfigurationException e) { -            e.printStackTrace(); -        } -        /* User Edit: -            Instead of the above Try/Catch, you can also use -            YamlConfiguration.loadConfiguration(customConfigFile) -        */ +    public static void init() { +        customConfig.saveDefaultConfig();          readConfig();      } @@ -50,6 +32,7 @@ public class ArenaManager {       * Reads config file and populates values above       */      public static void readConfig() { +          // arenas          ConfigurationSection arenasSection = config.getConfigurationSection("arenas");          if (arenasSection == null) { @@ -96,15 +79,43 @@ public class ArenaManager {          }      } +    public static 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); +        } + +        customConfig.saveConfig(); + +    } + +    /** +     * Searches all arenas for a game that player p is in +     * @param p Player to search for +     * @return the game the player is in, or null if not found +     */ +    public static Game findGamePlayerIsIn(Player p) { +        for (Arena a : arenas.values()) { +            if (a.game != null && a.game.gamePlayers.contains(p)) { +                return a.game; +            } +        } +        return null; +    } +      /**       * tries to convert a config section in the following format to a world       * section: -     *   x:  -     *   y:  +     *   x: +     *   y:       *   z:       *   world:       * @param section the section in the yaml with x, y, z, and world as its children -     * @return result of either:  +     * @return result of either:       *   success = true and a world       *   success = false and an error string       */ @@ -134,43 +145,21 @@ public class ArenaManager {          return new Result<>(new Location(world,x,y,z));      } -    public static void WriteConfig() { - -        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); +    private static void WriteWorld(String path, @Nullable Location location) { +        if (location == null) { +            return;          } -        plugin.saveConfig(); - -    } - -    private static void WriteWorld(String path, Location location) {          ConfigurationSection section = config.getConfigurationSection(path);          if (section == null) { -            section = plugin.getConfig().createSection(path); +            section = config.createSection(path);          }          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 -     * @return the game the player is in, or null if not found -     */ -    public static Game findGamePlayerIsIn(Player p) { -        for (Arena a : arenas.values()) { -            if (a.game != null && a.game.gamePlayers.contains(p)) { -                return a.game; -            } -        } -        return null;      }  } diff --git a/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java b/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java index 9dfce99..322f949 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/ConfigManager.java @@ -2,16 +2,15 @@ package com.MylesAndMore.Tumble.config;  import org.bukkit.configuration.file.FileConfiguration; -import static com.MylesAndMore.Tumble.Main.plugin; -  public class ConfigManager { -    private static FileConfiguration config; +    private static final CustomConfig customConfig = new CustomConfig("config.yml"); +    private static final FileConfiguration config = customConfig.getConfig();      public static boolean HideLeaveJoin;      public static int waitDuration; -    public static void loadConfig() { -        config = plugin.getConfig(); +    public static void init() { +        customConfig.saveDefaultConfig();          readConfig();      } @@ -20,5 +19,4 @@ public class ConfigManager {          waitDuration = config.getInt("wait-duration", 15);      } -  } diff --git a/src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java b/src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java new file mode 100644 index 0000000..20a0aa5 --- /dev/null +++ b/src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java @@ -0,0 +1,56 @@ +package com.MylesAndMore.Tumble.config; + +import com.google.common.base.Charsets; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.logging.Level; + +import static com.MylesAndMore.Tumble.Main.plugin; + +public class CustomConfig { +    private FileConfiguration newConfig = null; +    private final File configFile; +    private final String fileName; + +    public CustomConfig(String fileName) { +        this.fileName = fileName; +        this.configFile = new File(plugin.getDataFolder(), fileName); +    } + +    public FileConfiguration getConfig() { +        if (newConfig == null) { +            reloadConfig(); +        } +        return newConfig; +    } + +    public void reloadConfig() { +        newConfig = YamlConfiguration.loadConfiguration(configFile); + +        final InputStream defConfigStream = plugin.getResource(fileName); +        if (defConfigStream == null) { +            return; +        } + +        newConfig.setDefaults(YamlConfiguration.loadConfiguration(new InputStreamReader(defConfigStream, Charsets.UTF_8))); +    } + +    public void saveConfig() { +        try { +            getConfig().save(configFile); +        } catch (IOException ex) { +            plugin.getLogger().log(Level.SEVERE, "Could not save config to " + configFile, ex); +        } +    } + +    public void saveDefaultConfig() { +        if (!configFile.exists()) { +            plugin.saveResource(fileName, false); +        } +    } +} diff --git a/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java b/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java index dc49aa5..f214902 100644 --- a/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java +++ b/src/main/java/com/MylesAndMore/Tumble/config/LanguageManager.java @@ -1,40 +1,18 @@  package com.MylesAndMore.Tumble.config;  import org.bukkit.ChatColor; -import org.bukkit.configuration.InvalidConfigurationException;  import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; - -import java.io.File; -import java.io.IOException;  import static com.MylesAndMore.Tumble.Main.plugin;  public class LanguageManager { -    private static FileConfiguration config; - -    public static void loadConfig() { -        String fileName = "language.yml"; -        // create config -        File customConfigFile = new File(plugin.getDataFolder(), fileName); -        if (!customConfigFile.exists()) { -            customConfigFile.getParentFile().mkdirs(); -            plugin.saveResource(fileName, false); -        } +    private static final CustomConfig customConfig = new CustomConfig("language.yml"); +    private static final FileConfiguration config = customConfig.getConfig(); -        config = new YamlConfiguration(); -        try { -            config.load(customConfigFile); -        } catch (IOException | InvalidConfigurationException e) { -            e.printStackTrace(); -        } -        /* User Edit: -            Instead of the above Try/Catch, you can also use -            YamlConfiguration.loadConfiguration(customConfigFile) -        */ +    public static void init() { +        customConfig.saveDefaultConfig();      } -      public static String fromKey(String key) {          return fromKeyNoPrefix("prefix") + fromKeyNoPrefix(key);      } | 
