aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main/java')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockLevelType.java72
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/SuperiorSkyblockWorthType.java73
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java21
4 files changed, 173 insertions, 0 deletions
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<ConfigProblem> validateConfig(@NotNull String root, @NotNull HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> 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<ConfigProblem> validateConfig(@NotNull String root, @NotNull HashMap<String, Object> config) {
+ ArrayList<ConfigProblem> 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<ConfigProblem> 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<ConfigProblem> problems, boolean allowNull, boolean greaterThanZero, String... args) {
if (object == null) {
if (!allowNull) {