From 33ba5c9d31713c76ee80b5ff2a68f28d17f7f069 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 15 Jun 2021 15:47:25 +0100 Subject: [PATCH] Reworked data to just have a call to retrieve a JSON config that can be modified --- .../java/com/willfp/eco/core/data/Data.java | 127 +++++------------- .../config/json/JSONConfigWrapper.java | 15 ++- .../willfp/eco/spigot/EcoSpigotPlugin.java | 12 +- .../config/{TestJson.java => DataJson.java} | 8 +- .../com/willfp/eco/spigot/config/DataYml.java | 16 --- 5 files changed, 56 insertions(+), 122 deletions(-) rename eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/{TestJson.java => DataJson.java} (60%) delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataYml.java diff --git a/eco-api/src/main/java/com/willfp/eco/core/data/Data.java b/eco-api/src/main/java/com/willfp/eco/core/data/Data.java index 5632f636..3b1c2c2c 100644 --- a/eco-api/src/main/java/com/willfp/eco/core/data/Data.java +++ b/eco-api/src/main/java/com/willfp/eco/core/data/Data.java @@ -1,12 +1,13 @@ package com.willfp.eco.core.data; -import com.willfp.eco.core.config.BaseConfig; +import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.config.Config; -import com.willfp.eco.internal.config.yaml.ConfigSection; +import com.willfp.eco.core.config.JSONConfig; +import com.willfp.eco.core.config.JsonStaticBaseConfig; +import com.willfp.eco.internal.config.LoadableConfig; +import com.willfp.eco.internal.config.json.JSONConfigSection; import lombok.experimental.UtilityClass; -import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; -import org.bukkit.configuration.file.YamlConfiguration; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -20,93 +21,21 @@ public class Data { /** * Instance of eco data.yml. */ - private static BaseConfig dataYml = null; + private static JSONConfig datafile = null; /** * All cached player data. */ - private static final Map PLAYER_DATA = new HashMap<>(); + private static final Map> PLAYER_DATA = new HashMap<>(); /** - * Write an integer to a player's data. + * Initialize the player data with an instance of data.json. * - * @param player The player. - * @param key The key. - * @param data The data. - */ - public void writeInt(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key, - final int data) { - getPlayerConfig(player).set(key.toString(), data); - } - - /** - * Write a string to a player's data. - * - * @param player The player. - * @param key The key. - * @param data The data. - */ - public void writeString(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key, - @NotNull final String data) { - getPlayerConfig(player).set(key.toString(), data); - } - - /** - * Write a double to a player's data. - * - * @param player The player. - * @param key The key. - * @param data The data. - */ - public void writeDouble(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key, - final double data) { - getPlayerConfig(player).set(key.toString(), data); - } - - /** - * Read an integer from a player's data. - * - * @param player The player. - * @param key The key. - */ - public int readInt(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key) { - return getPlayerConfig(player).getInt(key.toString()); - } - - /** - * Read a string from a player's data. - * - * @param player The player. - * @param key The key. - */ - public String readString(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key) { - return getPlayerConfig(player).getString(key.toString()); - } - - /** - * Read a double from a player's data. - * - * @param player The player. - * @param key The key. - */ - public double readDouble(@NotNull final OfflinePlayer player, - @NotNull final NamespacedKey key) { - return getPlayerConfig(player).getDouble(key.toString()); - } - - /** - * Initialize the player data with an instance of data.yml. - * - * @param config data.yml. + * @param config data.json. */ @ApiStatus.Internal - public void init(@NotNull final BaseConfig config) { - dataYml = config; + public void init(@NotNull final JsonStaticBaseConfig config) { + datafile = config; } /** @@ -116,25 +45,35 @@ public class Data { * @throws IOException Error during saving. */ @ApiStatus.Internal - public void save(@NotNull final BaseConfig config) throws IOException { - for (Map.Entry entry : PLAYER_DATA.entrySet()) { - for (String key : entry.getValue().getKeys(false)) { - config.set("player-data." + entry.getKey().toString() + "." + key, entry.getValue().get(key)); - } + public void save(@NotNull final Config config) throws IOException { + for (Map.Entry> entry : PLAYER_DATA.entrySet()) { + entry.getValue().forEach((plugin, jsonConfig) -> { + for (String key : jsonConfig.getKeys(false)) { + config.set("player-data." + plugin.getName().toLowerCase() + "." + entry.getKey().toString() + "." + key, jsonConfig); + } + }); } - config.save(); + ((LoadableConfig) config).save(); } - private Config getPlayerConfig(@NotNull final OfflinePlayer player) { - Config config = PLAYER_DATA.get(player.getUniqueId()); + /** + * Get the data for a player. + * + * @param player The player. + * @param plugin The plugin. + * @return The data. + */ + public JSONConfig getData(@NotNull final OfflinePlayer player, + @NotNull final EcoPlugin plugin) { + JSONConfig config = PLAYER_DATA.get(player.getUniqueId()).get(plugin); if (config == null) { - config = dataYml.getSubsectionOrNull("player-data." + player.getUniqueId()); + config = (JSONConfig) datafile.getSubsectionOrNull("player-data." + plugin.getName().toLowerCase() + "." + player.getUniqueId()); if (config == null) { - config = new ConfigSection(new YamlConfiguration()); + config = new JSONConfigSection(new HashMap<>()); } - PLAYER_DATA.put(player.getUniqueId(), config); - return getPlayerConfig(player); + PLAYER_DATA.get(player.getUniqueId()).put(plugin, config); + return getData(player, plugin); } return config; diff --git a/eco-api/src/main/java/com/willfp/eco/internal/config/json/JSONConfigWrapper.java b/eco-api/src/main/java/com/willfp/eco/internal/config/json/JSONConfigWrapper.java index f08fb543..a15fd0e1 100644 --- a/eco-api/src/main/java/com/willfp/eco/internal/config/json/JSONConfigWrapper.java +++ b/eco-api/src/main/java/com/willfp/eco/internal/config/json/JSONConfigWrapper.java @@ -19,7 +19,7 @@ import java.util.Objects; import java.util.Set; @SuppressWarnings({"unchecked", "unused"}) -public abstract class JSONConfigWrapper implements JSONConfig { +public abstract class JSONConfigWrapper implements JSONConfig, Cloneable { /** * The linked {@link ConfigurationSection} where values are physically stored. */ @@ -145,7 +145,13 @@ public abstract class JSONConfigWrapper implements JSONConfig { section.setRecursively(path.substring(closestPath.length() + 1), object, false); values.put(closestPath, section.getValues()); } else { - values.put(path, object); + Object obj = object; + + if (object instanceof JSONConfig) { + obj = ((JSONConfigWrapper) object).getValues(); + } + + values.put(path, obj); } } @@ -324,4 +330,9 @@ public abstract class JSONConfigWrapper implements JSONConfig { return null; } } + + @Override + public JSONConfigWrapper clone() { + return new JSONConfigSection(new HashMap<>(this.getValues())); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java index 0ccaeff9..93d69690 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/EcoSpigotPlugin.java @@ -13,7 +13,7 @@ import com.willfp.eco.core.integrations.mcmmo.McmmoManager; import com.willfp.eco.proxy.proxies.BlockBreakProxy; import com.willfp.eco.proxy.proxies.SkullProxy; import com.willfp.eco.proxy.proxies.TridentStackProxy; -import com.willfp.eco.spigot.config.DataYml; +import com.willfp.eco.spigot.config.DataJson; import com.willfp.eco.spigot.display.PacketAutoRecipe; import com.willfp.eco.spigot.display.PacketChat; import com.willfp.eco.spigot.display.PacketOpenWindowMerchant; @@ -60,9 +60,9 @@ public class EcoSpigotPlugin extends EcoPlugin { private static EcoSpigotPlugin instance; /** - * data.yml. + * data.json. */ - private final DataYml dataYml; + private final DataJson dataJson; /** * Create a new instance of eco. @@ -81,8 +81,8 @@ public class EcoSpigotPlugin extends EcoPlugin { TridentStackProxy tridentStackProxy = InternalProxyUtils.getProxy(TridentStackProxy.class); TridentUtils.initialize(tridentStackProxy::getTridentStack); - this.dataYml = new DataYml(this); - Data.init(this.dataYml); + this.dataJson = new DataJson(this); + Data.init(this.dataJson); } @Override @@ -93,7 +93,7 @@ public class EcoSpigotPlugin extends EcoPlugin { @Override public void disable() { try { - Data.save(this.dataYml); + Data.save(this.dataJson); } catch (IOException e) { e.printStackTrace(); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/TestJson.java b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataJson.java similarity index 60% rename from eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/TestJson.java rename to eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataJson.java index 651ae637..1a799588 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/TestJson.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataJson.java @@ -4,13 +4,13 @@ import com.willfp.eco.core.config.JsonStaticBaseConfig; import com.willfp.eco.spigot.EcoSpigotPlugin; import org.jetbrains.annotations.NotNull; -public class TestJson extends JsonStaticBaseConfig { +public class DataJson extends JsonStaticBaseConfig { /** - * Init data.yml. + * Init data.json. * * @param plugin EcoSpigotPlugin. */ - public TestJson(@NotNull final EcoSpigotPlugin plugin) { - super("test", plugin); + public DataJson(@NotNull final EcoSpigotPlugin plugin) { + super("data", plugin); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataYml.java b/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataYml.java deleted file mode 100644 index b128b62d..00000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/eco/spigot/config/DataYml.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.willfp.eco.spigot.config; - -import com.willfp.eco.core.config.BaseConfig; -import com.willfp.eco.spigot.EcoSpigotPlugin; -import org.jetbrains.annotations.NotNull; - -public class DataYml extends BaseConfig { - /** - * Init data.yml. - * - * @param plugin EcoSpigotPlugin. - */ - public DataYml(@NotNull final EcoSpigotPlugin plugin) { - super("data", false, plugin); - } -}