From afecac14e341dec1e30f4a2639c8cc1337dbe86a Mon Sep 17 00:00:00 2001 From: Krakenied Date: Sun, 8 Jun 2025 18:58:19 +0200 Subject: Implement FancyNpcs support --- .../quests/bukkit/BukkitQuestsPlugin.java | 4 +++ .../type/dependent/FancyNpcsDeliverTaskType.java | 41 ++++++++++++++++++++++ .../type/dependent/FancyNpcsInteractTaskType.java | 41 ++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsDeliverTaskType.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsInteractTaskType.java (limited to 'bukkit/src/main/java/com/leonardobishop') 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 21afa14f..a08fb4f0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -120,6 +120,8 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EcoMobsKillingTa 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.FancyNpcsDeliverTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.FancyNpcsInteractTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.IridiumSkyblockValueTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.MythicMobsKillingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.NuVotifierVoteTaskType; @@ -500,6 +502,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(() -> new EssentialsBalanceTaskType(this), () -> CompatUtils.isPluginEnabled("Essentials")); taskTypeManager.registerTaskType(() -> new EssentialsMoneyEarnTaskType(this), () -> CompatUtils.isPluginEnabled("Essentials")); taskTypeManager.registerTaskType(() -> new FabledSkyBlockLevelTaskType(this), () -> CompatUtils.isPluginEnabled("FabledSkyBlock")); // not tested + taskTypeManager.registerTaskType(() -> new FancyNpcsDeliverTaskType(this), () -> CompatUtils.isPluginEnabled("FancyNpcs")); + taskTypeManager.registerTaskType(() -> new FancyNpcsInteractTaskType(this), () -> CompatUtils.isPluginEnabled("FancyNpcs")); taskTypeManager.registerTaskType(() -> new PinataPartyHitTaskType(this), () -> CompatUtils.isPluginEnabled("PinataParty")); taskTypeManager.registerTaskType(() -> new PlaceholderAPIEvaluateTaskType(this), () -> CompatUtils.isPluginEnabled("PlaceholderAPI")); taskTypeManager.registerTaskType(() -> new PlayerPointsEarnTaskType(this), () -> CompatUtils.isPluginEnabled("PlayerPoints")); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsDeliverTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsDeliverTaskType.java new file mode 100644 index 00000000..e377642f --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsDeliverTaskType.java @@ -0,0 +1,41 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.common.quest.Task; +import de.oliver.fancynpcs.api.Npc; +import de.oliver.fancynpcs.api.actions.ActionTrigger; +import de.oliver.fancynpcs.api.events.NpcInteractEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.List; + +public final class FancyNpcsDeliverTaskType extends DeliverTaskType { + + private final BukkitQuestsPlugin plugin; + + public FancyNpcsDeliverTaskType(BukkitQuestsPlugin plugin) { + super("fancynpcs_deliver", TaskUtils.TASK_ATTRIBUTION_STRING, "Deliver a set of items to a FancyNpcs NPC."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "npc-id")); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onNpcInteract(NpcInteractEvent event) { + ActionTrigger trigger = event.getInteractionType(); + + if (trigger != ActionTrigger.RIGHT_CLICK) { + return; + } + + Npc npc = event.getNpc(); + checkInventory(event.getPlayer(), npc.getData().getId(), npc.getData().getDisplayName(), 1L, plugin); + } + + @Override + public List getNPCId(Task task) { + return TaskUtils.getConfigStringList(task, "npc-id"); + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsInteractTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsInteractTaskType.java new file mode 100644 index 00000000..bb4fd378 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/FancyNpcsInteractTaskType.java @@ -0,0 +1,41 @@ +package com.leonardobishop.quests.bukkit.tasktype.type.dependent; + +import com.leonardobishop.quests.bukkit.BukkitQuestsPlugin; +import com.leonardobishop.quests.bukkit.util.TaskUtils; +import com.leonardobishop.quests.common.quest.Task; +import de.oliver.fancynpcs.api.Npc; +import de.oliver.fancynpcs.api.actions.ActionTrigger; +import de.oliver.fancynpcs.api.events.NpcInteractEvent; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; + +import java.util.List; + +public final class FancyNpcsInteractTaskType extends InteractTaskType { + + private final BukkitQuestsPlugin plugin; + + public FancyNpcsInteractTaskType(BukkitQuestsPlugin plugin) { + super("fancynpcs_interact", TaskUtils.TASK_ATTRIBUTION_STRING, "Interact with a FancyNpcs NPC to complete the quest."); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "npc-id")); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onNpcInteract(NpcInteractEvent event) { + ActionTrigger trigger = event.getInteractionType(); + + if (trigger != ActionTrigger.RIGHT_CLICK) { + return; + } + + Npc npc = event.getNpc(); + handle(event.getPlayer(), npc.getData().getId(), npc.getData().getDisplayName(), plugin); + } + + @Override + public List getNPCId(Task task) { + return TaskUtils.getConfigStringList(task, "npc-id"); + } +} -- cgit v1.2.3-70-g09d2