From c6df769699507fc440cd46cdf4ab7bb9e8b6276b Mon Sep 17 00:00:00 2001 From: RodneyMKay Date: Thu, 2 Apr 2020 19:23:55 +0200 Subject: Fix bentobox island members not being included in level task --- .../tasktypes/types/BentoBoxLevelTaskType.java | 62 ++++++++++++---------- 1 file changed, 35 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java index 52fa65ca..da4e1860 100644 --- a/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java +++ b/src/main/java/com/leonardobishop/quests/quests/tasktypes/types/BentoBoxLevelTaskType.java @@ -13,10 +13,12 @@ import com.leonardobishop.quests.quests.tasktypes.TaskTypeManager; import org.bukkit.event.EventHandler; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.events.BentoBoxEvent; +import world.bentobox.bentobox.database.objects.Island; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicLong; @@ -43,43 +45,49 @@ public final class BentoBoxLevelTaskType extends TaskType { @EventHandler public void onBentoBoxIslandLevelCalculated(BentoBoxEvent event) { + Map keyValues = event.getKeyValues(); + if ("IslandLevelCalculatedEvent".equalsIgnoreCase(event.getEventName())) { - QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer((UUID) event.getKeyValues().get("targetPlayer")); - if (qPlayer == null) { - return; - } + Island island = (Island) keyValues.get("targetPlayer"); - QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); + for (UUID member : island.getMemberSet()) { + QPlayer qPlayer = QuestsAPI.getPlayerManager().getPlayer(member); + if (qPlayer == null) { + continue; + } - for (Quest quest : super.getRegisteredQuests()) { - if (questProgressFile.hasStartedQuest(quest)) { - QuestProgress questProgress = questProgressFile.getQuestProgress(quest); + QuestProgressFile questProgressFile = qPlayer.getQuestProgressFile(); - for (Task task : quest.getTasksOfType(super.getType())) { - TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + for (Quest quest : super.getRegisteredQuests()) { + if (questProgressFile.hasStartedQuest(quest)) { + QuestProgress questProgress = questProgressFile.getQuestProgress(quest); - if (taskProgress.isCompleted()) { - continue; - } + for (Task task : quest.getTasksOfType(super.getType())) { + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); + + if (taskProgress.isCompleted()) { + continue; + } - long islandLevelNeeded = (long) (int) task.getConfigValue("level"); + long islandLevelNeeded = (long) (int) task.getConfigValue("level"); - Object results = event.getKeyValues().get("results"); + Object results = keyValues.get("results"); - try { - if (levelField == null) { - levelField = results.getClass().getDeclaredField("level"); - levelField.setAccessible(true); - } + try { + if (levelField == null) { + levelField = results.getClass().getDeclaredField("level"); + levelField.setAccessible(true); + } - AtomicLong level = (AtomicLong) levelField.get(results); - taskProgress.setProgress(level.get()); - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } + AtomicLong level = (AtomicLong) levelField.get(results); + taskProgress.setProgress(level.get()); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } - if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { - taskProgress.setCompleted(true); + if (((long) taskProgress.getProgress()) >= islandLevelNeeded) { + taskProgress.setCompleted(true); + } } } } -- cgit v1.2.3-70-g09d2