From df10945ce46ffa20ce1b9df9735e89625e3e3c16 Mon Sep 17 00:00:00 2001 From: LMBishop <13875753+LMBishop@users.noreply.github.com> Date: Mon, 2 Aug 2021 01:04:54 +0100 Subject: Add superiorskyblock2 (closes #227) --- .../quests/bukkit/BukkitQuestsPlugin.java | 7 +++ .../type/dependent/SuperiorSkyblockLevelType.java | 72 +++++++++++++++++++++ .../type/dependent/SuperiorSkyblockWorthType.java | 73 ++++++++++++++++++++++ .../quests/bukkit/util/TaskUtils.java | 21 +++++++ 4 files changed, 173 insertions(+) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockLevelType.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockWorthType.java (limited to 'bukkit/src') 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 ca0c95ce..3dfdd20b 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -65,6 +65,8 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.MythicMobsKillin import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlaceholderAPIEvaluateTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusBuyCertainTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusSellCertainTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.SuperiorSkyblockLevelType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.SuperiorSkyblockWorthType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.uSkyBlockLevelTaskType; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; @@ -359,6 +361,11 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { // not tested taskTypeManager.registerTaskType(new FabledSkyblockLevelTaskType(this)); } + if (Bukkit.getPluginManager().isPluginEnabled("SuperiorSkyblock2")) { + // not tested + taskTypeManager.registerTaskType(new SuperiorSkyblockLevelType(this)); + taskTypeManager.registerTaskType(new SuperiorSkyblockWorthType(this)); + } taskTypeManager.closeRegistrations(); questsLogger.info(taskTypeManager.getTaskTypes().size() + " task types have been registered" diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockLevelType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockLevelType.java new file mode 100644 index 00000000..82808144 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockLevelType.java @@ -0,0 +1,72 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.bgsoftware.superiorskyblock.api.events.IslandWorthUpdateEvent; +import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.common.config.ConfigProblem; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class SuperiorSkyblockLevelType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public SuperiorSkyblockLevelType(BukkitQuestsPlugin plugin) { + super("superiorskyblock_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level for SuperiorSkyblock."); + this.plugin = plugin; + } + + @Override + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".level", config.get("level"), problems, "level", super.getType())) + TaskUtils.configValidateNumber(root + ".level", config.get("level"), problems, false, false, "level"); + return problems; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onIslandLevel(IslandWorthUpdateEvent event) { + for (SuperiorPlayer player : event.getIsland().getIslandMembers(true)) { + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + continue; + } + + for (Quest quest : super.getRegisteredQuests()) { + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + double islandLevelNeeded = Double.parseDouble(String.valueOf(task.getConfigValue("level"))); + BigDecimal bd = new BigDecimal(islandLevelNeeded); + + taskProgress.setProgress(event.getNewLevel().doubleValue()); + + if (event.getNewLevel().compareTo(bd) > 0) { + taskProgress.setCompleted(true); + } + } + } + } + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockWorthType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockWorthType.java new file mode 100644 index 00000000..43dd142c --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockWorthType.java @@ -0,0 +1,73 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.bgsoftware.superiorskyblock.api.events.IslandWorthUpdateEvent; +import com.bgsoftware.superiorskyblock.api.wrappers.SuperiorPlayer; +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.common.config.ConfigProblem; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.QuestProgress; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import org.apache.commons.lang.math.NumberUtils; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public final class SuperiorSkyblockWorthType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public SuperiorSkyblockWorthType(BukkitQuestsPlugin plugin) { + super("superiorskyblock_worth", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island worth for SuperiorSkyblock."); + this.plugin = plugin; + } + + @Override + public @NotNull List validateConfig(@NotNull String root, @NotNull HashMap config) { + ArrayList problems = new ArrayList<>(); + if (TaskUtils.configValidateExists(root + ".worth", config.get("worth"), problems, "worth", super.getType())) + TaskUtils.configValidateNumber(root + ".worth", config.get("worth"), problems, false, false, "worth"); + return problems; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onIslandLevel(IslandWorthUpdateEvent event) { + for (SuperiorPlayer player : event.getIsland().getIslandMembers(true)) { + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + continue; + } + + for (Quest quest : super.getRegisteredQuests()) { + if (qPlayer.hasStartedQuest(quest)) { + QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); + + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } + + double islandWorthNeeded = Double.parseDouble(String.valueOf(task.getConfigValue("worth"))); + BigDecimal bd = new BigDecimal(islandWorthNeeded); + + taskProgress.setProgress(event.getNewWorth().doubleValue()); + + if (event.getNewWorth().compareTo(bd) > 0) { + taskProgress.setCompleted(true); + } + } + } + } + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java index ce930639..0a217fa5 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java @@ -41,6 +41,27 @@ public class TaskUtils { return true; } + public static void configValidateNumber(String path, Object object, List problems, boolean allowNull, boolean greaterThanZero, String... args) { + if (object == null) { + if (!allowNull) { + problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, + String.format("Expected a number for '%s', but got null instead", (Object[]) args), path)); + } + return; + } + + try { + double d = Double.parseDouble(String.valueOf(object)); + if (greaterThanZero && d <= 0) { + problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, + String.format("Value for field '%s' must be greater than 0", (Object[]) args), path)); + } + } catch (ClassCastException ex) { + problems.add(new ConfigProblem(ConfigProblem.ConfigProblemType.ERROR, + String.format("Expected a number for '%s', but got '" + object + "' instead", (Object[]) args), path)); + } + } + public static void configValidateInt(String path, Object object, List problems, boolean allowNull, boolean greaterThanZero, String... args) { if (object == null) { if (!allowNull) { -- cgit v1.2.3-70-g09d2