Add objective update API events, part 3. Fixes #1501

This commit is contained in:
PikaMug 2020-12-17 04:47:38 -05:00
parent c4aa648448
commit 557bcfd6d6
10 changed files with 765 additions and 629 deletions

View File

@ -177,28 +177,30 @@ public abstract class CustomObjective implements Listener {
} }
} }
if (index > -1) { if (index > -1) {
final int progress = quester.getQuestData(quest).customObjectiveCounts.get(obj.getName());
final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index);
final ObjectiveType type = ObjectiveType.CUSTOM; final ObjectiveType type = ObjectiveType.CUSTOM;
final QuesterPreUpdateObjectiveEvent preEvent final QuesterPreUpdateObjectiveEvent preEvent
= new QuesterPreUpdateObjectiveEvent(quester, quest, type); = new QuesterPreUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
plugin.getServer().getPluginManager().callEvent(preEvent); plugin.getServer().getPluginManager().callEvent(preEvent);
final int goal = quester.getCurrentStage(quest).customObjectiveCounts.get(index); if (progress >= goal) {
if (quester.getQuestData(quest).customObjectiveCounts.get(obj.getName()) >= goal) { quester.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
quester.finishObjective(quest, type, new ItemStack(Material.AIR, 1), new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, null, obj);
new ItemStack(Material.AIR, goal), null, null, null, null, null, null, null, obj);
// Multiplayer // Multiplayer
quester.dispatchMultiplayerObjectives(quest, quester.getCurrentStage(quest), (final Quester q) -> { quester.dispatchMultiplayerObjectives(quest, quester.getCurrentStage(quest), (final Quester q) -> {
q.getQuestData(quest).customObjectiveCounts.put(obj.getName(), q.getQuestData(quest).customObjectiveCounts.put(obj.getName(),
quester.getQuestData(quest).customObjectiveCounts.get(obj.getName())); quester.getQuestData(quest).customObjectiveCounts.get(obj.getName()));
q.finishObjective(quest, type, new ItemStack(Material.AIR, 1), q.finishObjective(quest, new Objective(type, new ItemStack(Material.AIR, 1),
new ItemStack(Material.AIR, goal), null, null, null, null, null, null, null, obj); new ItemStack(Material.AIR, goal)), null, null, null, null, null, null, null, obj);
return null; return null;
}); });
} }
final QuesterPostUpdateObjectiveEvent postEvent final QuesterPostUpdateObjectiveEvent postEvent
= new QuesterPostUpdateObjectiveEvent(quester, quest, type); = new QuesterPostUpdateObjectiveEvent(quester, quest, new Objective(type, progress, goal));
plugin.getServer().getPluginManager().callEvent(postEvent); plugin.getServer().getPluginManager().callEvent(postEvent);
} }
} }

View File

