From 2622c7727e36a6810d041ede06e175f8fd4fd42d Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Thu, 4 Feb 2021 17:49:44 +0000 Subject: Moved dependent task types to their own package --- .../java/com/leonardobishop/quests/Quests.java | 1 + .../quests/tasktypes/types/ASkyBlockLevelType.java | 75 ----------- .../tasktypes/types/BentoBoxLevelTaskType.java | 104 -------------- .../tasktypes/types/CitizensDeliverTaskType.java | 150 --------------------- .../tasktypes/types/CitizensInteractTaskType.java | 82 ----------- .../tasktypes/types/IridiumSkyblockValueType.java | 101 -------------- .../tasktypes/types/MythicMobsKillingType.java | 104 -------------- .../types/PlaceholderAPIEvaluateTaskType.java | 77 ----------- .../types/dependent/ASkyBlockLevelType.java | 75 +++++++++++ .../types/dependent/BentoBoxLevelTaskType.java | 104 ++++++++++++++ .../types/dependent/CitizensDeliverTaskType.java | 150 +++++++++++++++++++++ .../types/dependent/CitizensInteractTaskType.java | 82 +++++++++++ .../types/dependent/IridiumSkyblockValueType.java | 101 ++++++++++++++ .../types/dependent/MythicMobsKillingType.java | 104 ++++++++++++++ .../dependent/PlaceholderAPIEvaluateTaskType.java | 77 +++++++++++ .../types/dependent/uSkyBlockLevelType.java | 77 +++++++++++ .../quests/tasktypes/types/uSkyBlockLevelType.java | 77 ----------- 17 files changed, 771 insertions(+), 770 deletions(-) delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ASkyBlockLevelType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensDeliverTaskType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensInteractTaskType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/IridiumSkyblockValueType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MythicMobsKillingType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java create mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java delete mode 100644 src/main/java/com/leonardobishop/quests/quests/tasktypes/types/uSkyBlockLevelType.java diff --git a/src/main/java/com/leonardobishop/quests/Quests.java b/src/main/java/com/leonardobishop/quests/Quests.java index a957425c..e499c69a 100644 --- a/src/main/java/com/leonardobishop/quests/Quests.java +++ b/src/main/java/com/leonardobishop/quests/Quests.java @@ -17,6 +17,7 @@ import com.leonardobishop.quests.quests.QuestManager; import com.leonardobishop.quests.quests.tasktypes.TaskType; import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; import com.leonardobishop.quests.quests.tasktypes.types.*; +import com.leonardobishop.quests.quests.tasktypes.types.dependent.*; import com.leonardobishop.quests.title.Title; import com.leonardobishop.quests.title.Title_Bukkit; import com.leonardobishop.quests.title.Title_BukkitNoTimings; diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ASkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ASkyBlockLevelType.java deleted file mode 100644 index 6520b13b..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/ASkyBlockLevelType.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import com.wasteofplastic.askyblock.events.IslandPostLevelEvent; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class ASkyBlockLevelType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - - public ASkyBlockLevelType() { - super("askyblock_level", "LMBishop", "Reach a certain island level for ASkyBlock."); - this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) - TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); - return problems; - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onIslandLevel(IslandPostLevelEvent event) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer(), true); - 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())) { - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - long islandLevelNeeded = (long) (int) task.getConfigValue("level"); - - taskProgress.setProgress(event.getLongLevel()); - - if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { - taskProgress.setCompleted(true); - } - } - } - } - } -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java deleted file mode 100644 index 534fe45f..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import org.bukkit.event.EventHandler; -import world.bentobox.bentobox.BentoBox; -import world.bentobox.bentobox.api.events.BentoBoxEvent; -import world.bentobox.bentobox.database.objects.Island; - -import java.lang.reflect.Field; -import java.util.*; -import java.util.concurrent.atomic.AtomicLong; - -public final class BentoBoxLevelTaskType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - private Field levelField = null; - - public BentoBoxLevelTaskType() { - super("bentobox_level", "Rodney_Mc_Kay", "Reach a certain island level in the level addon for BentoBox."); - this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) - TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); - return problems; - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - public static void register(TaskTypeManager manager) { - if (BentoBox.getInstance().getAddonsManager().getAddonByName("Level").isPresent()) { - manager.registerTaskType(new BentoBoxLevelTaskType()); - } - } - - @EventHandler - public void onBentoBoxIslandLevelCalculated(BentoBoxEvent event) { - Map keyValues = event.getKeyValues(); - - if ("IslandLevelCalculatedEvent".equalsIgnoreCase(event.getEventName())) { - Island island = (Island) keyValues.get("island"); - - for (UUID member : island.getMemberSet()) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(member, true); - if (qPlayer == null) { - continue; - } - - 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())) { - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - long islandLevelNeeded = (long) (int) task.getConfigValue("level"); - - Object results = keyValues.get("results"); - - try { - if (levelField == null) { - levelField = results.getClass().getDeclaredField("level"); - levelField.setAccessible(true); - } - - AtomicLong level = (AtomicLong) levelField.get(results); - taskProgress.setProgress(level.get()); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } - - if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { - taskProgress.setCompleted(true); - } - } - } - } - } - } - } -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensDeliverTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensDeliverTaskType.java deleted file mode 100644 index 33c59b0f..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensDeliverTaskType.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -import com.leonardobishop.quests.Quests; -import com.leonardobishop.quests.QuestsConfigLoader; -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import net.citizensnpcs.api.event.NPCRightClickEvent; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.inventory.ItemStack; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class CitizensDeliverTaskType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - - public CitizensDeliverTaskType() { - super("citizens_deliver", "LMBishop", "Deliver a set of items to a NPC."); - this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve.")); - this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item.")); - this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC.")); - this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, " + - "default = false).")); - this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { - Object configBlock = config.get("item"); - if (configBlock instanceof ConfigurationSection) { - String itemloc = "item.type"; - if (!config.containsKey("item.type")) { - itemloc = "item.item"; - } - if (!config.containsKey(itemloc)) { - problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, - QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item")); - } else { - String type = String.valueOf(config.get(itemloc)); - if (!Quests.get().getItemGetter().isValidMaterial(type)) { - problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, - QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + "." + itemloc)); - } - } - } else { - if (Material.getMaterial(String.valueOf(configBlock)) == null) { - problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, - QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item")); - } - } - } - if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) - TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); - TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType()); - TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType()); - return problems; - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onNPCClick(NPCRightClickEvent event) { - Bukkit.getScheduler().runTaskLater(Quests.get(), () -> checkInventory(event.getClicker(), event.getNPC().getName()), 1L); - } - - @SuppressWarnings("deprecation") - private void checkInventory(Player player, String citizenName) { - if (player == null || !player.isOnline()) { - return; - } - QPlayer qPlayer = Quests.get().getPlayerManager().getPlayer(player.getUniqueId(), true); - 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 (!ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', String.valueOf(task.getConfigValue("npc-name")))).equals(ChatColor - .stripColor(ChatColor.translateAlternateColorCodes('&', citizenName)))) { - return; - } - if (!TaskUtils.validateWorld(player, task)) continue; - - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - Material material; - int amount = (int) task.getConfigValue("amount"); - Object configBlock = task.getConfigValue("item"); - Object configData = task.getConfigValue("data"); - Object remove = task.getConfigValue("remove-items-when-complete"); - - ItemStack is; - if (configBlock instanceof ConfigurationSection) { - is = Quests.get().getItemStack(null, (org.bukkit.configuration.ConfigurationSection) configBlock); - } else { - material = Material.getMaterial(String.valueOf(configBlock)); - - if (material == null) { - continue; - } - if (configData != null) { - is = new ItemStack(material, 1, ((Integer) configData).shortValue()); - } else { - is = new ItemStack(material, 1); - } - } - - if (player.getInventory().containsAtLeast(is, amount)) { - is.setAmount(amount); - taskProgress.setCompleted(true); - - if (remove != null && ((Boolean) remove)) { - player.getInventory().removeItem(is); - } - } - } - } - } - } - -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensInteractTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensInteractTaskType.java deleted file mode 100644 index 68bcfb4a..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/CitizensInteractTaskType.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -import com.leonardobishop.quests.Quests; -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import net.citizensnpcs.api.event.NPCRightClickEvent; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class CitizensInteractTaskType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - - public CitizensInteractTaskType() { - super("citizens_interact", "LMBishop", "Interact with an NPC to complete the quest."); - this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC.")); - this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType()); - TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType()); - return problems; - } - - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onNPCClick(NPCRightClickEvent event) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getClicker().getUniqueId(), true); - 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.getClicker(), task)) continue; - - if (!ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', String.valueOf(task.getConfigValue("npc-name")))).equals(ChatColor - .stripColor(ChatColor.translateAlternateColorCodes('&', event.getNPC().getName())))) { - return; - } - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - taskProgress.setCompleted(true); - } - } - } - } - -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/IridiumSkyblockValueType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/IridiumSkyblockValueType.java deleted file mode 100644 index 97ac0e88..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/IridiumSkyblockValueType.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -import com.iridium.iridiumskyblock.Island; -import com.iridium.iridiumskyblock.User; -import com.leonardobishop.quests.Quests; -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class IridiumSkyblockValueType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - private BukkitTask poll; - - public IridiumSkyblockValueType() { - super("iridiumskyblock_value", "LMBishop", "Reach a certain island value for Iridium Skyblock."); - this.creatorConfigValues.add(new ConfigValue("value", true, "Minimum island value needed.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".value", config.get("value"), problems, "value", super.getType())) - TaskUtils.configValidateInt(root + ".value", config.get("value"), problems, false, false, "value"); - return problems; - } - - @Override - public void onReady() { - this.poll = new BukkitRunnable() { - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - Island island = null; - if ((island = User.getUser(player).getIsland()) == null) { - return; - } - - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId(), true); - if (qPlayer == null) { - return; - } - - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - - for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); - - for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) { - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted() - || (taskProgress.getProgress() != null && (int) taskProgress.getProgress() == island.getValue())) { - continue; - } - - int islandValueNeeded = (int) task.getConfigValue("value"); - - taskProgress.setProgress(island.getValue()); - - if (((int) taskProgress.getProgress()) >= islandValueNeeded) { - taskProgress.setCompleted(true); - } - } - } - } - } - } - }.runTaskTimer(Quests.get(), 50L, 50L); - } - - @Override - public void onDisable() { - if (this.poll != null) { - this.poll.cancel(); - } - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MythicMobsKillingType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MythicMobsKillingType.java deleted file mode 100644 index 844349a4..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/MythicMobsKillingType.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicMobDeathEvent; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class MythicMobsKillingType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - - public MythicMobsKillingType() { - super("mythicmobs_killing", "LMBishop", "Kill a set amount of a MythicMobs entity."); - this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of mobs to be killed.")); - this.creatorConfigValues.add(new ConfigValue("name", true, "The 'internal name' of the MythicMob.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - TaskUtils.configValidateExists(root + ".name", config.get("name"), problems, "name", super.getType()); - if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) - TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); - return problems; - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onMobKill(MythicMobDeathEvent event) { - Entity killer = event.getKiller(); - Entity mob = event.getEntity(); - - if (mob == null || mob instanceof Player) { - return; - } - - if (killer == null) { - return; - } - - String mobName = event.getMobType().getInternalName(); - - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId(), true); - 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(killer.getWorld().getName(), task)) continue; - - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - String configName = (String) task.getConfigValue("name"); - - if (!mobName.equals(configName)) { - return; - } - - int mobKillsNeeded = (int) task.getConfigValue("amount"); - - int progressKills; - if (taskProgress.getProgress() == null) { - progressKills = 0; - } else { - progressKills = (int) taskProgress.getProgress(); - } - - taskProgress.setProgress(progressKills + 1); - - if (((int) taskProgress.getProgress()) >= mobKillsNeeded) { - taskProgress.setCompleted(true); - } - } - } - } - } - -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java deleted file mode 100644 index 7e4af335..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/PlaceholderAPIEvaluateTaskType.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -import com.leonardobishop.quests.Quests; -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import me.clip.placeholderapi.PlaceholderAPI; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; - -import java.util.ArrayList; -import java.util.List; - -public final class PlaceholderAPIEvaluateTaskType extends TaskType { - - private BukkitTask poll; - private List creatorConfigValues = new ArrayList<>(); - - public PlaceholderAPIEvaluateTaskType() { - super("placeholderapi_evaluate", "LMBishop", "Evaluate the result of a placeholder"); - this.creatorConfigValues.add(new ConfigValue("placeholder", true, "The placeholder string (including %%).")); - this.creatorConfigValues.add(new ConfigValue("evaluates", true, "What it should evaluate to be marked as complete.")); - } - - @Override - public void onReady() { - this.poll = new BukkitRunnable() { - @Override - public void run() { - for (Player player : Bukkit.getOnlinePlayers()) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId(), true); - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Quest quest : PlaceholderAPIEvaluateTaskType.super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); - for (Task task : quest.getTasksOfType(PlaceholderAPIEvaluateTaskType.super.getType())) { - if (!TaskUtils.validateWorld(player, task)) continue; - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - if (taskProgress.isCompleted()) { - continue; - } - String placeholder = (String) task.getConfigValue("placeholder"); - String evaluates = (String) task.getConfigValue("evaluates"); - if (placeholder != null) { - if (PlaceholderAPI.setPlaceholders(player, placeholder).equals(evaluates)) { - taskProgress.setCompleted(true); - } - } - } - } - } - } - } - }.runTaskTimer(Quests.get(), 30L, 30L); - } - - @Override - public void onDisable() { - if (this.poll != null) { - this.poll.cancel(); - } - } - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } -} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java new file mode 100644 index 00000000..cc2089a0 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/ASkyBlockLevelType.java @@ -0,0 +1,75 @@ +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import com.wasteofplastic.askyblock.events.IslandPostLevelEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class ASkyBlockLevelType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public ASkyBlockLevelType() { + super("askyblock_level", "LMBishop", "Reach a certain island level for ASkyBlock."); + this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) + TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); + return problems; + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onIslandLevel(IslandPostLevelEvent event) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer(), true); + 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())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + long islandLevelNeeded = (long) (int) task.getConfigValue("level"); + + taskProgress.setProgress(event.getLongLevel()); + + if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java new file mode 100644 index 00000000..2281aecb --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/BentoBoxLevelTaskType.java @@ -0,0 +1,104 @@ +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import org.bukkit.event.EventHandler; +import world.bentobox.bentobox.BentoBox; +import world.bentobox.bentobox.api.events.BentoBoxEvent; +import world.bentobox.bentobox.database.objects.Island; + +import java.lang.reflect.Field; +import java.util.*; +import java.util.concurrent.atomic.AtomicLong; + +public final class BentoBoxLevelTaskType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + private Field levelField = null; + + public BentoBoxLevelTaskType() { + super("bentobox_level", "Rodney_Mc_Kay", "Reach a certain island level in the level addon for BentoBox."); + this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) + TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); + return problems; + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + public static void register(TaskTypeManager manager) { + if (BentoBox.getInstance().getAddonsManager().getAddonByName("Level").isPresent()) { + manager.registerTaskType(new BentoBoxLevelTaskType()); + } + } + + @EventHandler + public void onBentoBoxIslandLevelCalculated(BentoBoxEvent event) { + Map keyValues = event.getKeyValues(); + + if ("IslandLevelCalculatedEvent".equalsIgnoreCase(event.getEventName())) { + Island island = (Island) keyValues.get("island"); + + for (UUID member : island.getMemberSet()) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(member, true); + if (qPlayer == null) { + continue; + } + + 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())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + long islandLevelNeeded = (long) (int) task.getConfigValue("level"); + + Object results = keyValues.get("results"); + + try { + if (levelField == null) { + levelField = results.getClass().getDeclaredField("level"); + levelField.setAccessible(true); + } + + AtomicLong level = (AtomicLong) levelField.get(results); + taskProgress.setProgress(level.get()); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + + if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + } + } +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java new file mode 100644 index 00000000..34f8a2f4 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensDeliverTaskType.java @@ -0,0 +1,150 @@ +package com.leonardobishop.quests.quests.tasktypes.types.dependent; + +import com.leonardobishop.quests.Quests; +import com.leonardobishop.quests.QuestsConfigLoader; +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class CitizensDeliverTaskType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public CitizensDeliverTaskType() { + super("citizens_deliver", "LMBishop", "Deliver a set of items to a NPC."); + this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of item to retrieve.")); + this.creatorConfigValues.add(new ConfigValue("item", true, "Name or ID of item.")); + this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC.")); + this.creatorConfigValues.add(new ConfigValue("remove-items-when-complete", false, "Take the items away from the player on completion (true/false, " + + "default = false).")); + this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".item", config.get("item"), problems, "item", super.getType())) { + Object configBlock = config.get("item"); + if (configBlock instanceof ConfigurationSection) { + String itemloc = "item.type"; + if (!config.containsKey("item.type")) { + itemloc = "item.item"; + } + if (!config.containsKey(itemloc)) { + problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, + QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(""), root + ".item")); + } else { + String type = String.valueOf(config.get(itemloc)); + if (!Quests.get().getItemGetter().isValidMaterial(type)) { + problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, + QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(type), root + "." + itemloc)); + } + } + } else { + if (Material.getMaterial(String.valueOf(configBlock)) == null) { + problems.add(new QuestsConfigLoader.ConfigProblem(QuestsConfigLoader.ConfigProblemType.WARNING, + QuestsConfigLoader.ConfigProblemDescriptions.UNKNOWN_MATERIAL.getDescription(String.valueOf(configBlock)), root + ".item")); + } + } + } + if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) + TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); + TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType()); + TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType()); + return problems; + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onNPCClick(NPCRightClickEvent event) { + Bukkit.getScheduler().runTaskLater(Quests.get(), () -> checkInventory(event.getClicker(), event.getNPC().getName()), 1L); + } + + @SuppressWarnings("deprecation") + private void checkInventory(Player player, String citizenName) { + if (player == null || !player.isOnline()) { + return; + } + QPlayer qPlayer = Quests.get().getPlayerManager().getPlayer(player.getUniqueId(), true); + 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 (!ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', String.valueOf(task.getConfigValue("npc-name")))).equals(ChatColor + .stripColor(ChatColor.translateAlternateColorCodes('&', citizenName)))) { + return; + } + if (!TaskUtils.validateWorld(player, task)) continue; + + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + Material material; + int amount = (int) task.getConfigValue("amount"); + Object configBlock = task.getConfigValue("item"); + Object configData = task.getConfigValue("data"); + Object remove = task.getConfigValue("remove-items-when-complete"); + + ItemStack is; + if (configBlock instanceof ConfigurationSection) { + is = Quests.get().getItemStack(null, (org.bukkit.configuration.ConfigurationSection) configBlock); + } else { + material = Material.getMaterial(String.valueOf(configBlock)); + + if (material == null) { + continue; + } + if (configData != null) { + is = new ItemStack(material, 1, ((Integer) configData).shortValue()); + } else { + is = new ItemStack(material, 1); + } + } + + if (player.getInventory().containsAtLeast(is, amount)) { + is.setAmount(amount); + taskProgress.setCompleted(true); + + if (remove != null && ((Boolean) remove)) { + player.getInventory().removeItem(is); + } + } + } + } + } + } + +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java new file mode 100644 index 00000000..acb39823 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/CitizensInteractTaskType.java @@ -0,0 +1,82 @@ +package com.leonardobishop.quests.quests.tasktypes.types.dependent; + +import com.leonardobishop.quests.Quests; +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import net.citizensnpcs.api.event.NPCRightClickEvent; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class CitizensInteractTaskType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public CitizensInteractTaskType() { + super("citizens_interact", "LMBishop", "Interact with an NPC to complete the quest."); + this.creatorConfigValues.add(new ConfigValue("npc-name", true, "Name of the NPC.")); + this.creatorConfigValues.add(new ConfigValue("worlds", false, "Permitted worlds the player must be in.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + TaskUtils.configValidateExists(root + ".npc-name", config.get("npc-name"), problems, "npc-name", super.getType()); + TaskUtils.configValidateBoolean(root + ".remove-items-when-complete", config.get("remove-items-when-complete"), problems, true, "remove-items-when-complete", super.getType()); + return problems; + } + + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onNPCClick(NPCRightClickEvent event) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getClicker().getUniqueId(), true); + 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.getClicker(), task)) continue; + + if (!ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', String.valueOf(task.getConfigValue("npc-name")))).equals(ChatColor + .stripColor(ChatColor.translateAlternateColorCodes('&', event.getNPC().getName())))) { + return; + } + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + taskProgress.setCompleted(true); + } + } + } + } + +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java new file mode 100644 index 00000000..0882e757 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/IridiumSkyblockValueType.java @@ -0,0 +1,101 @@ +package com.leonardobishop.quests.quests.tasktypes.types.dependent; + +import com.iridium.iridiumskyblock.Island; +import com.iridium.iridiumskyblock.User; +import com.leonardobishop.quests.Quests; +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class IridiumSkyblockValueType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + private BukkitTask poll; + + public IridiumSkyblockValueType() { + super("iridiumskyblock_value", "LMBishop", "Reach a certain island value for Iridium Skyblock."); + this.creatorConfigValues.add(new ConfigValue("value", true, "Minimum island value needed.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".value", config.get("value"), problems, "value", super.getType())) + TaskUtils.configValidateInt(root + ".value", config.get("value"), problems, false, false, "value"); + return problems; + } + + @Override + public void onReady() { + this.poll = new BukkitRunnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + Island island = null; + if ((island = User.getUser(player).getIsland()) == null) { + return; + } + + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId(), true); + if (qPlayer == null) { + return; + } + + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + + for (Quest quest : IridiumSkyblockValueType.super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(IridiumSkyblockValueType.super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted() + || (taskProgress.getProgress() != null && (int) taskProgress.getProgress() == island.getValue())) { + continue; + } + + int islandValueNeeded = (int) task.getConfigValue("value"); + + taskProgress.setProgress(island.getValue()); + + if (((int) taskProgress.getProgress()) >= islandValueNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + } + }.runTaskTimer(Quests.get(), 50L, 50L); + } + + @Override + public void onDisable() { + if (this.poll != null) { + this.poll.cancel(); + } + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java new file mode 100644 index 00000000..b86fe62d --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/MythicMobsKillingType.java @@ -0,0 +1,104 @@ +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import io.lumine.xikage.mythicmobs.api.bukkit.events.MythicMobDeathEvent; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class MythicMobsKillingType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public MythicMobsKillingType() { + super("mythicmobs_killing", "LMBishop", "Kill a set amount of a MythicMobs entity."); + this.creatorConfigValues.add(new ConfigValue("amount", true, "Amount of mobs to be killed.")); + this.creatorConfigValues.add(new ConfigValue("name", true, "The 'internal name' of the MythicMob.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + TaskUtils.configValidateExists(root + ".name", config.get("name"), problems, "name", super.getType()); + if (TaskUtils.configValidateExists(root + ".amount", config.get("amount"), problems, "amount", super.getType())) + TaskUtils.configValidateInt(root + ".amount", config.get("amount"), problems, false, true, "amount"); + return problems; + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onMobKill(MythicMobDeathEvent event) { + Entity killer = event.getKiller(); + Entity mob = event.getEntity(); + + if (mob == null || mob instanceof Player) { + return; + } + + if (killer == null) { + return; + } + + String mobName = event.getMobType().getInternalName(); + + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(killer.getUniqueId(), true); + 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(killer.getWorld().getName(), task)) continue; + + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + String configName = (String) task.getConfigValue("name"); + + if (!mobName.equals(configName)) { + return; + } + + int mobKillsNeeded = (int) task.getConfigValue("amount"); + + int progressKills; + if (taskProgress.getProgress() == null) { + progressKills = 0; + } else { + progressKills = (int) taskProgress.getProgress(); + } + + taskProgress.setProgress(progressKills + 1); + + if (((int) taskProgress.getProgress()) >= mobKillsNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java new file mode 100644 index 00000000..7b8848c9 --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/PlaceholderAPIEvaluateTaskType.java @@ -0,0 +1,77 @@ +package com.leonardobishop.quests.quests.tasktypes.types.dependent; + +import com.leonardobishop.quests.Quests; +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +import java.util.ArrayList; +import java.util.List; + +public final class PlaceholderAPIEvaluateTaskType extends TaskType { + + private BukkitTask poll; + private List creatorConfigValues = new ArrayList<>(); + + public PlaceholderAPIEvaluateTaskType() { + super("placeholderapi_evaluate", "LMBishop", "Evaluate the result of a placeholder"); + this.creatorConfigValues.add(new ConfigValue("placeholder", true, "The placeholder string (including %%).")); + this.creatorConfigValues.add(new ConfigValue("evaluates", true, "What it should evaluate to be marked as complete.")); + } + + @Override + public void onReady() { + this.poll = new BukkitRunnable() { + @Override + public void run() { + for (Player player : Bukkit.getOnlinePlayers()) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(player.getUniqueId(), true); + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + for (Quest quest : PlaceholderAPIEvaluateTaskType.super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + for (Task task : quest.getTasksOfType(PlaceholderAPIEvaluateTaskType.super.getType())) { + if (!TaskUtils.validateWorld(player, task)) continue; + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + if (taskProgress.isCompleted()) { + continue; + } + String placeholder = (String) task.getConfigValue("placeholder"); + String evaluates = (String) task.getConfigValue("evaluates"); + if (placeholder != null) { + if (PlaceholderAPI.setPlaceholders(player, placeholder).equals(evaluates)) { + taskProgress.setCompleted(true); + } + } + } + } + } + } + } + }.runTaskTimer(Quests.get(), 30L, 30L); + } + + @Override + public void onDisable() { + if (this.poll != null) { + this.poll.cancel(); + } + } + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java new file mode 100644 index 00000000..81f9138a --- /dev/null +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/dependent/uSkyBlockLevelType.java @@ -0,0 +1,77 @@ +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.ConfigValue; +import com.leonardobishop.quests.quests.tasktypes.TaskType; +import com.leonardobishop.quests.quests.tasktypes.TaskUtils; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import us.talabrek.ultimateskyblock.api.event.uSkyBlockScoreChangedEvent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class uSkyBlockLevelType extends TaskType { + + private List creatorConfigValues = new ArrayList<>(); + + public uSkyBlockLevelType() { + super("uskyblock_level", "LMBishop", "Reach a certain island level for uSkyBlock."); + this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); + } + + @Override + public List detectProblemsInConfig(String root, HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) + TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); + return problems; + } + + + @Override + public List getCreatorConfigValues() { + return creatorConfigValues; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onIslandLevel(uSkyBlockScoreChangedEvent event) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId(), true); + 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())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + double islandLevelNeeded = (double) (int) task.getConfigValue("level"); + + taskProgress.setProgress(event.getScore().getScore()); + + if (((double) taskProgress.getProgress()) >= islandLevelNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + +} diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/uSkyBlockLevelType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/uSkyBlockLevelType.java deleted file mode 100644 index 0d5ec0a3..00000000 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/uSkyBlockLevelType.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.leonardobishop.quests.quests.tasktypes.types; - -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.ConfigValue; -import com.leonardobishop.quests.quests.tasktypes.TaskType; -import com.leonardobishop.quests.quests.tasktypes.TaskUtils; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import us.talabrek.ultimateskyblock.api.event.uSkyBlockScoreChangedEvent; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -public final class uSkyBlockLevelType extends TaskType { - - private List creatorConfigValues = new ArrayList<>(); - - public uSkyBlockLevelType() { - super("uskyblock_level", "LMBishop", "Reach a certain island level for uSkyBlock."); - this.creatorConfigValues.add(new ConfigValue("level", true, "Minimum island level needed.")); - } - - @Override - public List detectProblemsInConfig(String root, HashMap config) { - ArrayList problems = new ArrayList<>(); - if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) - TaskUtils.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); - return problems; - } - - - @Override - public List getCreatorConfigValues() { - return creatorConfigValues; - } - - @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) - public void onIslandLevel(uSkyBlockScoreChangedEvent event) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(event.getPlayer().getUniqueId(), true); - 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())) { - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); - - if (taskProgress.isCompleted()) { - continue; - } - - double islandLevelNeeded = (double) (int) task.getConfigValue("level"); - - taskProgress.setProgress(event.getScore().getScore()); - - if (((double) taskProgress.getProgress()) >= islandLevelNeeded) { - taskProgress.setCompleted(true); - } - } - } - } - } - -} -- cgit v1.2.3-70-g09d2