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.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java82
2 files changed, 42 insertions, 46 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 7de0c1bd..bafe5381 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -477,6 +477,7 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
// Register task types with enabled plugin compatibility requirement
taskTypeManager.registerTaskType(() -> new ASkyBlockLevelTaskType(this), () -> CompatUtils.isPluginEnabled("ASkyBlock"));
+ taskTypeManager.registerTaskType(() -> new BentoBoxLevelTaskType(this), () -> CompatUtils.isPluginEnabled("BentoBox") && CompatUtils.classExists("world.bentobox.level.events.IslandLevelCalculatedEvent"));
taskTypeManager.registerTaskType(() -> new CitizensDeliverTaskType(this), () -> CompatUtils.isPluginEnabled("Citizens"));
taskTypeManager.registerTaskType(() -> new CitizensInteractTaskType(this), () -> CompatUtils.isPluginEnabled("Citizens"));
taskTypeManager.registerTaskType(() -> new CustomFishingFishingTaskType(this), () -> CompatUtils.isPluginEnabled("CustomFishing"));
@@ -511,11 +512,6 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
return pluginVersion != null && (pluginVersion.startsWith("4") || pluginVersion.startsWith("5"));
});
- // Register task types with even more weird requirements
- if (CompatUtils.isPluginEnabled("BentoBox")) {
- BentoBoxLevelTaskType.register(this, taskTypeManager);
- }
-
// Close task type registrations
taskTypeManager.closeRegistrations();
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java
index fd18c916..7b9e3c98 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/BentoBoxLevelTaskType.java
@@ -3,78 +3,78 @@ 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;
import com.leonardobishop.quests.common.quest.Task;
-import com.leonardobishop.quests.common.tasktype.TaskTypeManager;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import world.bentobox.bentobox.BentoBox;
-import world.bentobox.bentobox.api.events.IslandBaseEvent;
+import org.jetbrains.annotations.NotNull;
import world.bentobox.bentobox.database.objects.Island;
+import world.bentobox.level.events.IslandLevelCalculatedEvent;
+import java.util.Set;
import java.util.UUID;
public final class BentoBoxLevelTaskType extends BukkitTaskType {
private final BukkitQuestsPlugin plugin;
- public BentoBoxLevelTaskType(BukkitQuestsPlugin plugin) {
+ public BentoBoxLevelTaskType(final @NotNull BukkitQuestsPlugin plugin) {
super("bentobox_level", TaskUtils.TASK_ATTRIBUTION_STRING, "Reach a certain island level in the level addon for BentoBox.");
this.plugin = plugin;
- super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "level"));
- super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "level"));
+ this.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "level"));
+ this.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "level"));
}
- public static void register(BukkitQuestsPlugin plugin, TaskTypeManager manager) {
- if (BentoBox.getInstance().getAddonsManager().getAddonByName("Level").isPresent()) {
- manager.registerTaskType(new BentoBoxLevelTaskType(plugin));
- }
- }
-
- // https://github.com/BentoBoxWorld/bentobox/issues/352
@EventHandler
- public void onBentoBoxIslandLevelCalculated(IslandBaseEvent event) {
- if ("IslandLevelCalculatedEvent".equals(event.getEventName())) {
- Island island = (Island) event.getKeyValues().get("island");
+ public void onIslandLevelCalculated(final @NotNull IslandLevelCalculatedEvent event) {
+ final Island island = event.getIsland();
+ final Set<UUID> memberIds = island.getMemberSet();
+ final long level = event.getLevel();
- for (UUID member : island.getMemberSet()) {
- QPlayer qPlayer = plugin.getPlayerManager().getPlayer(member);
- if (qPlayer == null) {
- continue;
- }
+ for (final UUID memberId : memberIds) {
+ final Player player = Bukkit.getPlayer(memberId);
- Player player = Bukkit.getPlayer(member);
+ if (player != null) {
+ this.handle(player, level);
+ }
+ }
+ }
- if (player == null) {
- continue;
- }
+ private void handle(final @NotNull Player player, final long level) {
+ if (player.hasMetadata("NPC")) {
+ return;
+ }
- for (TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this)) {
- Quest quest = pendingTask.quest();
- Task task = pendingTask.task();
- TaskProgress taskProgress = pendingTask.taskProgress();
+ final QPlayer qPlayer = this.plugin.getPlayerManager().getPlayer(player.getUniqueId());
+ if (qPlayer == null) {
+ return;
+ }
- long islandLevelNeeded = (long) (int) task.getConfigValue("level");
- long newLevel = (long) event.getKeyValues().get("level");
+ for (final TaskUtils.PendingTask pendingTask : TaskUtils.getApplicableTasks(player, qPlayer, this, TaskConstraintSet.ALL)) {
+ final Quest quest = pendingTask.quest();
+ final Task task = pendingTask.task();
+ final TaskProgress taskProgress = pendingTask.taskProgress();
- super.debug("Player island level updated to " + newLevel, quest.getId(), task.getId(), member);
+ this.debug("Player island level updated to " + level, quest.getId(), task.getId(), player.getUniqueId());
- taskProgress.setProgress(newLevel);
- super.debug("Updating task progress (now " + newLevel + ")", quest.getId(), task.getId(), player.getUniqueId());
+ //noinspection DataFlowIssue // TODO quest data rework
+ final long levelNeeded = (long) task.getConfigValue("level");
- if (newLevel >= islandLevelNeeded) {
- super.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
- taskProgress.setProgress(newLevel);
- taskProgress.setCompleted(true);
- }
+ final long clampedLevel = Math.max(level, levelNeeded);
+ taskProgress.setProgress(clampedLevel);
+ this.debug("Updating task progress (now " + clampedLevel + ")", quest.getId(), task.getId(), player.getUniqueId());
- TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, islandLevelNeeded);
- }
+ if (level >= levelNeeded) {
+ this.debug("Marking task as complete", quest.getId(), task.getId(), player.getUniqueId());
+ taskProgress.setCompleted(true);
}
+
+ TaskUtils.sendTrackAdvancement(player, quest, task, pendingTask, levelNeeded);
}
}
}