aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java9
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java (renamed from bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingGroupType.java)48
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java71
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java29
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java39
5 files changed, 95 insertions, 101 deletions
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 7c349208..0c9a7925 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -97,8 +97,7 @@ 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.CustomFishingFishingTaskType;
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;
@@ -143,9 +142,6 @@ import net.md_5.bungee.api.chat.BaseComponent;
import org.bstats.bukkit.MetricsLite;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
-import org.bukkit.boss.BarColor;
-import org.bukkit.boss.BarFlag;
-import org.bukkit.boss.BarStyle;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@@ -451,8 +447,7 @@ 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 CustomFishingFishingTaskType(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/CustomFishingFishingTaskType.java
index 6fc3c2a1..bf65f800 100644
--- 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/CustomFishingFishingTaskType.java
@@ -3,6 +3,7 @@ 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;
@@ -12,31 +13,25 @@ import net.momirealms.customfishing.api.mechanic.loot.Loot;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
import java.util.Arrays;
-public final class CustomFishingGroupType extends BukkitTaskType {
+public final class CustomFishingFishingTaskType 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");
+ public CustomFishingFishingTaskType(BukkitQuestsPlugin plugin) {
+ super("customfishing_fishing", TaskUtils.TASK_ATTRIBUTION_STRING, "Catch a set amount of CustomFishing loots");
this.plugin = plugin;
- super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "group", "groups"));
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onFishingResult(FishingResultEvent event) {
- if (event.getResult() == FishingResultEvent.Result.FAILURE)
- return;
-
- final Player player = event.getPlayer();
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
- if (qPlayer == null) {
+ FishingResultEvent.Result result = event.getResult();
+ if (result != FishingResultEvent.Result.SUCCESS) {
return;
}
@@ -45,24 +40,35 @@ public final class CustomFishingGroupType extends BukkitTaskType {
return;
}
- String[] groups = loot.getLootGroup();
- if (groups == null || groups.length == 0) {
+ Player player = event.getPlayer();
+ if (player.hasMetadata("NPC")) {
return;
}
- for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
+ QPlayer qPlayer = plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
+
+ String id = loot.getID();
+ String[] groups = loot.getLootGroup();
+
+ // Cache for performance reasons (used in debug logging)
+ String groupsAsString = Arrays.toString(groups);
+
+ 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 caught group " + Arrays.toString(groups), quest.getId(), task.getId(), player.getUniqueId());
+ super.debug("Player caught loot id " + id + " groups " + groupsAsString, quest.getId(), task.getId(), player.getUniqueId());
+
+ if (!TaskUtils.matchString(this, pendingTask, id, player.getUniqueId(), "loot", "loots", false, false)) {
+ super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
+ continue;
+ }
- loop: {
- for (String group : groups) {
- if (TaskUtils.matchString(this, pendingTask, group, player.getUniqueId(), "group", "groups", false, false)) {
- break loop;
- }
- }
+ if (!TaskUtils.matchAnyString(this, pendingTask, groups, player.getUniqueId(), "group", "groups", false, false)) {
super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
continue;
}
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
deleted file mode 100644
index 6dddc8e0..00000000
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingLootType.java
+++ /dev/null
@@ -1,71 +0,0 @@
-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.EventPriority;
-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"));
- }
-
- @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
- public void onFishingResult(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/java/com/leonardobishop/quests/bukkit/util/StringUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java
index c376c6dc..ea44fef6 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java
@@ -1,5 +1,7 @@
package com.leonardobishop.quests.bukkit.util;
+import java.lang.reflect.Array;
+
/*
* From Apache Commons Lang
* https://github.com/apache/commons-lang/blob/master/LICENSE.txt
@@ -96,4 +98,31 @@ public class StringUtils {
return true;
}
+
+ public static boolean equalsAny(final CharSequence string, final CharSequence[] searchStrings, final boolean ignoreCase) {
+ if (isNotEmpty(searchStrings)) {
+ for (final CharSequence next : searchStrings) {
+ if (equals(string, next, ignoreCase)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ public static <T> boolean isNotEmpty(final T[] array) {
+ return !isEmpty(array);
+ }
+
+ public static boolean isEmpty(final Object[] array) {
+ return isArrayEmpty(array);
+ }
+
+ private static boolean isArrayEmpty(final Object array) {
+ return getLength(array) == 0;
+ }
+
+ public static int getLength(final Object array) {
+ return array != null ? Array.getLength(array) : 0;
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
index 064601b9..ec966576 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
@@ -34,6 +34,7 @@ import org.jetbrains.annotations.Nullable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@@ -501,9 +502,43 @@ public class TaskUtils {
}
for (String name : checkNames) {
- type.debug("Checking against name " + string, pendingTask.quest.getId(), task.getId(), player);
+ type.debug("Checking against name " + name, pendingTask.quest.getId(), task.getId(), player);
- if (StringUtils.equals(string, name, ignoreCase)) {
+ if (StringUtils.equals(name, string, ignoreCase)) {
+ type.debug("Name match", pendingTask.quest.getId(), task.getId(), player);
+ return true;
+ } else {
+ type.debug("Name mismatch", pendingTask.quest.getId(), task.getId(), player);
+ }
+ }
+
+ return false;
+ }
+
+ public static boolean matchAnyString(@NotNull BukkitTaskType type, @NotNull PendingTask pendingTask, @NotNull String @Nullable [] strings, @NotNull UUID player, final @NotNull String stringKey, final @NotNull String listKey, boolean legacyColor, boolean ignoreCase) {
+ Task task = pendingTask.task;
+
+ List<String> checkNames = TaskUtils.getConfigStringList(task, task.getConfigValues().containsKey(stringKey) ? stringKey : listKey);
+ if (checkNames == null) {
+ return true;
+ } else if (checkNames.isEmpty()) {
+ return strings == null || strings.length == 0;
+ }
+
+ if (strings == null || strings.length == 0) {
+ return false;
+ }
+
+ if (legacyColor) {
+ for (int i = 0; i < strings.length; i++) {
+ strings[i] = Chat.legacyColor(strings[i]);
+ }
+ }
+
+ for (String name : checkNames) {
+ type.debug("Checking against name " + name, pendingTask.quest.getId(), task.getId(), player);
+
+ if (StringUtils.equalsAny(name, strings, ignoreCase)) {
type.debug("Name match", pendingTask.quest.getId(), task.getId(), player);
return true;
} else {