소스 검색

Merge pull request #52 from RedstoneFuture/Refactoring/PlayerData

Refactoring
Daniel 2 년 전
부모
커밋
3b9916e06b

+ 44 - 34
missilewars-plugin/src/main/java/de/butzlabben/missilewars/util/PlayerDataProvider.java

@@ -21,66 +21,76 @@ package de.butzlabben.missilewars.util;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.Logger;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.MissileWars;
 import de.butzlabben.missilewars.wrapper.player.PlayerData;
 import de.butzlabben.missilewars.wrapper.player.PlayerData;
+import org.bukkit.GameMode;
+import org.bukkit.entity.Player;
+
 import java.io.File;
 import java.io.File;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.UUID;
 import java.util.UUID;
-import org.bukkit.entity.Player;
 
 
 public class PlayerDataProvider {
 public class PlayerDataProvider {
 
 
-    private static final PlayerDataProvider ourInstance = new PlayerDataProvider();
-
-    private final String path = "data";
+    private static final PlayerDataProvider instance = new PlayerDataProvider();
     private final HashMap<UUID, PlayerData> data = new HashMap<>();
     private final HashMap<UUID, PlayerData> data = new HashMap<>();
+    private final File playerDataDirectory;
 
 
     private PlayerDataProvider() {
     private PlayerDataProvider() {
+        playerDataDirectory = new File(MissileWars.getInstance().getDataFolder(), "data");
+        playerDataDirectory.mkdirs();
     }
     }
 
 
     public static PlayerDataProvider getInstance() {
     public static PlayerDataProvider getInstance() {
-        return ourInstance;
+        return instance;
     }
     }
 
 
     public void storeInventory(Player player) {
     public void storeInventory(Player player) {
-        if (hasData(player.getUniqueId()))
-            return;
+        UUID uuid = player.getUniqueId();
+        if (data.containsKey(uuid)) return;
+
+        File file = getPathFromUUID(uuid);
+        if (file.exists() && file.isFile()) return;
+
         PlayerData playerData = new PlayerData(player);
         PlayerData playerData = new PlayerData(player);
-        data.put(player.getUniqueId(), playerData);
-        playerData.saveToFile(getPathFromUUID(player.getUniqueId()).getPath());
+        data.put(uuid, playerData);
+        playerData.saveToFile(file.getPath());
     }
     }
 
 
     public void loadInventory(Player player) {
     public void loadInventory(Player player) {
-        PlayerData data;
+        UUID uuid = player.getUniqueId();
+        PlayerData playerData = null;
         File file = getPathFromUUID(player.getUniqueId());
         File file = getPathFromUUID(player.getUniqueId());
-        if (this.data.containsKey(player.getUniqueId())) {
-            data = this.data.remove(player.getUniqueId());
-        } else {
-            if (file.exists()) {
-                data = PlayerData.loadFromFile(file);
-            } else {
-                player.getInventory().clear();
-                player.setLevel(0);
-                Logger.WARN.log("Could not find inventory for " + player.getUniqueId());
-                return;
-            }
+
+        // getting data
+        if (data.containsKey(uuid)) {
+            playerData = data.get(uuid);
+        } else if (file.exists()) {
+            playerData = PlayerData.loadFromFile(file);
         }
         }
-        if (file.exists())
-            file.delete();
-        if (data != null) {
-            data.apply(player);
+
+        // applying data
+        if (playerData != null) {
+            playerData.apply(player);
+        } else {
+            applyDefaultValues(player);
+            Logger.WARN.log("Could not find inventory for " + uuid);
+            return;
         }
         }
+
+        // deleting old data
+        if (data.containsKey(uuid)) data.remove(uuid);
+        if (file.exists()) file.delete();
     }
     }
 
 
     public File getPathFromUUID(UUID uuid) {
     public File getPathFromUUID(UUID uuid) {
-        File file = new File(MissileWars.getInstance().getDataFolder(), path);
-        file.mkdirs();
-        return new File(file, uuid.toString() + ".yml");
+        return new File(playerDataDirectory, uuid.toString() + ".yml");
     }
     }
 
 
-    public boolean hasData(UUID uuid) {
-        if (data.containsKey(uuid))
-            return true;
-        File file = getPathFromUUID(uuid);
-        return file.exists() && file.isFile();
-
+    public static void applyDefaultValues(Player player) {
+        player.getInventory().clear();
+        player.setExp(0);
+        player.setLevel(0);
+        player.setHealth(player.getMaxHealth());
+        player.setFoodLevel(20);
+        player.setGameMode(GameMode.SURVIVAL);
     }
     }
 }
 }

+ 16 - 10
missilewars-plugin/src/main/java/de/butzlabben/missilewars/wrapper/player/PlayerData.java

@@ -20,11 +20,6 @@ package de.butzlabben.missilewars.wrapper.player;
 
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Preconditions;
 import de.butzlabben.missilewars.util.version.VersionUtil;
 import de.butzlabben.missilewars.util.version.VersionUtil;
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.ToString;
 import lombok.ToString;
 import org.bukkit.GameMode;
 import org.bukkit.GameMode;
@@ -33,6 +28,12 @@ import org.bukkit.configuration.serialization.ConfigurationSerializable;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.inventory.ItemStack;
 
 
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
 @ToString
 @ToString
 @AllArgsConstructor
 @AllArgsConstructor
 public class PlayerData implements ConfigurationSerializable {
 public class PlayerData implements ConfigurationSerializable {
@@ -58,8 +59,10 @@ public class PlayerData implements ConfigurationSerializable {
 
 
     public static PlayerData loadFromFile(File file) {
     public static PlayerData loadFromFile(File file) {
         Preconditions.checkArgument(file.isFile(), file.getAbsolutePath() + " is not a file");
         Preconditions.checkArgument(file.isFile(), file.getAbsolutePath() + " is not a file");
+
         YamlConfiguration yamlConfiguration = YamlConfiguration.loadConfiguration(file);
         YamlConfiguration yamlConfiguration = YamlConfiguration.loadConfiguration(file);
         PlayerData data;
         PlayerData data;
+
         if (VersionUtil.getVersion() > 12) {
         if (VersionUtil.getVersion() > 12) {
             data = yamlConfiguration.getSerializable("data", PlayerData.class);
             data = yamlConfiguration.getSerializable("data", PlayerData.class);
         } else {
         } else {
@@ -69,7 +72,9 @@ public class PlayerData implements ConfigurationSerializable {
     }
     }
 
 
     public void apply(Player player) {
     public void apply(Player player) {
-        Preconditions.checkArgument(player.getUniqueId().equals(uuid));
+        Preconditions.checkArgument(player.getUniqueId().equals(uuid),
+                player + " is not the user of this data (data UUID: " + uuid + ")");
+
         player.getInventory().setContents(contents);
         player.getInventory().setContents(contents);
         player.setExp(exp);
         player.setExp(exp);
         player.setLevel(expLevel);
         player.setLevel(expLevel);
@@ -77,12 +82,13 @@ public class PlayerData implements ConfigurationSerializable {
         player.setFoodLevel(foodLevel);
         player.setFoodLevel(foodLevel);
         player.setGameMode(gameMode);
         player.setGameMode(gameMode);
     }
     }
-
+    
     public void saveToFile(String file) {
     public void saveToFile(String file) {
-        YamlConfiguration yamlConfiguration = new YamlConfiguration();
-        yamlConfiguration.set("data", this);
+        YamlConfiguration config = new YamlConfiguration();
+        config.set("data", this);
+
         try {
         try {
-            yamlConfiguration.save(file);
+            config.save(file);
         } catch (IOException e) {
         } catch (IOException e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }