From 27a92b164e2049f22334558a1a3a8426c7d1d08d Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 16 Jan 2017 19:49:43 +0100 Subject: [PATCH] Making progress on player data stuff --- .../lib/player/ChromaGamerBase.java | 53 +++++++++++++++++-- .../lib/player/TBMCPlayerBase.java | 26 ++++++++- 2 files changed, 74 insertions(+), 5 deletions(-) diff --git a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java index c2b78c0..dcb2865 100644 --- a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java +++ b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java @@ -1,8 +1,27 @@ package buttondevteam.lib.player; -import org.bukkit.configuration.ConfigurationSection; +import java.io.File; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.configuration.file.YamlConfiguration; + +import buttondevteam.lib.TBMCCoreAPI; + +public abstract class ChromaGamerBase implements AutoCloseable { + private static final String TBMC_PLAYERS_DIR = "TBMC/players/"; + + private static final HashMap, String> playerTypes = new HashMap<>(); + + public static Map, String> getPlayerTypes() { + return Collections.unmodifiableMap(playerTypes); + } + + public static void addPlayerType(Class cl, String folder) { + playerTypes.put(cl, folder); + } -public abstract class ChromaGamerBase { /** * This method returns the filename for this player data. For example, for Minecraft-related data, use MC UUIDs, for Discord data, use Discord IDs, etc. */ @@ -13,5 +32,33 @@ public abstract class ChromaGamerBase { */ public abstract String getFolder(); - protected ConfigurationSection plugindata; + protected YamlConfiguration plugindata; + + public YamlConfiguration getData() { + return plugindata; + } + + // protected void load() { + /* + * public static void load() { try { plugindata = YamlConfiguration.loadConfiguration(new File(getFolder(), getFileName())); } catch (Exception e) { + * TBMCCoreAPI.SendException("An error occured while loading gamer data", e); } } protected void save() { try { plugindata.save(new File(getFolder(), getFileName())); } catch (Exception e) { + * TBMCCoreAPI.SendException("An error occured while saving gamer data", e); } } + */ + + protected static T getUser(String fname, Class cl) { + try { + T obj = cl.newInstance(); + obj.plugindata = YamlConfiguration // TODO: Put all IDs + .loadConfiguration(new File(TBMC_PLAYERS_DIR + playerTypes.get(cl), fname)); + return obj; + } catch (Exception e) { + TBMCCoreAPI.SendException("An error occured while loading a " + cl.getSimpleName() + "!", e); + } + return null; + } + + @Override + public void close() throws Exception { + plugindata.save(new File(TBMC_PLAYERS_DIR + getFolder(), getFileName())); + } } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java index f6c0fc7..ae7620a 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java @@ -3,7 +3,12 @@ package buttondevteam.lib.player; import java.util.UUID; public abstract class TBMCPlayerBase extends ChromaGamerBase { - public abstract UUID getUUID(); + private static final String FOLDER_NAME = "minecraft"; + protected UUID uuid; + + public UUID getUUID() { + return uuid; + } public abstract String getPluginName(); @@ -14,6 +19,23 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { @Override public String getFolder() { - return "minecraft"; + return FOLDER_NAME; + } + + // protected ConfigurationSection plugindata; + + /* + * public static void load() { super.load(); plugindata = super.plugindata.getConfigurationSection(getPluginName()); if (plugindata == null) plugindata = + * super.plugindata.createSection(getPluginName()); } protected void save() { plugindata = super.plugindata.createSection(getPluginName(), plugindata.getValues(true)); super.save(); } + */ + + static { + addPlayerType(TBMCPlayerBase.class, FOLDER_NAME); + } + + public static T getPlayer(UUID uuid, Class cl) { + T obj = ChromaGamerBase.getUser(uuid.toString(), cl); + obj.uuid = uuid; + return obj; } }