aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLMBishop <13875753+LMBishop@users.noreply.github.com>2021-03-01 17:50:38 +0000
committerLMBishop <13875753+LMBishop@users.noreply.github.com>2021-03-01 17:50:38 +0000
commit1de777385ae3f298fd8c0e6d77c186f64b584d51 (patch)
tree6be326d9230457454fcd8db69c51993ad8695fb3
parent06347b728dce29ac5e0d2ce8fe0a68c337fda6f1 (diff)
Add ShopGUI+ buy & sell task type (not tested)
- Closes #150
-rw-r--r--build.gradle4
-rw-r--r--src/main/java/com/leonardobishop/quests/Quests.java5
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java2
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyTaskType.java85
-rw-r--r--src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellTaskType.java85
5 files changed, 180 insertions, 1 deletions
diff --git a/build.gradle b/build.gradle
index cac25526..4ef55dcd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -34,7 +34,7 @@ repositories {
maven { url = 'http://repo.extendedclip.com/content/repositories/placeholderapi/' }
// EssentialsX
maven { url = 'https://repo.essentialsx.net/releases/' }
- // JitPack
+ // JitPack (IridiumSkyblock, ShopGUI+)
maven { url = 'https://jitpack.io' }
mavenCentral()
}
@@ -77,6 +77,8 @@ dependencies {
compileOnly 'me.clip:placeholderapi:2.10.9'
// EssentialsX
compileOnly "net.ess3:EssentialsX:2.18.2"
+ // ShopGUI+
+ compileOnly 'com.github.brcdev-minecraft:shopgui-api:master-SNAPSHOT'
compileOnly fileTree(dir: 'libs', includes: ['*.jar'])
}
diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java
index 48b7c86f..48973e57 100644
--- a/src/main/java/com/leonardobishop/quests/Quests.java
+++ b/src/main/java/com/leonardobishop/quests/Quests.java
@@ -176,6 +176,11 @@ public class Quests extends JavaPlugin {
taskTypeManager.registerTaskType(new EssentialsMoneyEarnTaskType());
taskTypeManager.registerTaskType(new EssentialsBalanceTaskType());
}
+ if (Bukkit.getPluginManager().isPluginEnabled("ShopGUIPlus")) {
+ // not tested
+ taskTypeManager.registerTaskType(new ShopGUIPlusBuyTaskType());
+ taskTypeManager.registerTaskType(new ShopGUIPlusBuyTaskType());
+ }
taskTypeManager.closeRegistrations();
reloadQuests();
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
index a085a89c..ae1ec467 100644
--- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/TaskType.java
@@ -76,6 +76,8 @@ public abstract class TaskType implements Listener {
return description;
}
+ //TODO rework this
+ @Deprecated
public List<ConfigValue> getCreatorConfigValues() {
// not implemented here
return Collections.emptyList();
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyTaskType.java
new file mode 100644
index 00000000..d3b69eed
--- /dev/null
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusBuyTaskType.java
@@ -0,0 +1,85 @@
+package com.leonardobishop.quests.quests.tasktypes.types.dependent;
+
+import com.leonardobishop.quests.QuestsConfigLoader;
+import com.leonardobishop.quests.api.QuestsAPI;
+import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.quests.Quest;
+import com.leonardobishop.quests.quests.Task;
+import com.leonardobishop.quests.quests.tasktypes.TaskType;
+import com.leonardobishop.quests.quests.tasktypes.TaskUtils;
+import net.brcdev.shopgui.event.ShopPreTransactionEvent;
+import net.brcdev.shopgui.shop.ShopManager;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class ShopGUIPlusBuyTaskType extends TaskType {
+
+ public ShopGUIPlusBuyTaskType() {
+ super("shopguiplus_buy", "LMBishop", "Purchase a given item from a ShopGUI+ shop");
+ }
+
+ @Override
+ public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
+ ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType()))
+ TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount");
+ TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType());
+ return problems;
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onMobKill(ShopPreTransactionEvent event) {
+ if (event.getShopAction() != ShopManager.ShopAction.BUY) return;
+
+ QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
+
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+
+ for (Quest quest : super.getRegisteredQuests()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
+
+ for (Task task : quest.getTasksOfType(super.getType())) {
+ if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue;
+
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+
+ if (taskProgress.isCompleted()) {
+ continue;
+ }
+
+ String configName = (String) task.getConfigValue("id");
+
+ if (!event.getShopItem().getId().equals(configName)) {
+ return;
+ }
+
+ int amountNeeded = (int) task.getConfigValue("amount");
+
+ int progressAmount;
+ if (taskProgress.getProgress() == null) {
+ progressAmount = 0;
+ } else {
+ progressAmount = (int) taskProgress.getProgress();
+ }
+
+ taskProgress.setProgress(progressAmount + event.getAmount());
+
+ if (((int) taskProgress.getProgress()) >= amountNeeded) {
+ taskProgress.setCompleted(true);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellTaskType.java
new file mode 100644
index 00000000..ddc4c87a
--- /dev/null
+++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ShopGUIPlusSellTaskType.java
@@ -0,0 +1,85 @@
+package com.leonardobishop.quests.quests.tasktypes.types.dependent;
+
+import com.leonardobishop.quests.QuestsConfigLoader;
+import com.leonardobishop.quests.api.QuestsAPI;
+import com.leonardobishop.quests.player.QPlayer;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgress;
+import com.leonardobishop.quests.player.questprogressfile.QuestProgressFile;
+import com.leonardobishop.quests.player.questprogressfile.TaskProgress;
+import com.leonardobishop.quests.quests.Quest;
+import com.leonardobishop.quests.quests.Task;
+import com.leonardobishop.quests.quests.tasktypes.TaskType;
+import com.leonardobishop.quests.quests.tasktypes.TaskUtils;
+import net.brcdev.shopgui.event.ShopPreTransactionEvent;
+import net.brcdev.shopgui.shop.ShopManager;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class ShopGUIPlusSellTaskType extends TaskType {
+
+ public ShopGUIPlusSellTaskType() {
+ super("shopguiplus_sell", "LMBishop", "Sell a given item from to a ShopGUI+ shop");
+ }
+
+ @Override
+ public List<QuestsConfigLoader.ConfigProblem> detectProblemsInConfig(String root, HashMap<String, Object> config) {
+ ArrayList<QuestsConfigLoader.ConfigProblem> problems = new ArrayList<>();
+ if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType()))
+ TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, false, "amount");
+ TaskUtils.configValidateExists(root + ".id", config.get("id"), problems, "id", super.getType());
+ return problems;
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
+ public void onMobKill(ShopPreTransactionEvent event) {
+ if (event.getShopAction() != ShopManager.ShopAction.SELL || event.getShopAction() != ShopManager.ShopAction.SELL_ALL) return;
+
+ QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
+
+ QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile();
+
+ for (Quest quest : super.getRegisteredQuests()) {
+ if (questProgressFile.hasStartedQuest(quest)) {
+ QuestProgress questProgress = questProgressFile.getQuestProgress(quest);
+
+ for (Task task : quest.getTasksOfType(super.getType())) {
+ if (!TaskUtils.validateWorld(event.getPlayer().getWorld().getName(), task)) continue;
+
+ TaskProgress taskProgress = questProgress.getTaskProgress(task.getId());
+
+ if (taskProgress.isCompleted()) {
+ continue;
+ }
+
+ String configName = (String) task.getConfigValue("id");
+
+ if (!event.getShopItem().getId().equals(configName)) {
+ return;
+ }
+
+ int amountNeeded = (int) task.getConfigValue("amount");
+
+ int progressAmount;
+ if (taskProgress.getProgress() == null) {
+ progressAmount = 0;
+ } else {
+ progressAmount = (int) taskProgress.getProgress();
+ }
+
+ taskProgress.setProgress(progressAmount + event.getAmount());
+
+ if (((int) taskProgress.getProgress()) >= amountNeeded) {
+ taskProgress.setCompleted(true);
+ }
+ }
+ }
+ }
+ }
+}