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: