From f0fda5bcbfe5f8767b7e307096b8209fa551d36c Mon Sep 17 00:00:00 2001 From: xHyroM Date: Wed, 30 Aug 2023 13:42:28 +0200 Subject: [PATCH] feat(currency-money): add config --- currency-money/build.gradle.kts | 11 ++++++++ .../currency/money/bukkit/BukkitMCLoader.java | 18 ++++++++++-- .../money/bukkit/hooks/vault/Vault.java | 17 ++++++++--- .../bukkit/hooks/vault/VaultFactory.java | 10 +++---- .../currency/money/common/AbstractPlugin.java | 28 +++++++++++++++++++ .../currency/money/common/Plugin.java | 9 ++++++ .../currency/money/common/config/Config.java | 18 ++++++++++++ .../common/{ => currency}/MoneyCurrency.java | 2 +- 8 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/AbstractPlugin.java create mode 100644 currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/Plugin.java create mode 100644 currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/config/Config.java rename currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/{ => currency}/MoneyCurrency.java (90%) diff --git a/currency-money/build.gradle.kts b/currency-money/build.gradle.kts index 3f324a7..e63ef0b 100644 --- a/currency-money/build.gradle.kts +++ b/currency-money/build.gradle.kts @@ -5,6 +5,7 @@ plugins { repositories { maven("https://repo.papermc.io/repository/maven-public/") maven("https://jitpack.io") + maven("https://storehouse.okaeri.eu/repository/maven-public/") } dependencies { @@ -14,9 +15,19 @@ dependencies { compileOnly("com.github.MilkBowl:VaultAPI:1.7") + // This can be compileOnly because it's included in common (lighteco-platform) + // Reduce duplication and size + compileOnly("eu.okaeri:okaeri-configs-yaml-snakeyaml:5.0.0-beta.5") + compileOnly("eu.okaeri:okaeri-configs-validator-okaeri:5.0.0-beta.5") + compileOnly("org.projectlombok:lombok:1.18.28") annotationProcessor("org.projectlombok:lombok:1.18.28") compileOnly("org.checkerframework:checker-qual:3.8.0") compileOnly("org.jetbrains:annotations:20.1.0") +} + +tasks.shadowJar { + relocate("eu.okaeri.configs", "dev.xhyrom.lighteco.libraries.okaeri.configs") + relocate("eu.okaeri.validator", "dev.xhyrom.lighteco.libraries.okaeri.validator") } \ No newline at end of file diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/BukkitMCLoader.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/BukkitMCLoader.java index 7cc2158..d024bb7 100644 --- a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/BukkitMCLoader.java +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/BukkitMCLoader.java @@ -6,13 +6,25 @@ import dev.xhyrom.lighteco.api.manager.CommandManager; import dev.xhyrom.lighteco.api.manager.CurrencyManager; import dev.xhyrom.lighteco.api.model.currency.Currency; import dev.xhyrom.lighteco.currency.money.bukkit.hooks.vault.VaultFactory; -import dev.xhyrom.lighteco.currency.money.common.MoneyCurrency; +import dev.xhyrom.lighteco.currency.money.common.AbstractPlugin; +import dev.xhyrom.lighteco.currency.money.common.Plugin; +import dev.xhyrom.lighteco.currency.money.common.currency.MoneyCurrency; +import lombok.Getter; import org.bukkit.plugin.java.JavaPlugin; -import java.util.UUID; - public class BukkitMCLoader extends JavaPlugin { private VaultFactory vaultFactory; + @Getter + private final Plugin plugin; + + public BukkitMCLoader() { + this.plugin = new AbstractPlugin(this.getDataFolder().toPath()); + } + + @Override + public void onLoad() { + this.plugin.load(); + } @Override public void onEnable() { diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/Vault.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/Vault.java index d1d18f8..01a7f1e 100644 --- a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/Vault.java +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/Vault.java @@ -4,19 +4,25 @@ import dev.xhyrom.lighteco.api.LightEco; import dev.xhyrom.lighteco.api.LightEcoProvider; import dev.xhyrom.lighteco.api.model.currency.Currency; import dev.xhyrom.lighteco.api.model.user.User; +import dev.xhyrom.lighteco.currency.money.bukkit.BukkitMCLoader; +import dev.xhyrom.lighteco.currency.money.common.Plugin; import net.milkbowl.vault.economy.AbstractEconomy; import net.milkbowl.vault.economy.EconomyResponse; import org.bukkit.Bukkit; import java.math.BigDecimal; +import java.text.NumberFormat; import java.util.List; +import java.util.Locale; import java.util.UUID; public class Vault extends AbstractEconomy { + private final Plugin plugin; private final LightEco provider; private final Currency currency; - public Vault() { + public Vault(Plugin plugin) { + this.plugin = plugin; this.provider = LightEcoProvider.get(); this.currency = this.provider.getCurrencyManager().getCurrency("money"); } @@ -43,17 +49,20 @@ public class Vault extends AbstractEconomy { @Override public String format(double amount) { - return null; + NumberFormat format = NumberFormat.getInstance(); + format.setCurrency(java.util.Currency.getInstance(this.plugin.getConfig().currencyCode)); + + return format.format(BigDecimal.valueOf(amount)); } @Override public String currencyNamePlural() { - return null; + return this.plugin.getConfig().currencyNamePlural; } @Override public String currencyNameSingular() { - return null; + return this.plugin.getConfig().currencyNameSingular; } @Override diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/VaultFactory.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/VaultFactory.java index 88c1f68..8a72208 100644 --- a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/VaultFactory.java +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/bukkit/hooks/vault/VaultFactory.java @@ -7,19 +7,19 @@ import org.bukkit.plugin.ServicePriority; import org.bukkit.plugin.ServicesManager; public class VaultFactory { - private final BukkitMCLoader plugin; + private final BukkitMCLoader loader; private Vault vault; - public VaultFactory(BukkitMCLoader plugin) { - this.plugin = plugin; + public VaultFactory(BukkitMCLoader loader) { + this.loader = loader; } public void hook() { if (this.vault == null) - vault = new Vault(); + vault = new Vault(this.loader.getPlugin()); ServicesManager manager = Bukkit.getServicesManager(); - manager.register(Economy.class, vault, this.plugin, ServicePriority.Highest); + manager.register(Economy.class, vault, this.loader, ServicePriority.Highest); } public void unhook() { diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/AbstractPlugin.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/AbstractPlugin.java new file mode 100644 index 0000000..7cb4bd6 --- /dev/null +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/AbstractPlugin.java @@ -0,0 +1,28 @@ +package dev.xhyrom.lighteco.currency.money.common; + +import dev.xhyrom.lighteco.currency.money.common.config.Config; +import eu.okaeri.configs.ConfigManager; +import eu.okaeri.configs.yaml.snakeyaml.YamlSnakeYamlConfigurer; +import lombok.Getter; + +import java.nio.file.Path; + +public class AbstractPlugin implements Plugin { + @Getter + private Config config; + private Path dataDirectory; + + public AbstractPlugin(Path dataDirectory) { + this.dataDirectory = dataDirectory; + } + + public final void load() { + this.config = ConfigManager.create(Config.class, it -> { + it.withConfigurer(new YamlSnakeYamlConfigurer()); + it.withBindFile(dataDirectory.resolve("config.yml")); + it.withRemoveOrphans(true); + it.saveDefaults(); + it.load(true); + }); + } +} diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/Plugin.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/Plugin.java new file mode 100644 index 0000000..2edd5e7 --- /dev/null +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/Plugin.java @@ -0,0 +1,9 @@ +package dev.xhyrom.lighteco.currency.money.common; + +import dev.xhyrom.lighteco.currency.money.common.config.Config; + +public interface Plugin { + void load(); + + Config getConfig(); +} diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/config/Config.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/config/Config.java new file mode 100644 index 0000000..4808f32 --- /dev/null +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/config/Config.java @@ -0,0 +1,18 @@ +package dev.xhyrom.lighteco.currency.money.common.config; + +import eu.okaeri.configs.OkaeriConfig; +import eu.okaeri.configs.annotation.Comment; + +public class Config extends OkaeriConfig { + @Comment("Currency name") + + @Comment("In singular form") + public String currencyNameSingular = "Dollar"; + @Comment("In plural form") + public String currencyNamePlural = "Dollars"; + + @Comment("Currency code (ISO 4217 code of currency)") + @Comment("Used for formatting currency") + @Comment("See https://en.wikipedia.org/wiki/ISO_4217 for more information") + public String currencyCode = "USD"; +} diff --git a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/MoneyCurrency.java b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/currency/MoneyCurrency.java similarity index 90% rename from currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/MoneyCurrency.java rename to currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/currency/MoneyCurrency.java index 2308faf..8b80f5f 100644 --- a/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/MoneyCurrency.java +++ b/currency-money/src/main/java/dev/xhyrom/lighteco/currency/money/common/currency/MoneyCurrency.java @@ -1,4 +1,4 @@ -package dev.xhyrom.lighteco.currency.money.common; +package dev.xhyrom.lighteco.currency.money.common.currency; import dev.xhyrom.lighteco.api.model.currency.Currency;