aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/build.gradle4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingGroupType.java91
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java79
-rw-r--r--bukkit/src/main/resources/plugin.yml1
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