diff --git a/pom.xml b/pom.xml index 67c25eb..08309c7 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,10 @@ knarcraft-repo https://git.knarcraft.net/api/packages/EpicKnarvik97/maven + + jitpack.io + https://jitpack.io + @@ -125,5 +129,11 @@ 1.2.3 compile + + com.github.MilkBowl + VaultAPI + 1.7 + provided + diff --git a/src/main/java/net/knarcraft/minigames/MiniGames.java b/src/main/java/net/knarcraft/minigames/MiniGames.java index 8321365..1e72037 100644 --- a/src/main/java/net/knarcraft/minigames/MiniGames.java +++ b/src/main/java/net/knarcraft/minigames/MiniGames.java @@ -65,15 +65,21 @@ import net.knarcraft.minigames.listener.DamageListener; import net.knarcraft.minigames.listener.InteractListener; import net.knarcraft.minigames.listener.MoveListener; import net.knarcraft.minigames.listener.PlayerStateChangeListener; +import net.knarcraft.minigames.manager.EconomyManager; +import net.knarcraft.minigames.manager.PermissionManager; import net.knarcraft.minigames.placeholder.DropperRecordExpansion; import net.knarcraft.minigames.placeholder.ParkourRecordExpansion; import net.md_5.bungee.api.ChatColor; +import net.milkbowl.vault.economy.Economy; +import net.milkbowl.vault.permission.Permission; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; import org.bukkit.command.PluginCommand; import org.bukkit.command.TabCompleter; import org.bukkit.configuration.serialization.ConfigurationSerialization; import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.RegisteredServiceProvider; +import org.bukkit.plugin.ServicesManager; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -429,4 +435,25 @@ public final class MiniGames extends JavaPlugin { stringFormatter.setSuccessColor(ChatColor.GREEN); } + /** + * Sets up Vault by getting plugins from their providers + */ + private void setupVault() { + ServicesManager servicesManager = this.getServer().getServicesManager(); + RegisteredServiceProvider permissionProvider = servicesManager.getRegistration(Permission.class); + RegisteredServiceProvider economyProvider = servicesManager.getRegistration(Economy.class); + + if (permissionProvider != null) { + PermissionManager.initialize(permissionProvider.getProvider()); + } else { + log(Level.WARNING, "No Vault permission provider found. Permission rewards are unavailable."); + } + + if (economyProvider != null) { + EconomyManager.initialize(economyProvider.getProvider()); + } else { + log(Level.WARNING, "No Vault economy provider found. Economy rewards are unavailable."); + } + } + } diff --git a/src/main/java/net/knarcraft/minigames/arena/reward/EconomyReward.java b/src/main/java/net/knarcraft/minigames/arena/reward/EconomyReward.java index f1dbd6f..c3653b0 100644 --- a/src/main/java/net/knarcraft/minigames/arena/reward/EconomyReward.java +++ b/src/main/java/net/knarcraft/minigames/arena/reward/EconomyReward.java @@ -2,11 +2,13 @@ package net.knarcraft.minigames.arena.reward; import net.knarcraft.minigames.MiniGames; import net.knarcraft.minigames.config.MiniGameMessage; +import net.knarcraft.minigames.manager.EconomyManager; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; /** * A reward that gives an amount of currency when it's granted @@ -26,15 +28,19 @@ public class EconomyReward implements Reward { @Override public boolean grant(@NotNull Player player) { - //TODO: Requires Vault integration - return false; + if (!EconomyManager.isInitialized()) { + MiniGames.log(Level.SEVERE, "An economy reward has been set, but no Vault-compatible economy" + + " plugin has been initialized."); + return false; + } + EconomyManager.deposit(player, amount); + return true; } @Override public @NotNull String getGrantMessage() { - //TODO: Print formatted currency amount and currency unit return MiniGames.getInstance().getStringFormatter().replacePlaceholder(MiniGameMessage.SUCCESS_ECONOMY_REWARDED, - "{currency}", String.valueOf(amount)); + "{currency}", EconomyManager.format(amount)); } @NotNull diff --git a/src/main/java/net/knarcraft/minigames/arena/reward/PermissionReward.java b/src/main/java/net/knarcraft/minigames/arena/reward/PermissionReward.java index 2bc5927..ad0d2b5 100644 --- a/src/main/java/net/knarcraft/minigames/arena/reward/PermissionReward.java +++ b/src/main/java/net/knarcraft/minigames/arena/reward/PermissionReward.java @@ -2,6 +2,7 @@ package net.knarcraft.minigames.arena.reward; import net.knarcraft.minigames.MiniGames; import net.knarcraft.minigames.config.MiniGameMessage; +import net.knarcraft.minigames.manager.PermissionManager; import org.bukkit.World; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -9,6 +10,7 @@ import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; /** * A reward that grants a specified permission when granted @@ -31,8 +33,17 @@ public class PermissionReward implements Reward { @Override public boolean grant(@NotNull Player player) { - //TODO: Vault integration is required - return false; + if (!PermissionManager.isInitialized()) { + MiniGames.log(Level.SEVERE, "A permission reward has been set, but no Vault-compatible permission" + + " plugin has been initialized."); + return false; + } + if (PermissionManager.hasPermission(player, this.permission, this.world != null ? this.world.getName() : null)) { + return false; + } else { + PermissionManager.addPermission(player, this.permission, this.world); + return true; + } } @Override diff --git a/src/main/java/net/knarcraft/minigames/manager/EconomyManager.java b/src/main/java/net/knarcraft/minigames/manager/EconomyManager.java new file mode 100644 index 0000000..480002f --- /dev/null +++ b/src/main/java/net/knarcraft/minigames/manager/EconomyManager.java @@ -0,0 +1,55 @@ +package net.knarcraft.minigames.manager; + +import net.milkbowl.vault.economy.Economy; +import org.bukkit.OfflinePlayer; + +/** + * A manager that performs all Economy tasks + */ +public final class EconomyManager { + + private static Economy economy; + + private EconomyManager() { + + } + + /** + * Initializes the economy manager + * + * @param economy

