From a97f01e48825a3204bbc533fbeaf81df5115e51f Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 20 Sep 2021 12:24:32 +0100 Subject: [PATCH] Rewrote data storage to use abstract DataHandler interface in preparation for SQL support --- .../com/willfp/ecoskills/EcoSkillsPlugin.java | 28 ++++++------- .../com/willfp/ecoskills/EcoSkillsPlayer.kt | 16 ++++---- .../ecoskills/commands/CommandReload.kt | 2 +- .../com/willfp/ecoskills/config/DataYml.kt | 12 ------ .../com/willfp/ecoskills/data/DataListener.kt | 11 ++--- .../com/willfp/ecoskills/data/SaveHandler.kt | 2 +- .../ecoskills/data/SavedPlayerNameListener.kt | 6 +-- .../ecoskills/data/storage/DataHandler.kt | 13 ++++++ .../ecoskills/data/storage/YamlDataHandler.kt | 40 +++++++++++++++++++ 9 files changed, 84 insertions(+), 46 deletions(-) delete mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/config/DataYml.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/DataHandler.kt create mode 100644 eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/YamlDataHandler.kt diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/EcoSkillsPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/EcoSkillsPlugin.java index a4be702..90f1112 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/EcoSkillsPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoskills/EcoSkillsPlugin.java @@ -5,12 +5,13 @@ import com.willfp.eco.core.command.impl.PluginCommand; import com.willfp.eco.core.integrations.IntegrationLoader; import com.willfp.ecoskills.commands.CommandEcoskills; import com.willfp.ecoskills.commands.CommandSkills; +import com.willfp.ecoskills.config.EffectsYml; +import com.willfp.ecoskills.data.DataListener; +import com.willfp.ecoskills.data.LeaderboardHandler; import com.willfp.ecoskills.data.PlayerBlockListener; import com.willfp.ecoskills.data.SaveHandler; -import com.willfp.ecoskills.data.DataListener; -import com.willfp.ecoskills.config.DataYml; -import com.willfp.ecoskills.config.EffectsYml; -import com.willfp.ecoskills.data.LeaderboardHandler; +import com.willfp.ecoskills.data.storage.DataHandler; +import com.willfp.ecoskills.data.storage.YamlDataHandler; import com.willfp.ecoskills.effects.Effect; import com.willfp.ecoskills.effects.Effects; import com.willfp.ecoskills.integrations.EcoEnchantsEnchantingLeveller; @@ -26,7 +27,6 @@ import com.willfp.ecoskills.stats.Stats; import com.willfp.ecoskills.stats.modifier.StatModifierListener; import org.bukkit.event.Listener; -import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -39,7 +39,7 @@ public class EcoSkillsPlugin extends EcoPlugin { /** * data.yml. */ - private final DataYml dataYml; + private final DataHandler dataHandler; /** * effects.yml. @@ -52,7 +52,7 @@ public class EcoSkillsPlugin extends EcoPlugin { public EcoSkillsPlugin() { super(1351, 12205, "&#ff00ae"); instance = this; - dataYml = new DataYml(this); + dataHandler = new YamlDataHandler(this); effectsYml = new EffectsYml(this); } @@ -78,20 +78,16 @@ public class EcoSkillsPlugin extends EcoPlugin { @Override protected void handleDisable() { - try { - dataYml.save(); - } catch (IOException e) { - e.printStackTrace(); - } + dataHandler.save(); } /** - * Get data.yml. + * Get data handler. * - * @return data.yml. + * @return data handler. */ - public DataYml getDataYml() { - return dataYml; + public DataHandler getDataHandler() { + return dataHandler; } /** diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt index d28de89..f2786a2 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/EcoSkillsPlayer.kt @@ -93,11 +93,11 @@ fun Player.giveSkillExperience(skill: Skill, experience: Double, isOvershoot: Bo } fun OfflinePlayer.getSkillLevel(skill: Skill): Int { - return plugin.dataYml.getInt("player.${this.uniqueId}.${skill.id}", 0) + return plugin.dataHandler.readInt(this.uniqueId, skill.id) } fun OfflinePlayer.setSkillLevel(skill: Skill, level: Int) { - plugin.dataYml.set("player.${this.uniqueId}.${skill.id}", level) + plugin.dataHandler.write(this.uniqueId, skill.id, level) } fun OfflinePlayer.getSkillProgressToNextLevel(skill: Skill): Double { @@ -109,27 +109,27 @@ fun OfflinePlayer.getSkillProgressRequired(skill: Skill): Int { } fun OfflinePlayer.getSkillProgress(skill: Skill): Double { - return plugin.dataYml.getDoubleOrNull("player.${this.uniqueId}.${skill.xpKey.key}") ?: 0.0 + return plugin.dataHandler.readDouble(this.uniqueId, skill.xpKey.key) } fun OfflinePlayer.setSkillProgress(skill: Skill, level: Double) { - plugin.dataYml.set("player.${this.uniqueId}.${skill.xpKey.key}", level) + plugin.dataHandler.write(this.uniqueId, skill.xpKey.key, level) } fun OfflinePlayer.getEffectLevel(effect: Effect): Int { - return plugin.dataYml.getInt("player.${this.uniqueId}.${effect.id}", 0) + return plugin.dataHandler.readInt(this.uniqueId, effect.id) } fun OfflinePlayer.setEffectLevel(effect: Effect, level: Int) { - plugin.dataYml.set("player.${this.uniqueId}.${effect.id}", level) + plugin.dataHandler.write(this.uniqueId, effect.id, level) } fun OfflinePlayer.getStatLevel(stat: Stat): Int { - return plugin.dataYml.getInt("player.${this.uniqueId}.${stat.id}", 0) + return plugin.dataHandler.readInt(this.uniqueId, stat.id) } fun Player.setStatLevel(stat: Stat, level: Int) { - plugin.dataYml.set("player.${this.uniqueId}.${stat.id}", level) + plugin.dataHandler.write(this.uniqueId, stat.id, level) stat.updateStatLevel(this) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandReload.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandReload.kt index 1cc4a5e..1ff836a 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandReload.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/commands/CommandReload.kt @@ -17,7 +17,7 @@ class CommandReload(plugin: EcoPlugin) : override fun getHandler(): CommandHandler { return CommandHandler { sender: CommandSender, _: List -> try { - (plugin as EcoSkillsPlugin).dataYml.save() + (plugin as EcoSkillsPlugin).dataHandler.save() } catch (e: IOException) { e.printStackTrace() } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/config/DataYml.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/config/DataYml.kt deleted file mode 100644 index 7bd6c99..0000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/config/DataYml.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.willfp.ecoskills.config - -import com.willfp.eco.core.EcoPlugin -import com.willfp.eco.core.config.yaml.YamlBaseConfig - -class DataYml( - plugin: EcoPlugin -): YamlBaseConfig( - "data", - false, - plugin -) \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt index 6b239cf..f632de7 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/DataListener.kt @@ -60,17 +60,18 @@ class DataListener : Listener { private fun Player.convertFromLegacyData() { for (effect in Effects.values()) { - plugin.dataYml.set("player.${this.uniqueId}.${effect.id}", this.getEffectLevel(effect)) + plugin.dataHandler.write(this.uniqueId, effect.id, this.getEffectLevel(effect)) } for (stat in Stats.values()) { - plugin.dataYml.set("player.${this.uniqueId}.${stat.id}", this.getStatLevel(stat)) + plugin.dataHandler.write(this.uniqueId, stat.id, this.getStatLevel(stat)) } for (skill in Skills.values()) { - plugin.dataYml.set("player.${this.uniqueId}.${skill.id}", this.getSkillLevel(skill)) + plugin.dataHandler.write(this.uniqueId, skill.id, this.getSkillLevel(skill)) val prog = this.persistentDataContainer.get(skill.xpKey, PersistentDataType.DOUBLE) if (prog != null) { - plugin.dataYml.set( - "player.${this.uniqueId}.${skill.xpKey.key}", + plugin.dataHandler.write( + this.uniqueId, + skill.xpKey.key, prog ) this.persistentDataContainer.remove(skill.xpKey) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SaveHandler.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SaveHandler.kt index dd0adfb..7331e69 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SaveHandler.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SaveHandler.kt @@ -13,7 +13,7 @@ class SaveHandler { if (plugin.configYml.getBool("log-autosaves")) { plugin.logger.info("Auto-Saving player data!") } - plugin.dataYml.save() + plugin.dataHandler.save() expMultiplierCache.clear() if (plugin.configYml.getBool("log-autosaves")) { plugin.logger.info("Saved data!") diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SavedPlayerNameListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SavedPlayerNameListener.kt index 33c0c77..33091e7 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SavedPlayerNameListener.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/SavedPlayerNameListener.kt @@ -26,11 +26,11 @@ class SavedPlayerNameListener( var OfflinePlayer.savedDisplayName: String get() { if (this is Player) { - plugin.dataYml.set("player.${this.uniqueId}.name", this.displayName) + plugin.dataHandler.write(this.uniqueId, "name", this.displayName) } - return plugin.dataYml.getStringOrNull("player.${this.uniqueId}.name") ?: this.name ?: "Unknown Player" + return plugin.dataHandler.readString(this.uniqueId, "name", this.name ?: "Unknown Player") } set(value) { - plugin.dataYml.set("player.${this.uniqueId}.name", value) + plugin.dataHandler.write(this.uniqueId, "name", value) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/DataHandler.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/DataHandler.kt new file mode 100644 index 0000000..b5576c7 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/DataHandler.kt @@ -0,0 +1,13 @@ +package com.willfp.ecoskills.data.storage + +import java.util.* + +interface DataHandler { + fun save() + + fun write(uuid: UUID, key: String, value: T) + + fun readInt(uuid: UUID, key: String): Int + fun readDouble(uuid: UUID, key: String): Double + fun readString(uuid: UUID, key: String, default: String = ""): String +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/YamlDataHandler.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/YamlDataHandler.kt new file mode 100644 index 0000000..8f9415c --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/data/storage/YamlDataHandler.kt @@ -0,0 +1,40 @@ +package com.willfp.ecoskills.data.storage + +import com.willfp.eco.core.config.yaml.YamlBaseConfig +import com.willfp.ecoskills.EcoSkillsPlugin +import java.util.* + +@Suppress("UNCHECKED_CAST") +class YamlDataHandler( + private val plugin: EcoSkillsPlugin +) : DataHandler { + private val dataYml = DataYml(plugin) + + override fun save() { + dataYml.save() + } + + override fun write(uuid: UUID, key: String, value: T) { + dataYml.set("player.$uuid.key", value) + } + + override fun readInt(uuid: UUID, key: String): Int { + return dataYml.getInt("player.$uuid.$key", 0) + } + + override fun readDouble(uuid: UUID, key: String): Double { + return dataYml.getDoubleOrNull("player.$uuid.$key") ?: 0.0 + } + + override fun readString(uuid: UUID, key: String, default: String): String { + return dataYml.getStringOrNull("player.$uuid.$key") ?: default + } + + class DataYml( + plugin: EcoSkillsPlugin + ) : YamlBaseConfig( + "data", + false, + plugin + ) +} \ No newline at end of file