@ -0,0 +1,50 @@
package me.blackvein.quests;
import org.bukkit.inventory.ItemStack;
import me.blackvein.quests.enums.ObjectiveType;
public class Objective {
private final ObjectiveType type;
private final int progress;
private final int goal;
private final ItemStack progressStack;
private final ItemStack goalStack;
public Objective(final ObjectiveType type, final int progress, final int goal) {
this.type = type;
this.progress = progress;
this.goal = goal;
this.progressStack = null;
this.goalStack = null;
}
public Objective(final ObjectiveType type, final ItemStack progress, final ItemStack goal) {
this.type = type;
this.progress = progress.getAmount();
this.goal = goal.getAmount();
this.progressStack = progress;
this.goalStack = goal;
}
public ObjectiveType getType() {
return type;
}
public int getProgress() {
return progress;
}
public int getGoal() {
return goal;
}
public ItemStack getItemProgress() {
return progressStack;
}
public ItemStack getItemGoal() {
return goalStack;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@ import org.bukkit.inventory.ItemStack;
import me.blackvein.quests.actions.Action; import me.blackvein.quests.actions.Action;
import me.blackvein.quests.conditions.Condition; import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.enums.ObjectiveType;
public class Stage { public class Stage {
@ -554,59 +555,72 @@ public class Stage {
} }
/** /**
* Check if stage has the specified objective<p> * Check if stage has the specified type of objective<p>
* *
* Accepted strings are: breakBlock, damageBlock, placeBlock, useBlock, * Accepted strings are: breakBlock, damageBlock, placeBlock, useBlock,
* cutBlock, craftItem, smeltItem, enchantItem, brewItem, milkCow, catchFish, * cutBlock, craftItem, smeltItem, enchantItem, brewItem, milkCow, catchFish,
* killMob, deliverItem, killPlayer, talkToNPC, killNPC, tameMob, * killMob, deliverItem, killPlayer, talkToNPC, killNPC, tameMob,
* shearSheep, password, reachLocation * shearSheep, password, reachLocation
* *
* @deprecated Use {@link #containsObjective(ObjectiveType)}
*
* @param type The type of objective to check for * @param type The type of objective to check for
* @return true if stage contains specified objective * @return true if stage contains specified objective
*/ */
@Deprecated
public boolean containsObjective(final String type) { public boolean containsObjective(final String type) {
if (type.equalsIgnoreCase("breakBlock")) { return containsObjective(ObjectiveType.fromName(type));
}
/**
* Check if stage has the specified type of objective<p>
*
* @param type The type of objective to check for
* @return true if stage contains specified objective
*/
public boolean containsObjective(final ObjectiveType type) {
if (type.equals(ObjectiveType.BREAK_BLOCK)) {
return !blocksToBreak.isEmpty(); return !blocksToBreak.isEmpty();
} else if (type.equalsIgnoreCase("damageBlock")) { } else if (type.equals(ObjectiveType.DAMAGE_BLOCK)) {
return !blocksToDamage.isEmpty(); return !blocksToDamage.isEmpty();
} else if (type.equalsIgnoreCase("placeBlock")) { } else if (type.equals(ObjectiveType.PLACE_BLOCK)) {
return !blocksToPlace.isEmpty(); return !blocksToPlace.isEmpty();
} else if (type.equalsIgnoreCase("useBlock")) { } else if (type.equals(ObjectiveType.USE_BLOCK)) {
return !blocksToUse.isEmpty(); return !blocksToUse.isEmpty();
} else if (type.equalsIgnoreCase("cutBlock")) { } else if (type.equals(ObjectiveType.CUT_BLOCK)) {
return !blocksToCut.isEmpty(); return !blocksToCut.isEmpty();
} else if (type.equalsIgnoreCase("craftItem")) { } else if (type.equals(ObjectiveType.CRAFT_ITEM)) {
return !itemsToCraft.isEmpty(); return !itemsToCraft.isEmpty();
} else if (type.equalsIgnoreCase("smeltItem")) { } else if (type.equals(ObjectiveType.SMELT_ITEM)) {
return !itemsToSmelt.isEmpty(); return !itemsToSmelt.isEmpty();
} else if (type.equalsIgnoreCase("enchantItem")) { } else if (type.equals(ObjectiveType.ENCHANT_ITEM)) {
return !itemsToEnchant.isEmpty(); return !itemsToEnchant.isEmpty();
} else if (type.equalsIgnoreCase("brewItem")) { } else if (type.equals(ObjectiveType.BREW_ITEM)) {
return !itemsToBrew.isEmpty(); return !itemsToBrew.isEmpty();
} else if (type.equalsIgnoreCase("consumeItem")) { } else if (type.equals(ObjectiveType.CONSUME_ITEM)) {
return !itemsToConsume.isEmpty(); return !itemsToConsume.isEmpty();
} else if (type.equalsIgnoreCase("milkCow")) { } else if (type.equals(ObjectiveType.DELIVER_ITEM)) {
return cowsToMilk != null;
} else if (type.equalsIgnoreCase("catchFish")) {
return fishToCatch != null;
} else if (type.equalsIgnoreCase("killMob")) {
return !mobsToKill.isEmpty();
} else if (type.equalsIgnoreCase("deliverItem")) {
return !itemsToDeliver.isEmpty(); return !itemsToDeliver.isEmpty();
} else if (type.equalsIgnoreCase("killPlayer")) { } else if (type.equals(ObjectiveType.MILK_COW)) {
return cowsToMilk != null;
} else if (type.equals(ObjectiveType.CATCH_FISH)) {
return fishToCatch != null;
} else if (type.equals(ObjectiveType.KILL_MOB)) {
return !mobsToKill.isEmpty();
} else if (type.equals(ObjectiveType.KILL_PLAYER)) {
return playersToKill != null; return playersToKill != null;
} else if (type.equalsIgnoreCase("talkToNPC")) { } else if (type.equals(ObjectiveType.TALK_TO_NPC)) {
return !citizensToInteract.isEmpty(); return !citizensToInteract.isEmpty();
} else if (type.equalsIgnoreCase("killNPC")) { } else if (type.equals(ObjectiveType.KILL_NPC)) {
return !citizensToKill.isEmpty(); return !citizensToKill.isEmpty();
} else if (type.equalsIgnoreCase("tameMob")) { } else if (type.equals(ObjectiveType.TAME_MOB)) {
return !mobsToTame.isEmpty(); return !mobsToTame.isEmpty();
} else if (type.equalsIgnoreCase("shearSheep")) { } else if (type.equals(ObjectiveType.SHEAR_SHEEP)) {
return !sheepToShear.isEmpty(); return !sheepToShear.isEmpty();
} else if (type.equalsIgnoreCase("password")) { } else if (type.equals(ObjectiveType.REACH_LOCATION)) {
return !passwordPhrases.isEmpty();
} else if (type.equalsIgnoreCase("reachLocation")) {
return !locationsToReach.isEmpty(); return !locationsToReach.isEmpty();
} else if (type.equals(ObjectiveType.PASSWORD)) {
return !passwordPhrases.isEmpty();
} else { } else {
return false; return false;
} }

View File

@ -15,9 +15,9 @@ package me.blackvein.quests.events.quester;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import me.blackvein.quests.Objective;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.enums.ObjectiveType;
/** /**
* Called after a quester progresses an objective * Called after a quester progresses an objective
@ -25,13 +25,13 @@ import me.blackvein.quests.enums.ObjectiveType;
public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Cancellable { public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest; private final Quest quest;
private final ObjectiveType type; private final Objective objective;
private boolean cancel = false; private boolean cancel = false;
public QuesterPostUpdateObjectiveEvent(final Quester quester, final Quest quest, final ObjectiveType type) { public QuesterPostUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
super(quester); super(quester);
this.quest = quest; this.quest = quest;
this.type = type; this.objective = objective;
} }
/** /**
@ -44,12 +44,12 @@ public class QuesterPostUpdateObjectiveEvent extends QuesterEvent implements Can
} }
/** /**
* Returns the type of objective involved in this event * Returns the objective involved in this event
* *
* @return Type which is involved in this event * @return Objective which is involved in this event
*/ */
public ObjectiveType getObjectiveType() { public Objective getObjective() {
return type; return objective;
} }
@Override @Override

View File

@ -15,9 +15,9 @@ package me.blackvein.quests.events.quester;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import me.blackvein.quests.Objective;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.enums.ObjectiveType;
/** /**
* Called before a quester progresses an objective * Called before a quester progresses an objective
@ -25,13 +25,13 @@ import me.blackvein.quests.enums.ObjectiveType;
public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Cancellable { public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private final Quest quest; private final Quest quest;
private final ObjectiveType type; private final Objective objective;
private boolean cancel = false; private boolean cancel = false;
public QuesterPreUpdateObjectiveEvent(final Quester quester, final Quest quest, final ObjectiveType type) { public QuesterPreUpdateObjectiveEvent(final Quester quester, final Quest quest, final Objective objective) {
super(quester); super(quester);
this.quest = quest; this.quest = quest;
this.type = type; this.objective = objective;
} }
/** /**
@ -44,12 +44,12 @@ public class QuesterPreUpdateObjectiveEvent extends QuesterEvent implements Canc
} }
/** /**
* Returns the type of objective involved in this event * Returns the objective involved in this event
* *
* @return Type which is involved in this event * @return Objective which is involved in this event
*/ */
public ObjectiveType getObjectiveType() { public Objective getObjective() {
return type; return objective;
} }
@Override @Override

View File

@ -31,6 +31,7 @@ import org.bukkit.inventory.ItemStack;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.Lang;
public class BlockListener implements Listener { public class BlockListener implements Listener {
@ -49,13 +50,16 @@ public class BlockListener implements Listener {
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState() final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
.getData().toItemStack().getDurability()); .getData().toItemStack().getDurability());
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType breakType = ObjectiveType.BREAK_BLOCK;
final ObjectiveType placeType = ObjectiveType.PLACE_BLOCK;
final ObjectiveType cutType = ObjectiveType.CUT_BLOCK;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (evt.isCancelled() == false) { if (evt.isCancelled() == false) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("breakBlock")) { && quester.getCurrentStage(quest).containsObjective(breakType)) {
if (quest.getOptions().canIgnoreSilkTouch() if (quest.getOptions().canIgnoreSilkTouch()
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { && player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail") player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
@ -64,7 +68,7 @@ public class BlockListener implements Listener {
quester.breakBlock(quest, blockItemStack); quester.breakBlock(quest, blockItemStack);
} }
} }
quester.dispatchMultiplayerEverything(quest, "breakBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, breakType, (final Quester q) -> {
if (quest.getOptions().canIgnoreSilkTouch() if (quest.getOptions().canIgnoreSilkTouch()
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { && player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail") player.sendMessage(ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
@ -75,7 +79,7 @@ public class BlockListener implements Listener {
return null; return null;
}); });
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("placeBlock")) { && quester.getCurrentStage(quest).containsObjective(placeType)) {
for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) { for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) {
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) { if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
final int index = quester.getQuestData(quest).blocksPlaced.indexOf(is); final int index = quester.getQuestData(quest).blocksPlaced.indexOf(is);
@ -84,7 +88,7 @@ public class BlockListener implements Listener {
} }
} }
} }
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, placeType, (final Quester q) -> {
for (final ItemStack is : q.getQuestData(quest).blocksPlaced) { for (final ItemStack is : q.getQuestData(quest).blocksPlaced) {
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) { if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
final int index = q.getQuestData(quest).blocksPlaced.indexOf(is); final int index = q.getQuestData(quest).blocksPlaced.indexOf(is);
@ -95,12 +99,12 @@ public class BlockListener implements Listener {
return null; return null;
}); });
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("cutBlock")) { && quester.getCurrentStage(quest).containsObjective(cutType)) {
if (player.getItemInHand().getType().equals(Material.SHEARS)) { if (player.getItemInHand().getType().equals(Material.SHEARS)) {
quester.cutBlock(quest, blockItemStack); quester.cutBlock(quest, blockItemStack);
} }
} }
quester.dispatchMultiplayerEverything(quest, "cutBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, cutType, (final Quester q) -> {
if (player.getItemInHand().getType().equals(Material.SHEARS)) { if (player.getItemInHand().getType().equals(Material.SHEARS)) {
q.cutBlock(quest, blockItemStack); q.cutBlock(quest, blockItemStack);
} }
@ -119,17 +123,18 @@ public class BlockListener implements Listener {
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState() final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
.getData().toItemStack().getDurability()); .getData().toItemStack().getDurability());
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.DAMAGE_BLOCK;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("damageBlock")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.damageBlock(quest, blockItemStack); quester.damageBlock(quest, blockItemStack);
} }
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.placeBlock(quest, blockItemStack); q.placeBlock(quest, blockItemStack);
return null; return null;
}); });
@ -145,6 +150,7 @@ public class BlockListener implements Listener {
final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState() final ItemStack blockItemStack = new ItemStack(evt.getBlock().getType(), 1, evt.getBlock().getState()
.getData().toItemStack().getDurability()); .getData().toItemStack().getDurability());
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.PLACE_BLOCK;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (evt.isCancelled() == false) { if (evt.isCancelled() == false) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
@ -152,11 +158,11 @@ public class BlockListener implements Listener {
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("placeBlock")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.placeBlock(quest, blockItemStack); quester.placeBlock(quest, blockItemStack);
} }
quester.dispatchMultiplayerEverything(quest, "placeBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.placeBlock(quest, blockItemStack); q.placeBlock(quest, blockItemStack);
return null; return null;
}); });
@ -185,17 +191,18 @@ public class BlockListener implements Listener {
if (evt.isCancelled() == false) { if (evt.isCancelled() == false) {
final ItemStack blockItemStack = new ItemStack(evt.getClickedBlock().getType(), 1, evt final ItemStack blockItemStack = new ItemStack(evt.getClickedBlock().getType(), 1, evt
.getClickedBlock().getState().getData().toItemStack().getDurability()); .getClickedBlock().getState().getData().toItemStack().getDurability());
final ObjectiveType type = ObjectiveType.USE_BLOCK;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("useBlock")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.useBlock(quest, blockItemStack); quester.useBlock(quest, blockItemStack);
} }
quester.dispatchMultiplayerEverything(quest, "useBlock", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.useBlock(quest, blockItemStack); q.useBlock(quest, blockItemStack);
return null; return null;
}); });

