From af711c99c0e01a24b8430f1df10dd3459e7df6c1 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Tue, 17 Oct 2023 13:45:40 +0200 Subject: Add PyroFishingPro fishing task type --- .../quests/bukkit/BukkitQuestsPlugin.java | 2 + .../dependent/PyroFishingProFishingTaskType.java | 90 ++++++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java (limited to 'bukkit/src/main/java') 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 49c24b75..3ddf57d2 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -99,6 +99,7 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.MythicMobsKillin import com.leonardobishop.quests.bukkit.tasktype.type.dependent.NuVotifierVoteTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlaceholderAPIEvaluateTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PlayerPointsEarnTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.PyroFishingProFishingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusBuyTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ShopGUIPlusSellTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.SuperiorSkyblockLevelType; @@ -428,6 +429,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(() -> new FabledSkyblockLevelTaskType(this), () -> CompatUtils.isPluginEnabled("FabledSkyblock")); // not tested taskTypeManager.registerTaskType(() -> new PlaceholderAPIEvaluateTaskType(this), () -> CompatUtils.isPluginEnabled("PlaceholderAPI")); taskTypeManager.registerTaskType(() -> new PlayerPointsEarnTaskType(this), () -> CompatUtils.isPluginEnabled("PlayerPoints")); + taskTypeManager.registerTaskType(() -> new PyroFishingProFishingTaskType(this), () -> CompatUtils.isPluginEnabled("PyroFishingPro") && CompatUtils.classExists("me.arsmagica.API.PyroFishCatchEvent")); taskTypeManager.registerTaskType(() -> new ShopGUIPlusBuyTaskType(this), () -> CompatUtils.isPluginEnabled("ShopGUIPlus")); // not tested taskTypeManager.registerTaskType(() -> new ShopGUIPlusSellTaskType(this), () -> CompatUtils.isPluginEnabled("ShopGUIPlus")); // not tested taskTypeManager.registerTaskType(() -> new SuperiorSkyblockLevelType(this), () -> CompatUtils.isPluginEnabled("SuperiorSkyblock2")); // not tested diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java new file mode 100644 index 00000000..b3399580 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/PyroFishingProFishingTaskType.java @@ -0,0 +1,90 @@ +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.bukkit.util.constraint.TaskConstraintSet; +import com.leonardobishop.quests.common.player.QPlayer; +import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; +import com.leonardobishop.quests.common.quest.Quest; +import com.leonardobishop.quests.common.quest.Task; +import me.arsmagica.API.PyroFishCatchEvent; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerFishEvent; + +public final class PyroFishingProFishingTaskType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + private Player lastPlayer = null; + + public PyroFishingProFishingTaskType(BukkitQuestsPlugin plugin) { + super("pyrofishingpro_fishing", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of a Pyro fish from the sea."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "fish-number")); + } + + @EventHandler(priority = EventPriority.LOW) + public void onPlayerFish(PlayerFishEvent event) { + PlayerFishEvent.State state = event.getState(); + if (state == PlayerFishEvent.State.CAUGHT_FISH) { + lastPlayer = event.getPlayer(); + } + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPyroFishCatch(PyroFishCatchEvent event) { + if (lastPlayer == null) { + return; + } + + Player player = lastPlayer; + if (player.hasMetadata("NPC")) { + return; + } + + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + int fishNumber = event.getFishNumber(); + String tier = event.getTier(); + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player fished item with fish number " + fishNumber + " of tier " + tier, quest.getId(), task.getId(), player.getUniqueId()); + + Integer requiredFishNumber = (Integer) task.getConfigValue("fish-number"); + if (requiredFishNumber != null && requiredFishNumber != fishNumber) { + super.debug("Continuing (fish number does not match the required)...", quest.getId(), task.getId(), player.getUniqueId()); + continue; + } + + String requiredTier = (String) task.getConfigValue("tier"); + if (requiredTier != null && !requiredTier.equals(tier)) { + super.debug("Continuing (tier does not match the required)...", quest.getId(), task.getId(), player.getUniqueId()); + continue; + } + + int progress = TaskUtils.incrementIntegerTaskProgress(taskProgress); + super.debug("Incrementing task progress (now " + progress + ")", quest.getId(), task.getId(), player.getUniqueId()); + + int amount = (int) task.getConfigValue("amount"); + + if (progress >= amount) { + super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId()); + taskProgress.setCompleted(true); + } + + TaskUtils.sendTrackAdvancement(player, quest, task, taskProgress, amount); + } + } +} -- cgit v1.2.3-70-g09d2