diff --git a/src/main/java/com/benjocraeft/sharehealth/FileManager.java b/src/main/java/com/benjocraeft/sharehealth/FileManager.java index 6b5d4e5..87252ac 100644 --- a/src/main/java/com/benjocraeft/sharehealth/FileManager.java +++ b/src/main/java/com/benjocraeft/sharehealth/FileManager.java @@ -10,21 +10,22 @@ public class FileManager { final private File statisticsFile; final private File statusFile; + final private File pluginFolder = new File(System.getProperty("user.dir"), "plugins/sharehealth"); + final private String pluginPath = pluginFolder.getPath(); public FileManager(){ - File pluginFolder = new File(System.getProperty("user.dir"), "plugins/sharehealth"); - String pluginPath = pluginFolder.getPath(); + Logger logger = Sharehealth.Instance.getLogger(); //Prepare storage folder if (pluginFolder.mkdirs()){ - //TODO Log + logger.info(pluginFolder.getName() + " created"); } settingsFile = new File(pluginPath + "/settings.txt"); statisticsFile = new File(pluginPath + "/statistics.txt"); statusFile = new File(pluginPath + "/status.txt"); - Logger logger = Sharehealth.Instance.getLogger(); + try { if (settingsFile.createNewFile()) logger.info(settingsFile.getName() + " created"); @@ -84,6 +85,10 @@ public class FileManager { } public void saveStatistics(Map> statistics){ + saveStatistics(statisticsFile, statistics); + } + + private void saveStatistics(File file, Map> statistics){ Map map = new HashMap<>(); statistics.forEach((UUID uuid, Pair pair) -> { @@ -91,7 +96,7 @@ public class FileManager { map.put(uuidString, Statistics.Rounded(pair.first) + "," + Statistics.Rounded(pair.second)); }); - saveToFile(statisticsFile, map); + saveToFile(file, map); } public void saveStatus(Map statusMap){ @@ -106,6 +111,20 @@ public class FileManager { saveToFile(settingsFile, map); } + public void backupStats(Map> statistics){ + Date date = new Date(); + String dateString = String.valueOf(date.getTime()); + File backupFile = new File(pluginPath + "/statistics_" + dateString + ".txt"); + try { + if (backupFile.createNewFile()){ + Sharehealth.Instance.getLogger().info(backupFile.getName() + " created"); + saveStatistics(backupFile, statistics); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + private Map loadFromFile(File file) { Map map = new HashMap<>(); diff --git a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java index cdd9da7..bb62fd2 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java +++ b/src/main/java/com/benjocraeft/sharehealth/Sharehealth.java @@ -84,6 +84,7 @@ public class Sharehealth extends JavaPlugin { @Override public void onDisable() { saveStatus(); + fileManager.saveStatistics(statistics.getStatistics()); getLogger().info("ShareHealth has been disabled!"); } @@ -174,6 +175,9 @@ public class Sharehealth extends JavaPlugin { void reset(){ isFailed = false; + fileManager.backupStats(statistics.getStatistics()); + statistics.reset(); + fileManager.saveStatistics(statistics.getStatistics()); healthManager.reset(); Bukkit.getOnlinePlayers().forEach(p -> p.setGameMode(GameMode.SURVIVAL)); diff --git a/src/main/java/com/benjocraeft/sharehealth/Statistics.java b/src/main/java/com/benjocraeft/sharehealth/Statistics.java index dfa6f11..eb44e19 100644 --- a/src/main/java/com/benjocraeft/sharehealth/Statistics.java +++ b/src/main/java/com/benjocraeft/sharehealth/Statistics.java @@ -1,5 +1,6 @@ package com.benjocraeft.sharehealth; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; @@ -35,11 +36,7 @@ public class Statistics { } public void onPlayerJoined(Player player){ - UUID uuid = player.getUniqueId(); - Pair empty = Pair.pair(0., 0.); - statistics.putIfAbsent(uuid, empty); - settings.putIfAbsent(uuid, true); - + putIfAbsent(player); } void onPlayerRegainedHealth(Player player, double amount){ @@ -54,4 +51,16 @@ public class Statistics { statistics.put(uuid, Pair.pair(oldPair.first + amount, oldPair.second)); } + private void putIfAbsent(Player player){ + UUID uuid = player.getUniqueId(); + Pair empty = Pair.pair(0., 0.); + statistics.putIfAbsent(uuid, empty); + settings.putIfAbsent(uuid, true); + } + + void reset(){ + statistics.clear(); + Bukkit.getOnlinePlayers().forEach(this::putIfAbsent); + } + }