View File

@ -28,6 +28,7 @@ import org.bukkit.inventory.ItemStack;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import me.blackvein.quests.enums.ObjectiveType;
public class ItemListener implements Listener { public class ItemListener implements Listener {
@ -44,17 +45,18 @@ public class ItemListener implements Listener {
if (plugin.canUseQuests(player.getUniqueId())) { if (plugin.canUseQuests(player.getUniqueId())) {
final ItemStack craftedItem = getCraftedItem(evt); final ItemStack craftedItem = getCraftedItem(evt);
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.CRAFT_ITEM;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("craftItem")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.craftItem(quest, craftedItem); quester.craftItem(quest, craftedItem);
} }
quester.dispatchMultiplayerEverything(quest, "craftItem", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.craftItem(quest, craftedItem); q.craftItem(quest, craftedItem);
return null; return null;
}); });
@ -88,17 +90,18 @@ public class ItemListener implements Listener {
|| evt.getInventory().getType().name().equals("SMOKER")) { || evt.getInventory().getType().name().equals("SMOKER")) {
if (evt.getSlotType() == SlotType.RESULT) { if (evt.getSlotType() == SlotType.RESULT) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.SMELT_ITEM;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("smeltItem")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.smeltItem(quest, evt.getCurrentItem()); quester.smeltItem(quest, evt.getCurrentItem());
} }
quester.dispatchMultiplayerEverything(quest, "smeltItem", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.smeltItem(quest, evt.getCurrentItem()); q.smeltItem(quest, evt.getCurrentItem());
return null; return null;
}); });
@ -107,17 +110,18 @@ public class ItemListener implements Listener {
} else if (evt.getInventory().getType() == InventoryType.BREWING) { } else if (evt.getInventory().getType() == InventoryType.BREWING) {
if (evt.getSlotType() == SlotType.CRAFTING) { if (evt.getSlotType() == SlotType.CRAFTING) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.BREW_ITEM;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("brewItem")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.brewItem(quest, evt.getCurrentItem()); quester.brewItem(quest, evt.getCurrentItem());
} }
quester.dispatchMultiplayerEverything(quest, "brewItem", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.brewItem(quest, evt.getCurrentItem()); q.brewItem(quest, evt.getCurrentItem());
return null; return null;
}); });
@ -138,17 +142,18 @@ public class ItemListener implements Listener {
// Ignore // Ignore
} }
final Quester quester = plugin.getQuester(evt.getEnchanter().getUniqueId()); final Quester quester = plugin.getQuester(evt.getEnchanter().getUniqueId());
final ObjectiveType type = ObjectiveType.ENCHANT_ITEM;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("enchantItem")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.enchantItem(quest, enchantedItem); quester.enchantItem(quest, enchantedItem);
} }
quester.dispatchMultiplayerEverything(quest, "enchantItem", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
quester.enchantItem(quest, enchantedItem); quester.enchantItem(quest, enchantedItem);
return null; return null;
}); });
@ -163,17 +168,18 @@ public class ItemListener implements Listener {
final ItemStack consumedItem = evt.getItem().clone(); final ItemStack consumedItem = evt.getItem().clone();
consumedItem.setAmount(1); consumedItem.setAmount(1);
final Quester quester = plugin.getQuester(evt.getPlayer().getUniqueId()); final Quester quester = plugin.getQuester(evt.getPlayer().getUniqueId());
final ObjectiveType type = ObjectiveType.CONSUME_ITEM;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("consumeItem")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.consumeItem(quest, consumedItem); quester.consumeItem(quest, consumedItem);
} }
quester.dispatchMultiplayerEverything(quest, "consumeItem", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
quester.consumeItem(quest, consumedItem); quester.consumeItem(quest, consumedItem);
return null; return null;
}); });

