浏览代码

Merge pull request #13 from RedstoneFuture/refactoring

Refactoring 4
Daniel 3 年之前
父节点
当前提交
a4940adba5

+ 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 {
 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 YamlConfiguration cfg;
     private static boolean configNew = false;
     private static boolean configNew = false;
 
 
     public static void load() {
     public static void load() {
 
 
         // check if the directory "/MissileWars" exists
         // check if the directory "/MissileWars" exists
-        if (!dir.exists())
-            dir.mkdirs();
+        if (!DIR.exists()) {
+            DIR.mkdirs();
+        }
 
 
         // check if the config file exists
         // check if the config file exists
-        if (!file.exists()) {
+        if (!FILE.exists()) {
             try {
             try {
-                file.createNewFile();
+                FILE.createNewFile();
             } catch (IOException e) {
             } catch (IOException e) {
                 Logger.ERROR.log("Could not create config.yml!");
                 Logger.ERROR.log("Could not create config.yml!");
                 e.printStackTrace();
                 e.printStackTrace();
@@ -64,7 +65,7 @@ public class Config {
 
 
         // try to load the config
         // try to load the config
         try {
         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) {
         } catch (FileNotFoundException e) {
             Logger.ERROR.log("Couldn't load config.yml");
             Logger.ERROR.log("Couldn't load config.yml");
             e.printStackTrace();
             e.printStackTrace();
@@ -148,7 +149,7 @@ public class Config {
 
 
     private static void saveConfig() {
     private static void saveConfig() {
         try {
         try {
-            cfg.save(file);
+            cfg.save(FILE);
         } catch (IOException e) {
         } catch (IOException e) {
             Logger.ERROR.log("Could not save config.yml!");
             Logger.ERROR.log("Could not save config.yml!");
             e.printStackTrace();
             e.printStackTrace();

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

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

+ 9 - 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.CheckRunnable;
 import de.butzlabben.missilewars.wrapper.signs.SignRepository;
 import de.butzlabben.missilewars.wrapper.signs.SignRepository;
 import de.butzlabben.missilewars.wrapper.stats.StatsFetcher;
 import de.butzlabben.missilewars.wrapper.stats.StatsFetcher;
-import java.io.File;
-import java.util.Date;
 import lombok.Getter;
 import lombok.Getter;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FileUtils;
 import org.bstats.bukkit.Metrics;
 import org.bstats.bukkit.Metrics;
@@ -44,6 +42,9 @@ import org.bukkit.Bukkit;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.bukkit.plugin.java.JavaPlugin;
 
 
+import java.io.File;
+import java.util.Date;
+
 /**
 /**
  * @author Butzlabben
  * @author Butzlabben
  * @since 01.01.2018
  * @since 01.01.2018
@@ -87,14 +88,9 @@ public class MissileWars extends JavaPlugin {
         MessageConfig.load();
         MessageConfig.load();
         SetupUtil.checkMissiles();
         SetupUtil.checkMissiles();
 
 
-        new File(Config.getArenaFolder()).mkdirs();
         new File(Config.getLobbiesFolder()).mkdirs();
         new File(Config.getLobbiesFolder()).mkdirs();
 
 
         SignRepository repository = SignRepository.load();
         SignRepository repository = SignRepository.load();
-        if (repository == null) {
-            repository = new SignRepository();
-            repository.save();
-        }
         this.signRepository = repository;
         this.signRepository = repository;
 
 
         Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
         Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
@@ -141,24 +137,20 @@ public class MissileWars extends JavaPlugin {
         GameManager.getInstance().disableAll();
         GameManager.getInstance().disableAll();
         deleteTempWorlds();
         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();
         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() {
     public boolean foundFAWE() {
         return 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() {
     private void deleteTempWorlds() {
         File[] dirs = Bukkit.getWorldContainer().listFiles();
         File[] dirs = Bukkit.getWorldContainer().listFiles();
@@ -173,8 +165,8 @@ public class MissileWars extends JavaPlugin {
     }
     }
 
 
     /**
     /**
-     * This methode send info about the version, version warnings (if needed) and the authors
-     * in the console.
+     * This method sends information about the version, version
+     * warnings (if necessary) and authors in the console.
      */
      */
     private void sendPluginInfo() {
     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.SetupUtil;
 import de.butzlabben.missilewars.util.serialization.Serializer;
 import de.butzlabben.missilewars.util.serialization.Serializer;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
+import lombok.Getter;
+import org.bukkit.Bukkit;
+
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
-import lombok.Getter;
-import org.bukkit.Bukkit;
 
 
 public class Arenas {
 public class Arenas {
 
 
@@ -40,6 +41,11 @@ public class Arenas {
         arenas.clear();
         arenas.clear();
 
 
         File folder = new File(Config.getArenaFolder());
         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();
         File[] files = folder.listFiles();
         if (files.length == 0) {
         if (files.length == 0) {
             File defaultArena = new File(folder, "arena0.yml");
             File defaultArena = new File(folder, "arena0.yml");
@@ -55,6 +61,7 @@ public class Arenas {
             }
             }
             files = new File[] {defaultArena};
             files = new File[] {defaultArena};
         }
         }
+
         for (File config : files) {
         for (File config : files) {
             if (!config.getName().endsWith(".yml") && !config.getName().endsWith(".yaml")) continue;
             if (!config.getName().endsWith(".yml") && !config.getName().endsWith(".yaml")) continue;
             try {
             try {

+ 16 - 6
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Game.java

@@ -77,7 +77,7 @@ public class Game {
     private static int fights = 0;
     private static int fights = 0;
     private final Map<UUID, MWPlayer> players = new HashMap<>();
     private final Map<UUID, MWPlayer> players = new HashMap<>();
     private final Map<String, Integer> votes = new HashMap<>(); // Votes for the maps.
     private final Map<String, Integer> votes = new HashMap<>(); // Votes for the maps.
-    @Getter private final Lobby lobby;
+    private final Lobby lobby;
     private final HashMap<UUID, BukkitTask> playerTasks = new HashMap<>();
     private final HashMap<UUID, BukkitTask> playerTasks = new HashMap<>();
     private Timer timer;
     private Timer timer;
     private BukkitTask bt;
     private BukkitTask bt;
@@ -85,11 +85,11 @@ public class Game {
     private Team team1;
     private Team team1;
     private Team team2;
     private Team team2;
     @Setter private boolean draw = true;
     @Setter private boolean draw = true;
-    @Getter private boolean ready = false;
+    private boolean ready = false;
     private boolean restart = false;
     private boolean restart = false;
     private GameWorld gameWorld;
     private GameWorld gameWorld;
     private long timestart;
     private long timestart;
-    @Getter private Arena arena;
+    private Arena arena;
     private ScoreboardManager scoreboardManager;
     private ScoreboardManager scoreboardManager;
     private GameBoundListener listener;
     private GameBoundListener listener;
     private ItemStack customBow;
     private ItemStack customBow;
@@ -319,12 +319,17 @@ public class Game {
         stopTimer();
         stopTimer();
 
 
         applyForAllPlayers(player -> player.teleport(lobby.getAfterGameSpawn()));
         applyForAllPlayers(player -> player.teleport(lobby.getAfterGameSpawn()));
-        if (gameWorld.getWorldName() != null) {
+
+        if (gameWorld != null) {
             gameWorld.sendPlayersBack();
             gameWorld.sendPlayersBack();
             gameWorld.unload();
             gameWorld.unload();
             gameWorld.delete();
             gameWorld.delete();
         }
         }
-        scoreboardManager.removeScoreboard();
+
+        if (scoreboardManager != null) {
+            scoreboardManager.removeScoreboard();
+        }
+
         team1 = null;
         team1 = null;
         team2 = null;
         team2 = null;
     }
     }
@@ -344,7 +349,12 @@ public class Game {
 
 
     public boolean isInGameWorld(Location location) {
     public boolean isInGameWorld(Location location) {
         World world = location.getWorld();
         World world = location.getWorld();
-        return gameWorld.isWorld(world);
+        if (world == null) return false;
+
+        if (gameWorld != null) {
+            return gameWorld.isWorld(world);
+        }
+        return false;
     }
     }
 
 
     public boolean isIn(Location location) {
     public boolean isIn(Location location) {

+ 2 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/timer/GameTimer.java

@@ -34,6 +34,7 @@ public class GameTimer extends Timer {
 
 
     @Override
     @Override
     public void tick() {
     public void tick() {
+        Game game = getGame();
 
 
         switch(seconds) {
         switch(seconds) {
             case 7200:
             case 7200:
@@ -64,7 +65,7 @@ public class GameTimer extends Timer {
         }
         }
 
 
         if (seconds % 10 == 0) {
         if (seconds % 10 == 0) {
-            getGame().getScoreboardManager().updateScoreboard();
+            game.getScoreboardManager().updateScoreboard();
         }
         }
 
 
         seconds--;
         seconds--;

+ 29 - 9
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/GameListener.java

@@ -121,34 +121,54 @@ public class GameListener extends GameBoundListener {
         ItemStack itemStack = e.getItem();
         ItemStack itemStack = e.getItem();
         Game game = getGame();
         Game game = getGame();
 
 
+        // missile spawn with using of a missile spawn egg
         if (VersionUtil.isMonsterEgg(itemStack.getType())) {
         if (VersionUtil.isMonsterEgg(itemStack.getType())) {
             e.setCancelled(true);
             e.setCancelled(true);
-            if (game.getArena().getMissileConfiguration().isOnlyBlockPlaceable() && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
-            if (game.getArena().getMissileConfiguration().isOnlyBlockPlaceable() &&
-                    !isInBetween(player.getLocation().toVector(), getGame().getArena().getPlane1(), getGame().getArena().getPlane2())) {
-                player.sendMessage(MessageConfig.getMessage("missile_place_deny"));
-                return;
+
+            // Can missiles only be spawned if the item interaction was performed on a block (no air)?
+            boolean isOnlyBlockPlaceable = game.getArena().getMissileConfiguration().isOnlyBlockPlaceable();
+            if (isOnlyBlockPlaceable) {
+                if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
+            }
+
+            // Are missiles only allowed to spawn inside the arena, between the two arena spawn points?
+            boolean isOnlyBetweenSpawnPlaceable = game.getArena().getMissileConfiguration().isOnlyBetweenSpawnPlaceable();
+            if (isOnlyBetweenSpawnPlaceable) {
+                if (!isInBetween(player.getLocation().toVector(), getGame().getArena().getPlane1(), getGame().getArena().getPlane2())) {
+                    player.sendMessage(MessageConfig.getMessage("missile_place_deny"));
+                    return;
+                }
             }
             }
-            Missile m = game.getArena().getMissileConfiguration().getMissileFromName(itemStack.getItemMeta().getDisplayName());
-            if (m == null) {
+
+            Missile missile = game.getArena().getMissileConfiguration().getMissileFromName(itemStack.getItemMeta().getDisplayName());
+            if (missile == null) {
                 player.sendMessage(MessageConfig.getMessage("invalid_missile"));
                 player.sendMessage(MessageConfig.getMessage("invalid_missile"));
                 return;
                 return;
             }
             }
             itemStack.setAmount(itemStack.getAmount() - 1);
             itemStack.setAmount(itemStack.getAmount() - 1);
             player.setItemInHand(itemStack);
             player.setItemInHand(itemStack);
-            m.paste(player, MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration()), getGame());
-        } else if (itemStack.getType() == VersionUtil.getFireball()) {
+            missile.paste(player, MissileFacing.getFacingPlayer(player, game.getArena().getMissileConfiguration()), getGame());
+
+            return;
+        }
+
+        // shield spawn with using of a missile spawn egg
+        if (itemStack.getType() == VersionUtil.getFireball()) {
             int amount = e.getItem().getAmount();
             int amount = e.getItem().getAmount();
             e.getItem().setAmount(amount - 1);
             e.getItem().setAmount(amount - 1);
+
             if (amount == 1 && VersionUtil.getVersion() == 8) {
             if (amount == 1 && VersionUtil.getVersion() == 8) {
                 player.getInventory().remove(VersionUtil.getFireball());
                 player.getInventory().remove(VersionUtil.getFireball());
             }
             }
+
             Fireball fb = player.launchProjectile(Fireball.class);
             Fireball fb = player.launchProjectile(Fireball.class);
             fb.setVelocity(player.getLocation().getDirection().multiply(2.5D));
             fb.setVelocity(player.getLocation().getDirection().multiply(2.5D));
             VersionUtil.playFireball(player, fb.getLocation());
             VersionUtil.playFireball(player, fb.getLocation());
             fb.setYield(3F);
             fb.setYield(3F);
             fb.setIsIncendiary(true);
             fb.setIsIncendiary(true);
             fb.setBounce(false);
             fb.setBounce(false);
+
+            return;
         }
         }
     }
     }
 
 

+ 8 - 2
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/PlayerListener.java

@@ -95,6 +95,7 @@ public class PlayerListener implements Listener {
 
 
         Game game = getGame(p.getLocation());
         Game game = getGame(p.getLocation());
         if (game != null) {
         if (game != null) {
+
             if (!game.isIn(game.getLobby().getAfterGameSpawn()))
             if (!game.isIn(game.getLobby().getAfterGameSpawn()))
                 p.teleport(game.getLobby().getAfterGameSpawn());
                 p.teleport(game.getLobby().getAfterGameSpawn());
             else
             else
@@ -107,8 +108,11 @@ public class PlayerListener implements Listener {
         Player p = event.getPlayer();
         Player p = event.getPlayer();
 
 
         Game game = getGame(p.getLocation());
         Game game = getGame(p.getLocation());
-        if (checkJoinOrLeave(p, null, game)) {
-            p.teleport(Config.getFallbackSpawn());
+        if (game != null) {
+
+            if (checkJoinOrLeave(p, null, game)) {
+                p.teleport(Config.getFallbackSpawn());
+            }
         }
         }
     }
     }
 
 
@@ -125,12 +129,14 @@ public class PlayerListener implements Listener {
     public void onMove(PlayerMoveEvent event) {
     public void onMove(PlayerMoveEvent event) {
         Game to = getGame(event.getTo());
         Game to = getGame(event.getTo());
         Game from = getGame(event.getFrom());
         Game from = getGame(event.getFrom());
+
         if (checkJoinOrLeave(event.getPlayer(), from, to)) {
         if (checkJoinOrLeave(event.getPlayer(), from, to)) {
             event.setCancelled(true);
             event.setCancelled(true);
             Vector addTo = event.getFrom().toVector().subtract(event.getTo().toVector()).multiply(3);
             Vector addTo = event.getFrom().toVector().subtract(event.getTo().toVector()).multiply(3);
             addTo.setY(0);
             addTo.setY(0);
             event.getPlayer().teleport(event.getFrom().add(addTo));
             event.getPlayer().teleport(event.getFrom().add(addTo));
         }
         }
+
     }
     }
 
 
     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
     @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)

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

+ 5 - 7
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/SetupUtil.java

@@ -23,12 +23,9 @@ import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.game.Arenas;
 import de.butzlabben.missilewars.game.Arenas;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
 import de.butzlabben.missilewars.wrapper.abstracts.Arena;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import java.io.*;
 import java.net.URL;
 import java.net.URL;
 import java.nio.file.Files;
 import java.nio.file.Files;
 import java.util.Enumeration;
 import java.util.Enumeration;
@@ -36,7 +33,6 @@ import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipInputStream;
-import org.bukkit.plugin.java.JavaPlugin;
 
 
 /**
 /**
  * @author Butzlabben
  * @author Butzlabben
@@ -123,6 +119,8 @@ public class SetupUtil {
         Files.copy(in, out.toPath());
         Files.copy(in, out.toPath());
 
 
         unzip(out.getPath(), outputFolder);
         unzip(out.getPath(), outputFolder);
+
+        // delete the ZIP files after server stopping
         out.deleteOnExit();
         out.deleteOnExit();
     }
     }
 
 

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

+ 8 - 19
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/abstracts/arena/MissileConfiguration.java

@@ -21,17 +21,14 @@ package de.butzlabben.missilewars.wrapper.abstracts.arena;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.wrapper.missile.Missile;
 import de.butzlabben.missilewars.wrapper.missile.Missile;
 import de.butzlabben.missilewars.wrapper.missile.MissileFacing;
 import de.butzlabben.missilewars.wrapper.missile.MissileFacing;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 import lombok.Getter;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.ToString;
 import lombok.ToString;
 import org.bukkit.entity.EntityType;
 import org.bukkit.entity.EntityType;
 
 
+import java.io.File;
+import java.util.*;
+
 
 
 @Getter
 @Getter
 @RequiredArgsConstructor
 @RequiredArgsConstructor
@@ -46,7 +43,8 @@ public class MissileConfiguration {
     private boolean eastFacing = true;
     private boolean eastFacing = true;
     private boolean southFacing = true;
     private boolean southFacing = true;
     private boolean westFacing = true;
     private boolean westFacing = true;
-    private List<Missile> missiles = new ArrayList<Missile>() {{
+
+    private List<Missile> missiles = new ArrayList<>() {{
         add(new Missile("Tomahawk.schematic", "&aTomahawk", EntityType.CREEPER, 2, 2, 3));
         add(new Missile("Tomahawk.schematic", "&aTomahawk", EntityType.CREEPER, 2, 2, 3));
         add(new Missile("Cruiser.schematic", "&eCruiser", EntityType.BLAZE, 2, 2, 2));
         add(new Missile("Cruiser.schematic", "&eCruiser", EntityType.BLAZE, 2, 2, 2));
         add(new Missile("Sword.schematic", "&7Sword", EntityType.SKELETON, 2, 2, 2));
         add(new Missile("Sword.schematic", "&7Sword", EntityType.SKELETON, 2, 2, 2));
@@ -57,14 +55,17 @@ public class MissileConfiguration {
 
 
     public List<MissileFacing> getEnabledFacings() {
     public List<MissileFacing> getEnabledFacings() {
         List<MissileFacing> enabledDirections = new ArrayList<>();
         List<MissileFacing> enabledDirections = new ArrayList<>();
+
         if (northFacing) enabledDirections.add(MissileFacing.NORTH);
         if (northFacing) enabledDirections.add(MissileFacing.NORTH);
         if (eastFacing) enabledDirections.add(MissileFacing.EAST);
         if (eastFacing) enabledDirections.add(MissileFacing.EAST);
         if (southFacing) enabledDirections.add(MissileFacing.SOUTH);
         if (southFacing) enabledDirections.add(MissileFacing.SOUTH);
         if (westFacing) enabledDirections.add(MissileFacing.WEST);
         if (westFacing) enabledDirections.add(MissileFacing.WEST);
+
         if (enabledDirections.isEmpty()) {
         if (enabledDirections.isEmpty()) {
             Logger.WARN.log("All facings were disabled for an arena. Please correct this issue");
             Logger.WARN.log("All facings were disabled for an arena. Please correct this issue");
             enabledDirections.addAll(Arrays.asList(MissileFacing.values()));
             enabledDirections.addAll(Arrays.asList(MissileFacing.values()));
         }
         }
+
         return enabledDirections;
         return enabledDirections;
     }
     }
 
 
@@ -76,18 +77,6 @@ public class MissileConfiguration {
         return null;
         return null;
     }
     }
 
 
-    public Missile getMissileFromType(EntityType type) {
-        for (Missile m : missiles) {
-            if (m.getType() == type)
-                return m;
-        }
-        return null;
-    }
-
-    public Missile getMissileFromID(int i) {
-        return missiles.get(i);
-    }
-
     public void check() {
     public void check() {
         Set<Missile> toRemove = new HashSet<>();
         Set<Missile> toRemove = new HashSet<>();
         for (Missile missile : missiles) {
         for (Missile missile : missiles) {

+ 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.MissileWars;
 import de.butzlabben.missilewars.game.Game;
 import de.butzlabben.missilewars.game.Game;
 import de.butzlabben.missilewars.util.serialization.LocationTypeAdapter;
 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.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
-import lombok.Getter;
-import org.bukkit.Location;
 
 
 @Getter
 @Getter
 public class SignRepository {
 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<>();
     private final List<MWSign> signs = new ArrayList<>();
 
 
     public static SignRepository load() {
     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) {
     public Optional<MWSign> getSign(Location location) {
         return MissileWars.getInstance().getSignRepository().getSigns()
         return MissileWars.getInstance().getSignRepository().getSigns()
                 .stream().filter(sign -> sign.isLocation(location)).findAny();
                 .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();
         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))) {
              JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8))) {
             writer.setIndent("  ");
             writer.setIndent("  ");
             gson.toJson(this, SignRepository.class, writer);
             gson.toJson(this, SignRepository.class, writer);