From d8c036247cef5edd82e83b26e40a8edb66b07d94 Mon Sep 17 00:00:00 2001 From: Krakenied Date: Sun, 9 Jul 2023 11:01:33 +0200 Subject: Alternative task constraints implementation --- .../quests/bukkit/util/TaskUtils.java | 16 ++++++++-------- .../bukkit/util/constraint/TaskConstraint.java | 15 +++++++++++++++ .../bukkit/util/constraint/TaskConstraintSet.java | 22 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 8 deletions(-) create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java create mode 100644 bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraintSet.java (limited to 'bukkit/src/main') 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 44f104e9..c9b8a320 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 @@ -5,6 +5,8 @@ import com.leonardobishop.quests.bukkit.item.ParsedQuestItem; import com.leonardobishop.quests.bukkit.item.QuestItem; import com.leonardobishop.quests.bukkit.tasktype.BukkitTaskType; import com.leonardobishop.quests.bukkit.util.chat.Chat; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraint; +import com.leonardobishop.quests.bukkit.util.constraint.TaskConstraintSet; import com.leonardobishop.quests.common.config.ConfigProblem; import com.leonardobishop.quests.common.config.ConfigProblemDescriptions; import com.leonardobishop.quests.common.player.QPlayer; @@ -27,7 +29,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.UUID; @@ -140,16 +141,19 @@ public class TaskUtils { return progress; } - public static List getApplicableTasks(Player player, QPlayer qPlayer, TaskType type, TaskConstraint... constraints) { + public static List getApplicableTasks(Player player, QPlayer qPlayer, TaskType type) { + return getApplicableTasks(player, qPlayer, type, TaskConstraintSet.NONE); + } + + public static List getApplicableTasks(Player player, QPlayer qPlayer, TaskType type, TaskConstraintSet constraintSet) { List tasks = new ArrayList<>(); - List taskConstraints = Arrays.asList(constraints); for (Quest quest : type.getRegisteredQuests()) { if (qPlayer.hasStartedQuest(quest)) { QuestProgress questProgress = qPlayer.getQuestProgressFile().getQuestProgress(quest); for (Task task : quest.getTasksOfType(type.getType())) { - if (taskConstraints.contains(TaskConstraint.WORLD)) { + if (constraintSet.contains(TaskConstraint.WORLD)) { if (!TaskUtils.validateWorld(player, task)) { continue; } @@ -171,10 +175,6 @@ public class TaskUtils { public record PendingTask(Quest quest, Task task, QuestProgress questProgress, TaskProgress taskProgress) { } - public enum TaskConstraint { - WORLD - } - public static boolean matchBlock(@NotNull BukkitTaskType type, @NotNull PendingTask pendingTask, @NotNull Block block, @NotNull UUID player) { Task task = pendingTask.task; diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java new file mode 100644 index 00000000..24647de4 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java @@ -0,0 +1,15 @@ +package com.leonardobishop.quests.bukkit.util.constraint; + +public enum TaskConstraint { + WORLD(0x00000001); + + private final int value; + + TaskConstraint(final int value) { + this.value = value; + } + + public int getValue() { + return this.value; + } +} diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraintSet.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraintSet.java new file mode 100644 index 00000000..47ac7aca --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraintSet.java @@ -0,0 +1,22 @@ +package com.leonardobishop.quests.bukkit.util.constraint; + +import org.jetbrains.annotations.NotNull; + +public final class TaskConstraintSet { + + public static final TaskConstraintSet ALL = new TaskConstraintSet(TaskConstraint.values()); + public static final TaskConstraintSet NONE = new TaskConstraintSet(); + private final int rawValue; + + public TaskConstraintSet(final @NotNull TaskConstraint... constraints) { + int rawValue = 0; + for (final TaskConstraint constraint : constraints) { + rawValue |= constraint.getValue(); + } + this.rawValue = rawValue; + } + + public boolean contains(final @NotNull TaskConstraint constraint) { + return (this.rawValue & constraint.getValue()) != 0; + } +} -- cgit v1.2.3-70-g09d2