View File

@ -34,6 +34,7 @@ import org.bukkit.inventory.meta.EnchantmentStorageMeta;
import me.blackvein.quests.Quest; import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.RomanNumeral; import me.blackvein.quests.util.RomanNumeral;
@ -68,7 +69,8 @@ public class NpcListener implements Listener {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
boolean delivery = false; boolean delivery = false;
for (final Quest quest : quester.getCurrentQuests().keySet()) { for (final Quest quest : quester.getCurrentQuests().keySet()) {
if (quester.getCurrentStage(quest).containsObjective("deliverItem") && player.getItemInHand() != null) { if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.DELIVER_ITEM)
&& player.getItemInHand() != null) {
final ItemStack hand = player.getItemInHand(); final ItemStack hand = player.getItemInHand();
int currentIndex = -1; int currentIndex = -1;
final LinkedList<Integer> matches = new LinkedList<Integer>(); final LinkedList<Integer> matches = new LinkedList<Integer>();
@ -191,7 +193,7 @@ public class NpcListener implements Listener {
if (plugin.getQuestNpcs().contains(evt.getNPC()) && delivery == false) { if (plugin.getQuestNpcs().contains(evt.getNPC()) && delivery == false) {
boolean hasObjective = false; boolean hasObjective = false;
for (final Quest quest : quester.getCurrentQuests().keySet()) { for (final Quest quest : quester.getCurrentQuests().keySet()) {
if (quester.getCurrentStage(quest).containsObjective("talkToNPC")) { if (quester.getCurrentStage(quest).containsObjective(ObjectiveType.TALK_TO_NPC)) {
if (quester.getQuestData(quest) != null if (quester.getQuestData(quest) != null
&& quester.getQuestData(quest).citizensInteracted.containsKey(evt.getNPC().getId()) && quester.getQuestData(quest).citizensInteracted.containsKey(evt.getNPC().getId())
&& quester.getQuestData(quest).citizensInteracted.get(evt.getNPC().getId()) == false) { && quester.getQuestData(quest).citizensInteracted.get(evt.getNPC().getId()) == false) {
@ -255,74 +257,6 @@ public class NpcListener implements Listener {
} else if (npcQuests.isEmpty()) { } else if (npcQuests.isEmpty()) {
evt.getClicker().sendMessage(ChatColor.YELLOW + Lang.get(player, "noMoreQuest")); evt.getClicker().sendMessage(ChatColor.YELLOW + Lang.get(player, "noMoreQuest"));
} }
/*if (!quester.getCompletedQuests().contains(q.getName())) {
if (quester.getCurrentQuests().size() < plugin.getSettings().getMaxQuests()
|| plugin.getSettings().getMaxQuests() < 1) {
quester.setQuestToTake(q.getName());
if (!plugin.getSettings().canAskConfirmation()) {
quester.takeQuest(q, false);
} else {
if (q.getGUIDisplay() != null) {
quester.showGUIDisplay(evt.getNPC(), npcQuests);
} else {
for (String msg : extracted(quester).split("<br>")) {
player.sendMessage(msg);
}
plugin.getConversationFactory().buildConversation((Conversable) player).begin();
}
}
} else if (quester.getCurrentQuests().containsKey(q) == false) {
String msg = Lang.get(player, "questMaxAllowed");
msg = msg.replace("<number>", String.valueOf(plugin.getSettings().getMaxQuests()));
player.sendMessage(ChatColor.YELLOW + msg);
}
} else if (quester.getCurrentQuests().size() < plugin.getSettings().getMaxQuests()
|| plugin.getSettings().getMaxQuests() < 1) {
if (quester.getCooldownDifference(q) > 0) {
String early = Lang.get(player, "questTooEarly");
early = early.replace("<quest>", ChatColor.AQUA + q.getName() + ChatColor.YELLOW);
early = early.replace("<time>", ChatColor.DARK_PURPLE
+ MiscUtil.getTime(quester.getCooldownDifference(q)) + ChatColor.YELLOW);
player.sendMessage(ChatColor.YELLOW + early);
} else if (q.getPlanner().getCooldown() < 0) {
String completed = Lang.get(player, "questAlreadyCompleted");
completed = completed.replace("<quest>", ChatColor.AQUA + q.getName()
+ ChatColor.YELLOW);
player.sendMessage(ChatColor.YELLOW + completed);
} else {
quester.setQuestToTake(q.getName());
if (!plugin.getSettings().canAskConfirmation()) {
quester.takeQuest(q, false);
} else {
if (q.getGUIDisplay() != null) {
quester.showGUIDisplay(evt.getNPC(), npcQuests);
} else {
for (String msg : extracted(quester).split("<br>")) {
player.sendMessage(msg);
}
plugin.getConversationFactory().buildConversation((Conversable) player).begin();
}
}
}
} else if (quester.getCurrentQuests().containsKey(q) == false) {
String msg = Lang.get(player, "questMaxAllowed");
msg = msg.replace("<number>", String.valueOf(plugin.getSettings().getMaxQuests()));
player.sendMessage(ChatColor.YELLOW + msg);
}
} else if (npcQuests.isEmpty() == false && npcQuests.size() > 1) {
if (hasAtLeastOneGUI) {
quester.showGUIDisplay(evt.getNPC(), npcQuests);
} else {
Conversation c = plugin.getNpcConversationFactory().buildConversation(player);
c.getContext().setSessionData("npcQuests", npcQuests);
c.getContext().setSessionData("npc", evt.getNPC().getName());
c.begin();
}
return;
} else if (npcQuests.isEmpty()) {
evt.getClicker().sendMessage(ChatColor.YELLOW + Lang.get(player, "noMoreQuest"));
}*/
} }
} }
} }
@ -355,6 +289,7 @@ public class NpcListener implements Listener {
= (EntityDamageByEntityEvent) evt.getNPC().getEntity().getLastDamageCause(); = (EntityDamageByEntityEvent) evt.getNPC().getEntity().getLastDamageCause();
final Entity damager = damageEvent.getDamager(); final Entity damager = damageEvent.getDamager();
if (damager != null) { if (damager != null) {
final ObjectiveType type = ObjectiveType.KILL_NPC;
if (damager instanceof Projectile) { if (damager instanceof Projectile) {
if (evt.getNPC().getEntity().getLastDamageCause().getEntity() instanceof Player) { if (evt.getNPC().getEntity().getLastDamageCause().getEntity() instanceof Player) {
final Player player = (Player) evt.getNPC().getEntity().getLastDamageCause().getEntity(); final Player player = (Player) evt.getNPC().getEntity().getLastDamageCause().getEntity();
@ -367,7 +302,7 @@ public class NpcListener implements Listener {
if (okay) { if (okay) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
for (final Quest quest : quester.getCurrentQuests().keySet()) { for (final Quest quest : quester.getCurrentQuests().keySet()) {
if (quester.getCurrentStage(quest).containsObjective("killNPC")) { if (quester.getCurrentStage(quest).containsObjective(type)) {
quester.killNPC(quest, evt.getNPC()); quester.killNPC(quest, evt.getNPC());
} }
} }
@ -384,7 +319,7 @@ public class NpcListener implements Listener {
final Player player = (Player) damager; final Player player = (Player) damager;
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
for (final Quest quest : quester.getCurrentQuests().keySet()) { for (final Quest quest : quester.getCurrentQuests().keySet()) {
if (quester.getCurrentStage(quest).containsObjective("killNPC")) { if (quester.getCurrentStage(quest).containsObjective(type)) {
quester.killNPC(quest, evt.getNPC()); quester.killNPC(quest, evt.getNPC());
} }
} }

View File

@ -65,6 +65,7 @@ import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester; import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests; import me.blackvein.quests.Quests;
import me.blackvein.quests.Stage; import me.blackvein.quests.Stage;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.util.ItemUtil; import me.blackvein.quests.util.ItemUtil;
import me.blackvein.quests.util.Lang; import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil; import me.blackvein.quests.util.MiscUtil;
@ -392,17 +393,18 @@ public class PlayerListener implements Listener {
final Player player = evt.getPlayer(); final Player player = evt.getPlayer();
if (plugin.canUseQuests(player.getUniqueId())) { if (plugin.canUseQuests(player.getUniqueId())) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.MILK_COW;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("milkCow")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.milkCow(quest); quester.milkCow(quest);
} }
quester.dispatchMultiplayerEverything(quest, "milkCow", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.milkCow(quest); q.milkCow(quest);
return null; return null;
}); });
@ -445,15 +447,16 @@ public class PlayerListener implements Listener {
} }
} }
} }
if (quester.getCurrentStage(quest).containsObjective("password")) { final ObjectiveType type = ObjectiveType.PASSWORD;
if (quester.getCurrentStage(quest).containsObjective(type)) {
quester.sayPassword(quest, evt); quester.sayPassword(quest, evt);
} }
quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.sayPassword(quest, evt);
return null;
});
} }
quester.dispatchMultiplayerEverything(quest, "password", (final Quester q) -> {
q.sayPassword(quest, evt);
return null;
});
} }
} }
} }
@ -505,17 +508,18 @@ public class PlayerListener implements Listener {
if (plugin.canUseQuests(player.getUniqueId())) { if (plugin.canUseQuests(player.getUniqueId())) {
final Sheep sheep = (Sheep) evt.getEntity(); final Sheep sheep = (Sheep) evt.getEntity();
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.SHEAR_SHEEP;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("shearSheep")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.shearSheep(quest, sheep.getColor()); quester.shearSheep(quest, sheep.getColor());
} }
quester.dispatchMultiplayerEverything(quest, "shearSheep", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.shearSheep(quest, sheep.getColor()); q.shearSheep(quest, sheep.getColor());
return null; return null;
}); });
@ -530,17 +534,18 @@ public class PlayerListener implements Listener {
final Player player = (Player) evt.getOwner(); final Player player = (Player) evt.getOwner();
if (plugin.canUseQuests(player.getUniqueId())) { if (plugin.canUseQuests(player.getUniqueId())) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.TAME_MOB;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("tameMob")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.tameMob(quest, evt.getEntityType()); quester.tameMob(quest, evt.getEntityType());
} }
quester.dispatchMultiplayerEverything(quest, "tameMob", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.tameMob(quest, evt.getEntityType()); q.tameMob(quest, evt.getEntityType());
return null; return null;
}); });
@ -596,33 +601,35 @@ public class PlayerListener implements Listener {
if (damager instanceof Player) { if (damager instanceof Player) {
final Quester quester = plugin.getQuester(damager.getUniqueId()); final Quester quester = plugin.getQuester(damager.getUniqueId());
if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().isNPC(target)) { if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().isNPC(target)) {
final ObjectiveType type = ObjectiveType.KILL_NPC;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("killNPC")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target)); quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
} }
quester.dispatchMultiplayerEverything(quest, "killNPC", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target)); q.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
return null; return null;
}); });
} }
} else { } else {
final ObjectiveType type = ObjectiveType.KILL_MOB;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("killMob")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.killMob(quest, target.getLocation(), target.getType()); quester.killMob(quest, target.getLocation(), target.getType());
} }
quester.dispatchMultiplayerEverything(quest, "killMob", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.killMob(quest, target.getLocation(), target.getType()); q.killMob(quest, target.getLocation(), target.getType());
return null; return null;
}); });
@ -713,17 +720,18 @@ public class PlayerListener implements Listener {
} }
} }
final Quester quester = plugin.getQuester(damager.getUniqueId()); final Quester quester = plugin.getQuester(damager.getUniqueId());
final ObjectiveType type = ObjectiveType.KILL_PLAYER;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("killPlayer")) { && quester.getCurrentStage(quest).containsObjective(type)) {
quester.killPlayer(quest, (Player)target); quester.killPlayer(quest, (Player)target);
} }
quester.dispatchMultiplayerEverything(quest, "killPlayer", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.killPlayer(quest, (Player)target); q.killPlayer(quest, (Player)target);
return null; return null;
}); });
@ -736,18 +744,19 @@ public class PlayerListener implements Listener {
final Player player = evt.getPlayer(); final Player player = evt.getPlayer();
if (plugin.canUseQuests(player.getUniqueId())) { if (plugin.canUseQuests(player.getUniqueId())) {
final Quester quester = plugin.getQuester(player.getUniqueId()); final Quester quester = plugin.getQuester(player.getUniqueId());
final ObjectiveType type = ObjectiveType.CATCH_FISH;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, true)) { if (!quester.meetsCondition(quest, true)) {
return; return;
} }
if (quester.getCurrentQuests().containsKey(quest) if (quester.getCurrentQuests().containsKey(quest)
&& quester.getCurrentStage(quest).containsObjective("catchFish") && quester.getCurrentStage(quest).containsObjective(type)
&& evt.getState().equals(State.CAUGHT_FISH)) { && evt.getState().equals(State.CAUGHT_FISH)) {
quester.catchFish(quest); quester.catchFish(quest);
} }
quester.dispatchMultiplayerEverything(quest, "catchFish", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
q.catchFish(quest); q.catchFish(quest);
return null; return null;
}); });
@ -906,6 +915,7 @@ public class PlayerListener implements Listener {
final Quester quester = plugin.getQuester(uuid); final Quester quester = plugin.getQuester(uuid);
if (quester != null) { if (quester != null) {
if (plugin.canUseQuests(uuid)) { if (plugin.canUseQuests(uuid)) {
final ObjectiveType type = ObjectiveType.REACH_LOCATION;
for (final Quest quest : plugin.getQuests()) { for (final Quest quest : plugin.getQuests()) {
if (!quester.meetsCondition(quest, false)) { if (!quester.meetsCondition(quest, false)) {
return; return;
@ -913,7 +923,7 @@ public class PlayerListener implements Listener {
if (quester.getCurrentQuests().containsKey(quest)) { if (quester.getCurrentQuests().containsKey(quest)) {
if (quester.getCurrentStage(quest) != null if (quester.getCurrentStage(quest) != null
&& quester.getCurrentStage(quest).containsObjective("reachLocation")) { && quester.getCurrentStage(quest).containsObjective(type)) {
plugin.getServer().getScheduler().runTask(plugin, new Runnable() { plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
@ -923,7 +933,7 @@ public class PlayerListener implements Listener {
} }
} }
quester.dispatchMultiplayerEverything(quest, "reachLocation", (final Quester q) -> { quester.dispatchMultiplayerEverything(quest, type, (final Quester q) -> {
plugin.getServer().getScheduler().runTask(plugin, new Runnable() { plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {