diff options
| author | Krakenied <Krakenied1@gmail.com> | 2024-03-23 19:02:22 +0100 |
|---|---|---|
| committer | Leonardo Bishop <13875753+LMBishop@users.noreply.github.com> | 2024-04-25 22:04:31 +0100 |
| commit | c1a2be955d97abae159742a6d14cbdb9caba491e (patch) | |
| tree | f979ae850db06b5ee6cf1d8ad5da326ce42aa632 /bukkit/src/main/java/com/leonardobishop | |
| parent | 16d1ee5eedc20cf84931ee44841bb7499503cd54 (diff) | |
Merge task types into one - customfishing_fishing
Diffstat (limited to 'bukkit/src/main/java/com/leonardobishop')
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java | 9 | ||||
| -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.java | 71 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/StringUtils.java | 29 | ||||
| -rw-r--r-- | bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java | 39 |
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 { |
