summaryrefslogtreecommitdiffstats
path: root/bukkit
diff options
context:
space:
mode:
authorKrakenied <Krakenied1@gmail.com>2024-08-20 20:04:52 +0200
committerKrakenied <46192742+Krakenied@users.noreply.github.com>2024-08-28 11:37:11 +0200
commite16d38633cec8c32900a1fee882f9eabbc1fd44b (patch)
treeb68a435e2edb6c552af9c3266498156184751cd8 /bukkit
parent121e5262293e7b139dcea42a2bcf4c1fe1a797e1 (diff)
Vault reward integration
Closes https://github.com/LMBishop/Quests/issues/708
Diffstat (limited to 'bukkit')
-rw-r--r--bukkit/build.gradle.kts4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java10
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java1
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/AbstractVaultHook.java9
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/VaultHook.java76
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java5
-rw-r--r--bukkit/src/main/resources/plugin.yml1
8 files changed, 107 insertions, 1 deletions
diff --git a/bukkit/build.gradle.kts b/bukkit/build.gradle.kts
index 71470226..b57dd564 100644
--- a/bukkit/build.gradle.kts
+++ b/bukkit/build.gradle.kts
@@ -37,7 +37,7 @@ repositories {
maven("https://repo.oraxen.com/releases")
// PlaceholderAPI
maven("https://repo.extendedclip.com/content/repositories/dev/")
- // CustomFishing, ItemsAdder, SCore, ShopGUIPlus, Slimefun4
+ // CustomFishing, ItemsAdder, SCore, ShopGUIPlus, Slimefun4, Vault
maven("https://jitpack.io/")
// PlayerPoints
maven("https://repo.rosewooddev.io/repository/public/")
@@ -114,6 +114,8 @@ dependencies {
compileOnlyPlugin("com.bgsoftware:SuperiorSkyblockAPI:2022.9")
// uSkyBlock TODO fix whenever repo is up
//compileOnlyPlugin("ovh.uskyblock:uSkyBlock-API:2.8.9")
+ // Vault
+ compileOnlyPlugin("com.github.MilkBowl:VaultAPI:1.7.1")
// VotingPlugin
compileOnlyPlugin("com.bencodez:votingplugin:6.15")
// WildStacker
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
index fa89c30c..759f1104 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -34,6 +34,8 @@ import com.leonardobishop.quests.bukkit.hook.title.QuestsTitle;
import com.leonardobishop.quests.bukkit.hook.title.Title_Bukkit;
import com.leonardobishop.quests.bukkit.hook.title.Title_BukkitNoTimings;
import com.leonardobishop.quests.bukkit.hook.title.Title_Nothing;
+import com.leonardobishop.quests.bukkit.hook.vault.AbstractVaultHook;
+import com.leonardobishop.quests.bukkit.hook.vault.VaultHook;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler11;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler16;
@@ -199,6 +201,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
private AbstractCoreProtectHook coreProtectHook;
private AbstractEssentialsHook essentialsHook;
private AbstractPlayerBlockTrackerHook playerBlockTrackerHook;
+ private AbstractVaultHook vaultHook;
private AbstractWildStackerHook wildStackerHook;
private ItemGetter itemGetter;
private SkullGetter skullGetter;
@@ -418,6 +421,9 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
} catch (ClassCastException | ClassNotFoundException | NoSuchMethodException ignored) {
}
+ // Plugin checks are handled in the hook class
+ this.vaultHook = new VaultHook(this);
+
if (CompatUtils.isPluginEnabled("WildStacker")) {
this.wildStackerHook = new WildStackerHook();
}
@@ -886,6 +892,10 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
return playerBlockTrackerHook;
}
+ public @NotNull AbstractVaultHook getVaultHook() {
+ return this.vaultHook;
+ }
+
public @Nullable AbstractWildStackerHook getWildStackerHook() {
return wildStackerHook;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java
index b807035e..9392b7f2 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/command/AdminInfoCommandHandler.java
@@ -61,6 +61,7 @@ public class AdminInfoCommandHandler implements CommandHandler {
for (String s : quest.getRewards()) {
sender.sendMessage(ChatColor.DARK_GRAY + " * " + ChatColor.GRAY + s);
}
+ sender.sendMessage(ChatColor.RED + "Vault reward: " + ChatColor.GRAY + quest.getVaultReward());
sender.sendMessage(ChatColor.RED.toString() + ChatColor.UNDERLINE + "Quest options");
sender.sendMessage(ChatColor.RED + "Category: " + ChatColor.GRAY + quest.getCategoryId());
sender.sendMessage(ChatColor.RED + "Repeatable: " + ChatColor.GRAY + quest.isRepeatable());
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
index 086569fb..50fcf8f9 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java
@@ -276,6 +276,7 @@ public class BukkitQuestsLoader implements QuestsLoader {
List<String> startCommands = config.getStringList("startcommands");
List<String> cancelCommands = config.getStringList("cancelcommands");
List<String> expiryCommands = config.getStringList("expirycommands");
+ double vaultReward = config.getDouble("vaultreward", 0.0D);
boolean repeatable = config.getBoolean("options.repeatable", false);
boolean cooldown = config.getBoolean("options.cooldown.enabled", false);
boolean timeLimit = config.getBoolean("options.time-limit.enabled", false);
@@ -310,6 +311,7 @@ public class BukkitQuestsLoader implements QuestsLoader {
.withStartCommands(startCommands)
.withCancelCommands(cancelCommands)
.withExpiryCommands(expiryCommands)
+ .withVaultReward(vaultReward)
.withPlaceholders(placeholders)
.withProgressPlaceholders(progressPlaceholders)
.withCooldown(cooldownTime)
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/AbstractVaultHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/AbstractVaultHook.java
new file mode 100644
index 00000000..86cfd945
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/AbstractVaultHook.java
@@ -0,0 +1,9 @@
+package com.leonardobishop.quests.bukkit.hook.vault;
+
+import org.bukkit.OfflinePlayer;
+import org.jetbrains.annotations.NotNull;
+
+public interface AbstractVaultHook {
+
+ void depositPlayer(final @NotNull OfflinePlayer player, final double amount);
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/VaultHook.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/VaultHook.java
new file mode 100644
index 00000000..7d3e648b
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/vault/VaultHook.java
@@ -0,0 +1,76 @@
+package com.leonardobishop.quests.bukkit.hook.vault;
+
+import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin;
+import net.milkbowl.vault.economy.Economy;
+import net.milkbowl.vault.economy.EconomyResponse;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.RegisteredServiceProvider;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+
+public final class VaultHook implements AbstractVaultHook {
+
+ private final BukkitQuestsPlugin plugin;
+ private Economy economy = null;
+
+ public VaultHook(final @NotNull BukkitQuestsPlugin plugin) {
+ this.plugin = plugin;
+
+ try {
+ Class.forName("net.milkbowl.vault.economy.Economy");
+ } catch (final ClassNotFoundException e) {
+ return;
+ }
+
+ final Plugin vaultPlugin = Bukkit.getServer()
+ .getPluginManager()
+ .getPlugin("Vault");
+ if (vaultPlugin == null) {
+ return;
+ }
+
+ final RegisteredServiceProvider<Economy> esp = Bukkit.getServer()
+ .getServicesManager()
+ .getRegistration(Economy.class);
+ if (esp == null) {
+ return;
+ }
+
+ this.economy = esp.getProvider();
+
+ // Log that we hooked successfully
+ this.plugin.getLogger().info("Successfully hooked into " + esp.getPlugin().getName() + " economy.");
+ }
+
+ @Override
+ public void depositPlayer(final @NotNull OfflinePlayer player, final double amount) {
+ if (amount <= 0) {
+ this.plugin.getQuestsLogger().debug("Tried to deposit Vault reward of " + amount + " to "
+ + player.getName() + " account, however the amount was not a positive number.");
+ return;
+ }
+
+ if (this.economy == null) {
+ this.plugin.getQuestsLogger().debug("Tried to deposit Vault reward of " + amount + " to "
+ + player.getName() + " account, however the economy could not be found.");
+ return;
+ }
+
+ final EconomyResponse response = this.economy.depositPlayer(player, amount);
+ this.plugin.getQuestsLogger().debug("Deposited Vault reward of " + amount + " to "
+ + player.getName() + " account. Response: " + this.responseToString(response) + ".");
+ }
+
+ @Contract(pure = true)
+ private @NotNull String responseToString(final @NotNull EconomyResponse response) {
+ return "EconomyResponse{"
+ + "amount=" + response.amount
+ + ", balance=" + response.balance
+ + ", type=" + response.type.name()
+ + ", errorMessage='"
+ + response.errorMessage
+ + "'}";
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
index 0fcc1fc2..af2a316d 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/questcontroller/NormalQuestController.java
@@ -235,6 +235,11 @@ public class NormalQuestController implements QuestController {
Bukkit.getPluginManager().callEvent(questFinishEvent);
// PlayerFinishQuestEvent -- end
plugin.getScheduler().doSync(() -> {
+ final double vaultReward = quest.getVaultReward();
+ if (vaultReward > 0.0D) {
+ this.plugin.getVaultHook().depositPlayer(player, vaultReward);
+ }
+
for (String s : quest.getRewards()) {
s = s.replace("{player}", player.getName());
if (plugin.getConfig().getBoolean("options.quests-use-placeholderapi")) {
diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml
index 8e1db3ba..43ff65f8 100644
--- a/bukkit/src/main/resources/plugin.yml
+++ b/bukkit/src/main/resources/plugin.yml
@@ -29,6 +29,7 @@ softdepend:
- ShopGUIPlus
- SuperiorSkyblock2
- uSkyBlock
+- Vault
- Votifier
- VotingPlugin
- WildStacker