Sfoglia il codice sorgente

Fixing player data loading from temp data file

RedstoneFuture 2 anni fa
parent
commit
d9c58f77c1

+ 4 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/MissileWars.java

@@ -30,6 +30,7 @@ import de.butzlabben.missilewars.game.signs.SignRepository;
 import de.butzlabben.missilewars.game.stats.StatsFetcher;
 import de.butzlabben.missilewars.game.stats.StatsFetcher;
 import de.butzlabben.missilewars.listener.PlayerListener;
 import de.butzlabben.missilewars.listener.PlayerListener;
 import de.butzlabben.missilewars.listener.SignListener;
 import de.butzlabben.missilewars.listener.SignListener;
+import de.butzlabben.missilewars.player.PlayerData;
 import de.butzlabben.missilewars.util.ConnectionHolder;
 import de.butzlabben.missilewars.util.ConnectionHolder;
 import de.butzlabben.missilewars.util.MoneyUtil;
 import de.butzlabben.missilewars.util.MoneyUtil;
 import de.butzlabben.missilewars.util.SetupUtil;
 import de.butzlabben.missilewars.util.SetupUtil;
@@ -39,6 +40,7 @@ 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;
 import org.bukkit.Bukkit;
 import org.bukkit.Bukkit;
+import org.bukkit.configuration.serialization.ConfigurationSerialization;
 import org.bukkit.entity.Player;
 import org.bukkit.entity.Player;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.bukkit.plugin.java.JavaPlugin;
 
 
@@ -124,6 +126,8 @@ public class MissileWars extends JavaPlugin {
         }
         }
         
         
         checkPlaceholderAPI();
         checkPlaceholderAPI();
+
+        ConfigurationSerialization.registerClass(PlayerData.class);
         
         
         endTime = System.currentTimeMillis();
         endTime = System.currentTimeMillis();
         Logger.SUCCESS.log("MissileWars was enabled in " + (endTime - startTime) + "ms");
         Logger.SUCCESS.log("MissileWars was enabled in " + (endTime - startTime) + "ms");

+ 17 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/player/PlayerData.java

@@ -30,6 +30,7 @@ import org.bukkit.inventory.ItemStack;
 
 
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map;
 import java.util.UUID;
 import java.util.UUID;
@@ -57,6 +58,20 @@ public class PlayerData implements ConfigurationSerializable {
         time = System.currentTimeMillis();
         time = System.currentTimeMillis();
     }
     }
 
 
+    /**
+     * This method is used to load the original player data from the temporary player-data file.
+     */
+    public PlayerData(Map<String, Object> elements) {
+        uuid = UUID.fromString(elements.get("uuid").toString());
+        contents = ((ArrayList<ItemStack>) elements.get("contents")).toArray(new ItemStack[]{});
+        gameMode = GameMode.valueOf(elements.get("gamemode").toString());
+        health = Double.parseDouble(elements.get("health").toString());
+        exp = Float.parseFloat(elements.get("exp").toString());
+        expLevel = Integer.parseInt(elements.get("exp-level").toString());
+        foodLevel = Integer.parseInt(elements.get("food-level").toString());
+        time = Long.parseLong(elements.get("time").toString());
+    }
+
     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");
 
 
@@ -68,6 +83,7 @@ public class PlayerData implements ConfigurationSerializable {
         } else {
         } else {
             data = (PlayerData) yamlConfiguration.get("data");
             data = (PlayerData) yamlConfiguration.get("data");
         }
         }
+
         return data;
         return data;
     }
     }
 
 
@@ -95,7 +111,7 @@ public class PlayerData implements ConfigurationSerializable {
     }
     }
 
 
     /**
     /**
-     * This method is used to save the player infos in the temp player-data file.
+     * This method is used to save the original player data in the temporary player-data file.
      */
      */
     @Override
     @Override
     public Map<String, Object> serialize() {
     public Map<String, Object> serialize() {