diff options
Diffstat (limited to 'src/main')
4 files changed, 177 insertions, 0 deletions
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); + } + } + } + } + } +} |
