diff options
3 files changed, 85 insertions, 0 deletions
diff --git a/bukkit/build.gradle b/bukkit/build.gradle index 707c38bd..6e6c3c31 100644 --- a/bukkit/build.gradle +++ b/bukkit/build.gradle @@ -34,6 +34,8 @@ repositories { maven { url = uri('https://repo.codemc.org/repository/maven-public') } // AuthLib maven { url = 'https://libraries.minecraft.net/' } + // FabledSkyblock + maven { url = 'https://repo.songoda.com/repository/public/' } mavenCentral() } @@ -86,6 +88,8 @@ dependencies { compileOnly 'org.jetbrains:annotations:16.0.2' // AuthLib compileOnly 'com.mojang:authlib:1.5.21' + // FabledSkyblock + compileOnly 'com.songoda:skyblock:2.2.13' // bStats implementation 'org.bstats:bstats-bukkit-lite:1.8' // HikariCP 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 19626893..e741ac76 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -57,6 +57,7 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensDeliverT import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensInteractTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EssentialsBalanceTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EssentialsMoneyEarnTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.FabledSkyblockLevelTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.IridiumSkyblockValueTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.MythicMobsKillingType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlaceholderAPIEvaluateTaskType; @@ -341,6 +342,10 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(new ShopGUIPlusBuyCertainTaskType(this)); taskTypeManager.registerTaskType(new ShopGUIPlusSellCertainTaskType(this)); } + if (Bukkit.getPluginManager().isPluginEnabled("FabledSkyblock")) { + // not tested + taskTypeManager.registerTaskType(new FabledSkyblockLevelTaskType(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/FabledSkyblockLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FabledSkyblockLevelTaskType.java new file mode 100644 index 00000000..953e8279 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FabledSkyblockLevelTaskType.java @@ -0,0 +1,76 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +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 com.songoda.skyblock.api.event.island.IslandLevelChangeEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public final class FabledSkyblockLevelTaskType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public FabledSkyblockLevelTaskType(BukkitQuestsPlugin plugin) { + super("fabledskyblock_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level for FabledSkyblock."); + 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.configValidateInt(root + ".level", config.get("level"), problems, false, false, "level"); + return problems; + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onIslandLevel(IslandLevelChangeEvent event) { + List<UUID> members = new ArrayList<>(); + members.add(event.getIsland().getOwnerUUID()); + members.addAll(event.getIsland().getCoopPlayers().keySet()); + + for (UUID member : members) { + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(member); + 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; + } + + int islandValueNeeded = (int) task.getConfigValue("level"); + + taskProgress.setProgress(event.getLevel().getLevel()); + + if (((double) taskProgress.getProgress()) >= islandValueNeeded) { + taskProgress.setCompleted(true); + } + } + } + } + } + + } + +} |