The economy object to use for everything economy-related

+ */ + public static void initialize(Economy economy) { + EconomyManager.economy = economy; + } + + /** + * Checks whether the economy manager has been initialized + * + * @return

True if the economy manager has been initialized

+ */ + public static boolean isInitialized() { + return EconomyManager.economy != null; + } + + /** + * Formats the given amount of currency according to the economy plugin's format + * + * @param amount

The amount of currency to format

+ * @return

The formatted string

+ */ + public static String format(double amount) { + return economy.format(amount); + } + + /** + * Deposits a given sum into the given player's account + * + * @param player

The player to deposit money to

+ * @param sum

The amount of money to deposit

+ */ + public static void deposit(OfflinePlayer player, double sum) { + economy.depositPlayer(player, sum); + } + +} diff --git a/src/main/java/net/knarcraft/minigames/manager/PermissionManager.java b/src/main/java/net/knarcraft/minigames/manager/PermissionManager.java new file mode 100644 index 0000000..f60f422 --- /dev/null +++ b/src/main/java/net/knarcraft/minigames/manager/PermissionManager.java @@ -0,0 +1,64 @@ +package net.knarcraft.minigames.manager; + +import net.milkbowl.vault.permission.Permission; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * A manager that performs all Permission tasks + */ +public final class PermissionManager { + + private static Permission permission; + + private PermissionManager() { + + } + + /** + * Initializes the permission manager + * + * @param permission

The permission object to use for everything permission-related

+ */ + public static void initialize(Permission permission) { + PermissionManager.permission = permission; + } + + /** + * Checks whether the permission manager has been initialized + * + * @return

True if the permission manager has been initialized

+ */ + public static boolean isInitialized() { + return PermissionManager.permission != null; + } + + /** + * Grants a permanent permission to a player + * + * @param player

The player to grant the permission to

+ * @param permissionNode

The permission node to grant to the player

+ */ + public static void addPermission(@NotNull Player player, @NotNull String permissionNode, @Nullable World world) { + if (world != null) { + permission.playerAdd(world.getName(), player, permissionNode); + } else { + permission.playerAdd(player, permissionNode); + } + } + + /** + * Checks whether the given player has the given permission + * + * @param player

The player to check

+ * @param permissionNode

The permission node to check for

+ * @param world

The world to check for the permission

+ * @return

True if the player has the permission

+ */ + public static boolean hasPermission(@NotNull Player player, @NotNull String permissionNode, @Nullable String world) { + return permission.playerHas(world, player, permissionNode); + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3a2dafd..07c19c0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,6 +6,7 @@ api-version: 1.19 description: A plugin that adds various mini-games softdepend: - PlaceholderAPI + - Vault # Note to self: Aliases must be lowercase! commands: