Browse Source

refactoring file loading

RedstoneFuture 3 years ago
parent
commit
7792c4056d

+ 9 - 8
missilewars-plugin/src/main/java/de/butzlabben/missilewars/Config.java

@@ -40,21 +40,22 @@ import static org.bukkit.Material.valueOf;
  */
 public class Config {
 
-    private static final File dir = MissileWars.getInstance().getDataFolder();
-    private static final File file = new File(MissileWars.getInstance().getDataFolder(), "config.yml");
+    private static final File DIR = MissileWars.getInstance().getDataFolder();
+    private static final File FILE = new File(DIR, "config.yml");
     private static YamlConfiguration cfg;
     private static boolean configNew = false;
 
     public static void load() {
 
         // check if the directory "/MissileWars" exists
-        if (!dir.exists())
-            dir.mkdirs();
+        if (!DIR.exists()) {
+            DIR.mkdirs();
+        }
 
         // check if the config file exists
-        if (!file.exists()) {
+        if (!FILE.exists()) {
             try {
-                file.createNewFile();
+                FILE.createNewFile();
             } catch (IOException e) {
                 Logger.ERROR.log("Could not create config.yml!");
                 e.printStackTrace();
@@ -64,7 +65,7 @@ public class Config {
 
         // try to load the config
         try {
-            cfg = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
+            cfg = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(FILE), StandardCharsets.UTF_8));
         } catch (FileNotFoundException e) {
             Logger.ERROR.log("Couldn't load config.yml");
             e.printStackTrace();
@@ -148,7 +149,7 @@ public class Config {
 
     private static void saveConfig() {
         try {
-            cfg.save(file);
+            cfg.save(FILE);
         } catch (IOException e) {
             Logger.ERROR.log("Could not save config.yml!");
             e.printStackTrace();

+ 12 - 14
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MessageConfig.java

@@ -18,15 +18,12 @@
 
 package de.butzlabben.missilewars;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
 import org.bukkit.ChatColor;
 import org.bukkit.configuration.file.YamlConfiguration;
 
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+
 
 /**
  * @author Butzlabben
@@ -34,20 +31,21 @@ import org.bukkit.configuration.file.YamlConfiguration;
  */
 public class MessageConfig {
 
-    private static final File dir = MissileWars.getInstance().getDataFolder();
-    private static final File file = new File(MissileWars.getInstance().getDataFolder(), "messages.yml");
+    private static final File DIR = MissileWars.getInstance().getDataFolder();
+    private static final File FILE = new File(DIR, "messages.yml");
     private static YamlConfiguration cfg;
 
     public static void load() {
 
         // check if the directory "/MissileWars" exists
-        if (!dir.exists())
-            dir.mkdirs();
+        if (!DIR.exists()) {
+            DIR.mkdirs();
+        }
 
         // check if the config file exists
-        if (!file.exists()) {
+        if (!FILE.exists()) {
             try {
-                file.createNewFile();
+                FILE.createNewFile();
             } catch (IOException e) {
                 Logger.ERROR.log("Could not create messages.yml!");
                 e.printStackTrace();
@@ -56,7 +54,7 @@ public class MessageConfig {
 
         // try to load the config
         try {
-            cfg = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));
+            cfg = YamlConfiguration.loadConfiguration(new InputStreamReader(new FileInputStream(FILE), StandardCharsets.UTF_8));
         } catch (FileNotFoundException e) {
             Logger.ERROR.log("Couldn't load messages.yml");
             e.printStackTrace();
@@ -129,7 +127,7 @@ public class MessageConfig {
 
     private static void saveConfig() {
         try {
-            cfg.save(file);
+            cfg.save(FILE);
         } catch (IOException e) {
             Logger.ERROR.log("Could not save messages.yml!");
             e.printStackTrace();

+ 23 - 17
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MissileWars.java

@@ -35,8 +35,6 @@ import de.butzlabben.missilewars.util.version.VersionUtil;
 import de.butzlabben.missilewars.wrapper.signs.CheckRunnable;
 import de.butzlabben.missilewars.wrapper.signs.SignRepository;
 import de.butzlabben.missilewars.wrapper.stats.StatsFetcher;
-import java.io.File;
-import java.util.Date;
 import lombok.Getter;
 import org.apache.commons.io.FileUtils;
 import org.bstats.bukkit.Metrics;
@@ -44,6 +42,9 @@ import org.bukkit.Bukkit;
 import org.bukkit.entity.Player;
 import org.bukkit.plugin.java.JavaPlugin;
 
+import java.io.File;
+import java.util.Date;
+
 /**
  * @author Butzlabben
  * @since 01.01.2018
@@ -87,14 +88,9 @@ public class MissileWars extends JavaPlugin {
         MessageConfig.load();
         SetupUtil.checkMissiles();
 
-        new File(Config.getArenaFolder()).mkdirs();
         new File(Config.getLobbiesFolder()).mkdirs();
 
         SignRepository repository = SignRepository.load();
-        if (repository == null) {
-            repository = new SignRepository();
-            repository.save();
-        }
         this.signRepository = repository;
 
         Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
@@ -139,26 +135,23 @@ public class MissileWars extends JavaPlugin {
     @Override
     public void onDisable() {
         GameManager.getInstance().disableAll();
+        //deleteDefaultFileSource();
         deleteTempWorlds();
 
-        // TODO
-        File missiles = new File(getDataFolder(), "missiles.zip");
-        File arena = new File(getDataFolder(), "MissileWars-Arena.zip");
-        FileUtils.deleteQuietly(missiles);
-        FileUtils.deleteQuietly(arena);
-
         ConnectionHolder.close();
     }
 
     /**
-     * @return true, if FAWE is installed
+     * This method checks if FAWE (FastAsyncWorldEdit) is installed.
+     *
+     * @return true, if it's installed
      */
     public boolean foundFAWE() {
         return foundFAWE;
     }
 
     /**
-     * This methode delete the temp arena worlds of the MW game.
+     * This methode deletes the temp arena worlds of the MW game.
      */
     private void deleteTempWorlds() {
         File[] dirs = Bukkit.getWorldContainer().listFiles();
@@ -173,8 +166,21 @@ public class MissileWars extends JavaPlugin {
     }
 
     /**
-     * This methode send info about the version, version warnings (if needed) and the authors
-     * in the console.
+     * This method deletes the original ZIP files from the
+     * "/MissileWars" folder. The default missiles and the
+     * default arena world was copied from these archives
+     * at the first server start.
+     */
+    private void deleteDefaultFileSource() {
+        File missiles = new File(getDataFolder(), "missiles.zip");
+        File arena = new File(getDataFolder(), "MissileWars-Arena.zip");
+        FileUtils.deleteQuietly(missiles);
+        FileUtils.deleteQuietly(arena);
+    }
+
+    /**
+     * This method sends information about the version, version
+     * warnings (if necessary) and authors in the console.
      */
     private void sendPluginInfo() {
 

+ 9 - 2
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Arenas.java

@@ -24,13 +24,14 @@ import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.util.SetupUtil;
 import de.butzlabben.missilewars.util.serialization.Serializer;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
+import lombok.Getter;
+import org.bukkit.Bukkit;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-import lombok.Getter;
-import org.bukkit.Bukkit;
 
 public class Arenas {
 
@@ -40,6 +41,11 @@ public class Arenas {
         arenas.clear();
 
         File folder = new File(Config.getArenaFolder());
+
+        // Creates the folder "/arena", if not existing
+        folder.mkdirs();
+
+        // Get all arena files or create a new one
         File[] files = folder.listFiles();
         if (files.length == 0) {
             File defaultArena = new File(folder, "arena.yml");
@@ -55,6 +61,7 @@ public class Arenas {
             }
             files = new File[] {defaultArena};
         }
+
         for (File config : files) {
             if (!config.getName().endsWith(".yml") && !config.getName().endsWith(".yaml")) continue;
             try {

+ 4 - 3
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/signs/ManageListener.java

@@ -25,7 +25,6 @@ import de.butzlabben.missilewars.game.GameManager;
 import de.butzlabben.missilewars.util.version.VersionUtil;
 import de.butzlabben.missilewars.wrapper.signs.MWSign;
 import de.butzlabben.missilewars.wrapper.signs.SignRepository;
-import java.util.Optional;
 import org.bukkit.block.Block;
 import org.bukkit.entity.Player;
 import org.bukkit.event.EventHandler;
@@ -33,6 +32,8 @@ import org.bukkit.event.Listener;
 import org.bukkit.event.block.BlockBreakEvent;
 import org.bukkit.event.block.SignChangeEvent;
 
+import java.util.Optional;
+
 public class ManageListener implements Listener {
 
     @EventHandler
@@ -53,7 +54,7 @@ public class ManageListener implements Listener {
                     MWSign sign = new MWSign(event.getBlock().getLocation(), lobbyName);
                     sign.update();
                     signRepository.getSigns().add(new MWSign(event.getBlock().getLocation(), lobbyName));
-                    signRepository.save();
+                    signRepository.saveData();
                     player.sendMessage(MessageConfig.getPrefix() + "Sign was successfully created and connected");
                 }
             }
@@ -72,7 +73,7 @@ public class ManageListener implements Listener {
                     if (player.isSneaking()) {
                         MWSign sign = optional.get();
                         repository.getSigns().remove(sign);
-                        repository.save();
+                        repository.saveData();
                         player.sendMessage(MessageConfig.getPrefix() + "You have successfully removed this missilewars sign");
                     } else {
                         player.sendMessage(MessageConfig.getPrefix() + "§cYou have to be sneaking in order to remove this sign");

+ 5 - 3
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/GameWorld.java

@@ -22,8 +22,6 @@ import de.butzlabben.missilewars.Config;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.MessageConfig;
 import de.butzlabben.missilewars.game.Game;
-import java.io.File;
-import java.io.IOException;
 import lombok.Getter;
 import lombok.ToString;
 import org.apache.commons.io.FileUtils;
@@ -33,6 +31,9 @@ import org.bukkit.WorldCreator;
 import org.bukkit.entity.Entity;
 import org.bukkit.entity.Player;
 
+import java.io.File;
+import java.io.IOException;
+
 @Getter
 @ToString(exclude = {"game", "lock"})
 public class GameWorld {
@@ -50,8 +51,9 @@ public class GameWorld {
     }
 
     public boolean isWorld(World world) {
-        if (world == null)
+        if (world == null) {
             return false;
+        }
         return world.getName().equals(worldName);
     }
 

+ 43 - 29
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/signs/SignRepository.java

@@ -26,59 +26,73 @@ import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.game.Game;
 import de.butzlabben.missilewars.util.serialization.LocationTypeAdapter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
+import lombok.Getter;
+import org.bukkit.Location;
+
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
-import lombok.Getter;
-import org.bukkit.Location;
 
 @Getter
 public class SignRepository {
 
-    private final static String PATH = "data";
-    private final static String FILE_NAME = "signs.json";
+    private static final File DIR = new File(MissileWars.getInstance().getDataFolder(), "data");
+    private static final File FILE = new File(DIR, "signs.json");
+    private static boolean configNew = false;
 
     private final List<MWSign> signs = new ArrayList<>();
 
     public static SignRepository load() {
-        File dir = new File(MissileWars.getInstance().getDataFolder(), PATH);
-        if (!dir.exists()) {
-            dir.mkdirs();
-            return null;
+
+        // check if the directory "/data" exists
+        if (!DIR.exists()) {
+            DIR.mkdirs();
         }
-        File file = new File(dir, FILE_NAME);
-        if (!file.exists())
-            return null;
-        Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Location.class, new LocationTypeAdapter(true)).create();
-        try (InputStream in = new FileInputStream(file);
-             JsonReader reader = new JsonReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
 
-            return gson.fromJson(reader, SignRepository.class);
-        } catch (IOException e) {
-            Logger.WARN.log("Could not load missilewars signs: Error: " + e.getMessage());
+        // check if the config file exists
+        if (!FILE.exists()) {
+            try {
+                FILE.createNewFile();
+            } catch (IOException e) {
+                Logger.ERROR.log("Could not create signs.json!");
+                e.printStackTrace();
+            }
+            configNew = true;
         }
-        return null;
+
+        // load data if it's existing
+        if (!configNew) {
+
+            Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Location.class, new LocationTypeAdapter(true)).create();
+
+            try (InputStream in = new FileInputStream(FILE);
+                 JsonReader reader = new JsonReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
+                return gson.fromJson(reader, SignRepository.class);
+            } catch (IOException e) {
+                Logger.WARN.log("Could not load missilewars signs: Error: " + e.getMessage());
+            }
+
+        }
+
+        // create default data object
+        SignRepository repository = new SignRepository();
+        repository.saveData();
+        return repository;
     }
 
+
     public Optional<MWSign> getSign(Location location) {
         return MissileWars.getInstance().getSignRepository().getSigns()
                 .stream().filter(sign -> sign.isLocation(location)).findAny();
     }
 
-    public void save() {
-        File dir = new File(MissileWars.getInstance().getDataFolder(), PATH);
+    public void saveData() {
         Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(Location.class, new LocationTypeAdapter(true)).create();
-        try (OutputStream out = new FileOutputStream(new File(dir, FILE_NAME));
+
+        try (OutputStream out = new FileOutputStream(FILE);
              JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))) {
             writer.setIndent("  ");
             gson.toJson(this, SignRepository.class, writer);