From 4a48e1a3a32f9a3b0b72be897377443c65ea55e8 Mon Sep 17 00:00:00 2001 From: sowgro Date: Sat, 29 Jun 2024 23:45:42 -0400 Subject: Make file writing actually work, reorganize managers --- src/main/java/com/MylesAndMore/Tumble/Main.java | 9 +-- .../com/MylesAndMore/Tumble/commands/Remove.java | 2 +- .../MylesAndMore/Tumble/config/ArenaManager.java | 93 ++++++++++------------ .../MylesAndMore/Tumble/config/ConfigManager.java | 10 +-- .../MylesAndMore/Tumble/config/CustomConfig.java | 56 +++++++++++++ .../Tumble/config/LanguageManager.java | 30 +------ 6 files changed, 110 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/MylesAndMore/Tumble/config/CustomConfig.java 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 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); } -- cgit v1.2.3