From b313adff9ea4ca682d7082cdbeb86e6e28569bc4 Mon Sep 17 00:00:00 2001 From: PikaMug <2267126+PikaMug@users.noreply.github.com> Date: Fri, 1 Jan 2021 16:23:46 -0500 Subject: [PATCH] Call password objective event on sync to prevent exception --- .../java/me/blackvein/quests/Quester.java | 66 ++++++++++--------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java index 401b1b37f..dd8422cb2 100644 --- a/main/src/main/java/me/blackvein/quests/Quester.java +++ b/main/src/main/java/me/blackvein/quests/Quester.java @@ -2615,45 +2615,47 @@ public class Quester implements Comparable { */ public void sayPassword(final Quest quest, final AsyncPlayerChatEvent evt) { final ObjectiveType type = ObjectiveType.PASSWORD; - final QuesterPreUpdateObjectiveEvent preEvent = new QuesterPreUpdateObjectiveEvent(this, quest, - new Objective(type, 1, 1)); - plugin.getServer().getPluginManager().callEvent(preEvent); - - boolean done = false; - for (final LinkedList passes : getCurrentStage(quest).passwordPhrases) { - done = false; - for (final String pass : passes) { - if (pass.equalsIgnoreCase(evt.getMessage())) { - evt.setCancelled(true); - final String display = getCurrentStage(quest).passwordDisplays.get(getCurrentStage(quest) - .passwordPhrases.indexOf(passes)); - getQuestData(quest).passwordsSaid.put(display, true); - done = true; - plugin.getServer().getScheduler().runTask(plugin, () -> { - finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1), - new ItemStack(Material.AIR, 1)), null, null, null, null, null, null, display, null); - - // Multiplayer - dispatchMultiplayerObjectives(quest, getCurrentStage(quest), (final Quester q) -> { - q.getQuestData(quest).passwordsSaid.put(display, true); - q.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1), + plugin.getServer().getScheduler().runTask(plugin, () -> { + final QuesterPreUpdateObjectiveEvent preEvent = new QuesterPreUpdateObjectiveEvent(this, quest, + new Objective(type, 1, 1)); + plugin.getServer().getPluginManager().callEvent(preEvent); + + boolean done = false; + for (final LinkedList passes : getCurrentStage(quest).passwordPhrases) { + done = false; + for (final String pass : passes) { + if (pass.equalsIgnoreCase(evt.getMessage())) { + evt.setCancelled(true); + final String display = getCurrentStage(quest).passwordDisplays.get(getCurrentStage(quest) + .passwordPhrases.indexOf(passes)); + getQuestData(quest).passwordsSaid.put(display, true); + done = true; + plugin.getServer().getScheduler().runTask(plugin, () -> { + finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1), new ItemStack(Material.AIR, 1)), null, null, null, null, null, null, display, null); - return null; + + // Multiplayer + dispatchMultiplayerObjectives(quest, getCurrentStage(quest), (final Quester q) -> { + q.getQuestData(quest).passwordsSaid.put(display, true); + q.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1), + new ItemStack(Material.AIR, 1)), null, null, null, null, null, null, display, null); + return null; + }); }); - }); + break; + } + } + if (done) { break; } } + if (done) { - break; + final QuesterPostUpdateObjectiveEvent postEvent = new QuesterPostUpdateObjectiveEvent(this, quest, + new Objective(type, 1, 1)); + plugin.getServer().getPluginManager().callEvent(postEvent); } - } - - if (done) { - final QuesterPostUpdateObjectiveEvent postEvent = new QuesterPostUpdateObjectiveEvent(this, quest, - new Objective(type, 1, 1)); - plugin.getServer().getPluginManager().callEvent(postEvent); - } + }); } /**