diff --git a/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyManager.java b/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyManager.java new file mode 100644 index 00000000..b093bedd --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyManager.java @@ -0,0 +1,90 @@ +package com.willfp.eco.core.integrations.economy; + +import lombok.experimental.UtilityClass; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.Set; + +/** + * Class to handle economy. + */ +@UtilityClass +public class EconomyManager { + /** + * A set of all registered integrations. + */ + private final Set registered = new HashSet<>(); + + /** + * Register a new integration. + * + * @param integration The integration to register. + */ + public void register(@NotNull final EconomyWrapper integration) { + registered.add(integration); + } + + /** + * Get if a player has a certain amount. + * + * @param player The player. + * @param amount The amount. + * @return If the player has the amount. + */ + boolean hasAmount(@NotNull final OfflinePlayer player, + final double amount) { + for (EconomyWrapper wrapper : registered) { + return wrapper.hasAmount(player, amount); + } + + return false; + } + + /** + * Give money to a player. + * + * @param player The player. + * @param amount The amount to give. + * @return If the transaction was a success. + */ + boolean giveMoney(@NotNull final OfflinePlayer player, + final double amount) { + for (EconomyWrapper wrapper : registered) { + return wrapper.giveMoney(player, amount); + } + + return false; + } + + /** + * Remove money from a player. + * + * @param player The player. + * @param amount The amount to remove. + * @return If the transaction was a success. + */ + boolean removeMoney(@NotNull final OfflinePlayer player, + final double amount) { + for (EconomyWrapper wrapper : registered) { + return wrapper.removeMoney(player, amount); + } + + return false; + } + + /** + * Get the balance of a player. + * + * @param player The player. + * @return The balance. + */ + double getBalance(@NotNull final OfflinePlayer player) { + for (EconomyWrapper wrapper : registered) { + return wrapper.getBalance(player); + } + + return 0; + } +} diff --git a/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyWrapper.java b/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyWrapper.java new file mode 100644 index 00000000..28bade9e --- /dev/null +++ b/eco-api/src/main/java/com/willfp/eco/core/integrations/economy/EconomyWrapper.java @@ -0,0 +1,48 @@ +package com.willfp.eco.core.integrations.economy; + +import com.willfp.eco.core.integrations.Integration; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; + +/** + * Wrapper class for economy integrations. + */ +public interface EconomyWrapper extends Integration { + /** + * Get if a player has a certain amount. + * + * @param player The player. + * @param amount The amount. + * @return If the player has the amount. + */ + boolean hasAmount(@NotNull OfflinePlayer player, + double amount); + + /** + * Give money to a player. + * + * @param player The player. + * @param amount The amount to give. + * @return If the transaction was a success. + */ + boolean giveMoney(@NotNull OfflinePlayer player, + double amount); + + /** + * Remove money from a player. + * + * @param player The player. + * @param amount The amount to remove. + * @return If the transaction was a success. + */ + boolean removeMoney(@NotNull OfflinePlayer player, + double amount); + + /** + * Get the balance of a player. + * + * @param player The player. + * @return The balance. + */ + double getBalance(@NotNull OfflinePlayer player); +} diff --git a/eco-core/core-plugin/build.gradle b/eco-core/core-plugin/build.gradle index abedc2c5..a25e7781 100644 --- a/eco-core/core-plugin/build.gradle +++ b/eco-core/core-plugin/build.gradle @@ -37,6 +37,7 @@ dependencies { compileOnly 'com.gmail.filoghost.holographicdisplays:holographicdisplays-api:2.4.0' compileOnly 'net.essentialsx:EssentialsX:2.19.0' compileOnly 'com.bgsoftware:SuperiorSkyblockAPI:latest' + compileOnly 'com.github.MilkBowl:VaultAPI:1.7' // CombatLogX V10 + NewbieHelper Expansion compileOnly 'com.SirBlobman.combatlogx:CombatLogX-API:10.0.0.0-SNAPSHOT' diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt index adf19419..e58a885e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/EcoSpigotPlugin.kt @@ -10,6 +10,7 @@ import com.willfp.eco.core.integrations.afk.AFKManager import com.willfp.eco.core.integrations.anticheat.AnticheatManager import com.willfp.eco.core.integrations.antigrief.AntigriefManager import com.willfp.eco.core.integrations.customitems.CustomItemsManager +import com.willfp.eco.core.integrations.economy.EconomyManager import com.willfp.eco.core.integrations.hologram.HologramManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager import com.willfp.eco.core.integrations.shop.ShopManager @@ -62,6 +63,7 @@ import com.willfp.eco.spigot.integrations.antigrief.AntigriefWorldGuard import com.willfp.eco.spigot.integrations.customitems.CustomItemsHeadDatabase import com.willfp.eco.spigot.integrations.customitems.CustomItemsItemsAdder import com.willfp.eco.spigot.integrations.customitems.CustomItemsOraxen +import com.willfp.eco.spigot.integrations.economy.EconomyVault import com.willfp.eco.spigot.integrations.hologram.HologramCMI import com.willfp.eco.spigot.integrations.hologram.HologramGHolo import com.willfp.eco.spigot.integrations.hologram.HologramHolographicDisplays @@ -72,6 +74,7 @@ import com.willfp.eco.spigot.recipes.ShapedRecipeListener import com.willfp.eco.util.BlockUtils import com.willfp.eco.util.SkullUtils import net.kyori.adventure.platform.bukkit.BukkitAudiences +import net.milkbowl.vault.economy.Economy import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.block.Block @@ -211,6 +214,14 @@ abstract class EcoSpigotPlugin : EcoPlugin( IntegrationLoader("Essentials") { AFKManager.register(AFKIntegrationEssentials()) }, IntegrationLoader("CMI") { AFKManager.register(AFKIntegrationCMI()) }, + // Economy + IntegrationLoader("Vault") { + val rsp = Bukkit.getServer().servicesManager.getRegistration(Economy::class.java) + if (rsp != null) { + EconomyManager.register(EconomyVault(rsp.provider)) + } + }, + // Misc IntegrationLoader("mcMMO") { McmmoManager.register(McmmoIntegrationImpl()) }, IntegrationLoader("Multiverse-Inventories") { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/economy/EconomyVault.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/economy/EconomyVault.kt new file mode 100644 index 00000000..03775d27 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/spigot/integrations/economy/EconomyVault.kt @@ -0,0 +1,29 @@ +package com.willfp.eco.spigot.integrations.economy + +import com.willfp.eco.core.integrations.economy.EconomyWrapper +import net.milkbowl.vault.economy.Economy +import org.bukkit.OfflinePlayer + +class EconomyVault( + private val vault: Economy +): EconomyWrapper { + override fun hasAmount(player: OfflinePlayer, amount: Double): Boolean { + return vault.has(player, amount) + } + + override fun giveMoney(player: OfflinePlayer, amount: Double): Boolean { + return vault.depositPlayer(player, amount).transactionSuccess() + } + + override fun removeMoney(player: OfflinePlayer, amount: Double): Boolean { + return vault.withdrawPlayer(player, amount).transactionSuccess() + } + + override fun getBalance(player: OfflinePlayer): Double { + return vault.getBalance(player) + } + + override fun getPluginName(): String { + return "Vault" + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index c48edc3c..3bed14d3 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -31,6 +31,7 @@ softdepend: - GHolo - CMI - Essentials + - Vault libraries: - 'org.reflections:reflections:0.9.12' - 'org.apache.maven:maven-artifact:3.0.3'