diff options
5 files changed, 178 insertions, 1 deletions
diff --git a/bukkit/build.gradle b/bukkit/build.gradle index 3c927341..b2910da6 100644 --- a/bukkit/build.gradle +++ b/bukkit/build.gradle @@ -34,7 +34,7 @@ repositories { maven { url = 'https://repo.leonardobishop.com/releases/' } // PlaceholderAPI maven { url = 'https://repo.extendedclip.com/content/repositories/dev/' } - // ItemsAdder, PlayerBlockTracker, SCore, ShopGUIPlus, Slimefun4 + // ItemsAdder, CustomFishing, PlayerBlockTracker, SCore, ShopGUIPlus, Slimefun4 maven { url = 'https://jitpack.io/' } // PlayerPoints maven { url = 'https://repo.rosewooddev.io/repository/public/' } @@ -75,6 +75,8 @@ dependencies { compileOnly('net.citizensnpcs:citizensapi:2.0.30-SNAPSHOT') { transitive = false } // CoreProtect compileOnly 'net.coreprotect:coreprotect:21.2' + // CustomFishing + compileOnly 'com.github.Xiao-MoMi:Custom-Fishing:2.1.2' // EcoBosses, EcoMobs compileOnly 'com.willfp:EcoBosses:9.14.0' compileOnly 'com.willfp:EcoMobs:10.0.0-b1' 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 a1111120..7c349208 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -97,6 +97,8 @@ import com.leonardobishop.quests.bukkit.tasktype.type.dependent.ASkyBlockLevelTa import com.leonardobishop.quests.bukkit.tasktype.type.dependent.BentoBoxLevelTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensDeliverTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CitizensInteractTaskType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CustomFishingGroupType; +import com.leonardobishop.quests.bukkit.tasktype.type.dependent.CustomFishingLootType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EcoBossesKillingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EcoMobsKillingTaskType; import com.leonardobishop.quests.bukkit.tasktype.type.dependent.EssentialsBalanceTaskType; @@ -449,6 +451,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { taskTypeManager.registerTaskType(() -> new ASkyBlockLevelTaskType(this), () -> CompatUtils.isPluginEnabled("ASkyBlock")); taskTypeManager.registerTaskType(() -> new CitizensDeliverTaskType(this), () -> CompatUtils.isPluginEnabled("Citizens")); taskTypeManager.registerTaskType(() -> new CitizensInteractTaskType(this), () -> CompatUtils.isPluginEnabled("Citizens")); + taskTypeManager.registerTaskType(() -> new CustomFishingLootType(this), () -> CompatUtils.isPluginEnabled("CustomFishing")); + taskTypeManager.registerTaskType(() -> new CustomFishingGroupType(this), () -> CompatUtils.isPluginEnabled("CustomFishing")); taskTypeManager.registerTaskType(() -> new EcoBossesKillingTaskType(this), () -> CompatUtils.isPluginEnabled("EcoBosses")); taskTypeManager.registerTaskType(() -> new EcoMobsKillingTaskType(this), () -> CompatUtils.isPluginEnabled("EcoMobs")); taskTypeManager.registerTaskType(() -> new EssentialsBalanceTaskType(this), () -> CompatUtils.isPluginEnabled("Essentials")); diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingGroupType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingGroupType.java new file mode 100644 index 00000000..90d8e885 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingGroupType.java @@ -0,0 +1,91 @@ +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.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 net.momirealms.customfishing.api.event.FishingResultEvent; +import net.momirealms.customfishing.api.mechanic.loot.Loot; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +import java.util.Arrays; + +public final class CustomFishingGroupType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public CustomFishingGroupType(BukkitQuestsPlugin plugin) { + super("customfishing_group", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of loots in a certain group"); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "group", "groups")); + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + + plugin.getServer().getPluginManager().registerEvents(new CustomFishingListener(), plugin); + } + + private final class CustomFishingListener implements Listener { + + @EventHandler(ignoreCancelled = true) + public void onFishing(FishingResultEvent event) { + handle(event); + } + } + + private void handle(FishingResultEvent event) { + if (event.getResult() == FishingResultEvent.Result.FAILURE) + return; + + final Player player = event.getPlayer(); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + Loot loot = event.getLoot(); + if (loot == null) { + return; + } + + String[] groups = loot.getLootGroup(); + if (groups == null || groups.length == 0) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player caught group " + Arrays.toString(groups), quest.getId(), task.getId(), player.getUniqueId()); + + loop: { + for (String group : groups) { + if (TaskUtils.matchString(this, pendingTask, group, player.getUniqueId(), "group", "groups", false, false)) { + break loop; + } + } + super.debug("Continuing...", 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, pendingTask, amount); + } + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java new file mode 100644 index 00000000..c80d4971 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java @@ -0,0 +1,79 @@ +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.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 net.momirealms.customfishing.api.event.FishingResultEvent; +import net.momirealms.customfishing.api.mechanic.loot.Loot; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; + +public final class CustomFishingLootType extends BukkitTaskType { + + private final BukkitQuestsPlugin plugin; + + public CustomFishingLootType(BukkitQuestsPlugin plugin) { + super("customfishing_loot", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of a loot"); + this.plugin = plugin; + + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "loot", "loots")); + super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount")); + super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount")); + + plugin.getServer().getPluginManager().registerEvents(new CustomFishingListener(), plugin); + } + + private final class CustomFishingListener implements Listener { + + @EventHandler(ignoreCancelled = true) + public void onFishing(FishingResultEvent event) { + handle(event); + } + } + + private void handle(FishingResultEvent event) { + if (event.getResult() == FishingResultEvent.Result.FAILURE) + return; + + final Player player = event.getPlayer(); + QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId()); + if (qPlayer == null) { + return; + } + + Loot loot = event.getLoot(); + if (loot == null) { + return; + } + + for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) { + Quest quest = pendingTask.quest(); + Task task = pendingTask.task(); + TaskProgress taskProgress = pendingTask.taskProgress(); + + super.debug("Player caught loot " + loot.getID(), quest.getId(), task.getId(), player.getUniqueId()); + + if (!TaskUtils.matchString(this, pendingTask, loot.getID(), player.getUniqueId(), "loot", "loots", false, false)) { + super.debug("Continuing...", 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, pendingTask, amount); + } + } +} diff --git a/bukkit/src/main/resources/plugin.yml b/bukkit/src/main/resources/plugin.yml index 5c75b9aa..b1f854ff 100644 --- a/bukkit/src/main/resources/plugin.yml +++ b/bukkit/src/main/resources/plugin.yml @@ -12,6 +12,7 @@ softdepend: - Citizens - CMI - CoreProtect +- CustomFishing - EcoBosses - EcoMobs - Essentials |
