diff --git a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java index dcb2865..71147d8 100644 --- a/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java +++ b/src/main/java/buttondevteam/lib/player/ChromaGamerBase.java @@ -4,6 +4,9 @@ import java.io.File; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; +import java.util.function.BiConsumer; +import java.util.function.Consumer; import org.bukkit.configuration.file.YamlConfiguration; @@ -14,41 +17,36 @@ public abstract class ChromaGamerBase implements AutoCloseable { 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 static String getFolderForType(Class cl) { + return playerTypes.get(cl); + } + /** * 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. */ public abstract String getFileName(); /** - * This method returns the folder the file is in. For example, for Minecraft data, this should be "minecraft", for Discord, "discord", etc. + * The 'id' must be always set */ - public abstract String getFolder(); - 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); } } - */ + public String getID() { + return plugindata != null ? plugindata.getString("id") : null; + } protected static T getUser(String fname, Class cl) { try { T obj = cl.newInstance(); - obj.plugindata = YamlConfiguration // TODO: Put all IDs + obj.plugindata = YamlConfiguration .loadConfiguration(new File(TBMC_PLAYERS_DIR + playerTypes.get(cl), fname)); return obj; } catch (Exception e) { @@ -59,6 +57,18 @@ public abstract class ChromaGamerBase implements AutoCloseable { @Override public void close() throws Exception { - plugindata.save(new File(TBMC_PLAYERS_DIR + getFolder(), getFileName())); + plugindata.save(new File(TBMC_PLAYERS_DIR + getFolderForType(getClass()), getFileName())); + } + + public void connectWith(T user) { + // Set the ID, go through all linked files and connect them as well + plugindata.set(playerTypes.get(user.getClass()) + "_id", user.plugindata.getString("id")); + final String ownFolder = getFolderForType(getClass()); + user.plugindata.set(ownFolder + "_id", plugindata.getString("id")); + BiConsumer sync = (pdata1, pdata2) -> { + for (Entry, String> entry : playerTypes.entrySet()) + if (pdata1.contains(entry.getValue() + "_id", false)) + pdata2.set(entry.getValue() + "_id", pdata1.getString(entry.getValue() + "_id")); + }; // ... } } diff --git a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java index ae7620a..3b0ce71 100644 --- a/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java +++ b/src/main/java/buttondevteam/lib/player/TBMCPlayerBase.java @@ -17,11 +17,6 @@ public abstract class TBMCPlayerBase extends ChromaGamerBase { return getUUID().toString(); } - @Override - public String getFolder() { - return FOLDER_NAME; - } - // protected ConfigurationSection plugindata; /*