mirror of
https://github.com/PikaMug/Quests.git
synced 2024-09-27 22:47:27 +02:00
Return set of progress-applied quest IDs for all types, per #1570
This commit is contained in:
parent
93792cce23
commit
e77a3ccefe
@ -4015,7 +4015,8 @@ public class Quester implements Comparable<Quester> {
|
||||
* @param fun The function to execute, the event call
|
||||
*/
|
||||
@Deprecated
|
||||
public void dispatchMultiplayerEverything(final Quest quest, final String objectiveType, final BiFunction<Quester, Quest, Void> fun) {
|
||||
public void dispatchMultiplayerEverything(final Quest quest, final String objectiveType,
|
||||
final BiFunction<Quester, Quest, Void> fun) {
|
||||
dispatchMultiplayerEverything(quest, ObjectiveType.fromName(objectiveType), fun);
|
||||
}
|
||||
|
||||
@ -4025,7 +4026,8 @@ public class Quester implements Comparable<Quester> {
|
||||
* @param type The type of objective to progress
|
||||
* @param fun The function to execute, the event call
|
||||
*/
|
||||
public Set<String> dispatchMultiplayerEverything(final Quest quest, final ObjectiveType type, final BiFunction<Quester, Quest, Void> fun) {
|
||||
public Set<String> dispatchMultiplayerEverything(final Quest quest, final ObjectiveType type,
|
||||
final BiFunction<Quester, Quest, Void> fun) {
|
||||
final Set<String> appliedQuestIDs = new HashSet<String>();
|
||||
if (quest != null) {
|
||||
try {
|
||||
@ -4070,18 +4072,17 @@ public class Quester implements Comparable<Quester> {
|
||||
* @param currentStage The current stage of the quest
|
||||
* @param fun The function to execute, the event call
|
||||
*/
|
||||
public void dispatchMultiplayerObjectives(final Quest quest, final Stage currentStage, final Function<Quester, Void> fun) {
|
||||
if (quest == null) {
|
||||
return;
|
||||
}
|
||||
public Set<String> dispatchMultiplayerObjectives(final Quest quest, final Stage currentStage,
|
||||
final Function<Quester, Void> fun) {
|
||||
final Set<String> appliedQuestIDs = new HashSet<String>();
|
||||
if (quest.getOptions().getShareProgressLevel() == 2) {
|
||||
final List<Quester> mq = getMultiplayerQuesters(quest);
|
||||
if (mq == null) {
|
||||
return;
|
||||
return appliedQuestIDs;
|
||||
}
|
||||
for (final Quester q : mq) {
|
||||
if (q == null) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
// Share only same quest is not necessary here
|
||||
// The function must be applied to the same quest
|
||||
@ -4090,6 +4091,7 @@ public class Quester implements Comparable<Quester> {
|
||||
}
|
||||
}
|
||||
}
|
||||
return appliedQuestIDs;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -60,7 +60,9 @@ public class BlockListener implements Listener {
|
||||
final ObjectiveType breakType = ObjectiveType.BREAK_BLOCK;
|
||||
final ObjectiveType placeType = ObjectiveType.PLACE_BLOCK;
|
||||
final ObjectiveType cutType = ObjectiveType.CUT_BLOCK;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
final Set<String> dispatchedBreakQuestIDs = new HashSet<String>();
|
||||
final Set<String> dispatchedPlaceQuestIDs = new HashSet<String>();
|
||||
final Set<String> dispatchedCutQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (evt.isCancelled() == false) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
@ -76,9 +78,9 @@ public class BlockListener implements Listener {
|
||||
quester.breakBlock(quest, blockItemStack);
|
||||
|
||||
// Multiplayer
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, breakType,
|
||||
dispatchedBreakQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, breakType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
if (!dispatchedBreakQuestIDs.contains(cq.getId())) {
|
||||
q.breakBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
@ -114,46 +116,52 @@ public class BlockListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
quester.dispatchMultiplayerEverything(quest, placeType, (final Quester q, final Quest cq) -> {
|
||||
for (final ItemStack is : q.getQuestData(cq).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
ItemStack toPlace = new ItemStack(is.getType(), 64);
|
||||
for (final ItemStack stack : quester.getCurrentStage(cq).getBlocksToPlace()) {
|
||||
if (ItemUtil.compareItems(is, stack, true) == 0) {
|
||||
toPlace = stack;
|
||||
dispatchedPlaceQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, placeType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedPlaceQuestIDs.contains(cq.getId())) {
|
||||
for (final ItemStack is : q.getQuestData(cq).blocksPlaced) {
|
||||
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
|
||||
ItemStack toPlace = new ItemStack(is.getType(), 64);
|
||||
for (final ItemStack stack : quester.getCurrentStage(cq).getBlocksToPlace()) {
|
||||
if (ItemUtil.compareItems(is, stack, true) == 0) {
|
||||
toPlace = stack;
|
||||
}
|
||||
}
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, is.getAmount(), toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int index = q.getQuestData(cq).blocksPlaced.indexOf(is);
|
||||
final int newAmount = is.getAmount() - 1;
|
||||
is.setAmount(newAmount);
|
||||
q.getQuestData(cq).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
}
|
||||
|
||||
final QuesterPreUpdateObjectiveEvent preEvent
|
||||
= new QuesterPreUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, is.getAmount(), toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(preEvent);
|
||||
|
||||
final int index = q.getQuestData(cq).blocksPlaced.indexOf(is);
|
||||
final int newAmount = is.getAmount() - 1;
|
||||
is.setAmount(newAmount);
|
||||
q.getQuestData(cq).blocksPlaced.set(index, is);
|
||||
|
||||
final QuesterPostUpdateObjectiveEvent postEvent
|
||||
= new QuesterPostUpdateObjectiveEvent(q, cq,
|
||||
new Objective(placeType, newAmount, toPlace.getAmount()));
|
||||
plugin.getServer().getPluginManager().callEvent(postEvent);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
if (quester.getCurrentQuests().containsKey(quest)
|
||||
&& quester.getCurrentStage(quest).containsObjective(cutType)) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
quester.cutBlock(quest, blockItemStack);
|
||||
}
|
||||
}
|
||||
quester.dispatchMultiplayerEverything(quest, cutType, (final Quester q, final Quest cq) -> {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
q.cutBlock(cq, blockItemStack);
|
||||
dispatchedCutQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, cutType,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedCutQuestIDs.contains(cq.getId())) {
|
||||
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
|
||||
q.cutBlock(cq, blockItemStack);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -168,6 +176,7 @@ public class BlockListener implements Listener {
|
||||
.getData().toItemStack().getDurability());
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.DAMAGE_BLOCK;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -178,10 +187,13 @@ public class BlockListener implements Listener {
|
||||
quester.damageBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.placeBlock(cq, blockItemStack);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.placeBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -195,6 +207,7 @@ public class BlockListener implements Listener {
|
||||
.getData().toItemStack().getDurability());
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.PLACE_BLOCK;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (evt.isCancelled() == false) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
@ -206,10 +219,13 @@ public class BlockListener implements Listener {
|
||||
quester.placeBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.placeBlock(cq, blockItemStack);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.placeBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -236,6 +252,7 @@ public class BlockListener implements Listener {
|
||||
final ItemStack blockItemStack = new ItemStack(evt.getClickedBlock().getType(), 1, evt
|
||||
.getClickedBlock().getState().getData().toItemStack().getDurability());
|
||||
final ObjectiveType type = ObjectiveType.USE_BLOCK;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -246,10 +263,13 @@ public class BlockListener implements Listener {
|
||||
quester.useBlock(quest, blockItemStack);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.useBlock(cq, blockItemStack);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.useBlock(cq, blockItemStack);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,9 @@
|
||||
|
||||
package me.blackvein.quests.listeners;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -46,6 +49,7 @@ public class ItemListener implements Listener {
|
||||
final ItemStack craftedItem = getCraftedItem(evt);
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CRAFT_ITEM;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -56,10 +60,12 @@ public class ItemListener implements Listener {
|
||||
quester.craftItem(quest, craftedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.craftItem(cq, craftedItem);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.craftItem(cq, craftedItem);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -91,6 +97,7 @@ public class ItemListener implements Listener {
|
||||
if (evt.getSlotType() == SlotType.RESULT) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.SMELT_ITEM;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -101,16 +108,19 @@ public class ItemListener implements Listener {
|
||||
quester.smeltItem(quest, evt.getCurrentItem());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.smeltItem(cq, evt.getCurrentItem());
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.smeltItem(cq, evt.getCurrentItem());
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
} else if (evt.getInventory().getType() == InventoryType.BREWING) {
|
||||
if (evt.getSlotType() == SlotType.CRAFTING) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.BREW_ITEM;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -121,10 +131,12 @@ public class ItemListener implements Listener {
|
||||
quester.brewItem(quest, evt.getCurrentItem());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.brewItem(cq, evt.getCurrentItem());
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.brewItem(cq, evt.getCurrentItem());
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -143,6 +155,7 @@ public class ItemListener implements Listener {
|
||||
}
|
||||
final Quester quester = plugin.getQuester(evt.getEnchanter().getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.ENCHANT_ITEM;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -153,10 +166,12 @@ public class ItemListener implements Listener {
|
||||
quester.enchantItem(quest, enchantedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.enchantItem(cq, enchantedItem);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.enchantItem(cq, enchantedItem);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -169,6 +184,7 @@ public class ItemListener implements Listener {
|
||||
consumedItem.setAmount(1);
|
||||
final Quester quester = plugin.getQuester(evt.getPlayer().getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CONSUME_ITEM;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -179,10 +195,12 @@ public class ItemListener implements Listener {
|
||||
quester.consumeItem(quest, consumedItem);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.consumeItem(cq, consumedItem);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.consumeItem(cq, consumedItem);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
package me.blackvein.quests.listeners;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@ -394,6 +395,7 @@ public class PlayerListener implements Listener {
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.MILK_COW;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -404,10 +406,13 @@ public class PlayerListener implements Listener {
|
||||
quester.milkCow(quest);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.milkCow(cq);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.milkCow(cq);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -448,14 +453,18 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
final ObjectiveType type = ObjectiveType.PASSWORD;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
if (quester.getCurrentStage(quest).containsObjective(type)) {
|
||||
quester.sayPassword(quest, evt);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.sayPassword(cq, evt);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.sayPassword(cq, evt);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -509,6 +518,7 @@ public class PlayerListener implements Listener {
|
||||
final Sheep sheep = (Sheep) evt.getEntity();
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.SHEAR_SHEEP;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -519,10 +529,13 @@ public class PlayerListener implements Listener {
|
||||
quester.shearSheep(quest, sheep.getColor());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.shearSheep(cq, sheep.getColor());
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.shearSheep(cq, sheep.getColor());
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -535,6 +548,7 @@ public class PlayerListener implements Listener {
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.TAME_MOB;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -545,10 +559,13 @@ public class PlayerListener implements Listener {
|
||||
quester.tameMob(quest, evt.getEntityType());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.tameMob(cq, evt.getEntityType());
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.tameMob(cq, evt.getEntityType());
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -602,6 +619,7 @@ public class PlayerListener implements Listener {
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
if (plugin.getDependencies().getCitizens() != null && CitizensAPI.getNPCRegistry().isNPC(target)) {
|
||||
final ObjectiveType type = ObjectiveType.KILL_NPC;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -612,13 +630,17 @@ public class PlayerListener implements Listener {
|
||||
quester.killNPC(quest, CitizensAPI.getNPCRegistry().getNPC(target));
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.killNPC(cq, CitizensAPI.getNPCRegistry().getNPC(target));
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.killNPC(cq, CitizensAPI.getNPCRegistry().getNPC(target));
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
} else {
|
||||
final ObjectiveType type = ObjectiveType.KILL_MOB;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -629,10 +651,13 @@ public class PlayerListener implements Listener {
|
||||
quester.killMob(quest, target.getLocation(), target.getType());
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.killMob(cq, target.getLocation(), target.getType());
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.killMob(cq, target.getLocation(), target.getType());
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -721,6 +746,7 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
final Quester quester = plugin.getQuester(damager.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.KILL_PLAYER;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -731,10 +757,13 @@ public class PlayerListener implements Listener {
|
||||
quester.killPlayer(quest, (Player)target);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.killPlayer(cq, (Player)target);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.killPlayer(cq, (Player)target);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -745,6 +774,7 @@ public class PlayerListener implements Listener {
|
||||
if (plugin.canUseQuests(player.getUniqueId())) {
|
||||
final Quester quester = plugin.getQuester(player.getUniqueId());
|
||||
final ObjectiveType type = ObjectiveType.CATCH_FISH;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, true)) {
|
||||
continue;
|
||||
@ -756,10 +786,13 @@ public class PlayerListener implements Listener {
|
||||
quester.catchFish(quest);
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
q.catchFish(cq);
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
q.catchFish(cq);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -914,6 +947,7 @@ public class PlayerListener implements Listener {
|
||||
if (quester != null) {
|
||||
if (plugin.canUseQuests(uuid)) {
|
||||
final ObjectiveType type = ObjectiveType.REACH_LOCATION;
|
||||
final Set<String> dispatchedQuestIDs = new HashSet<String>();
|
||||
for (final Quest quest : plugin.getQuests()) {
|
||||
if (!quester.meetsCondition(quest, false)) {
|
||||
continue;
|
||||
@ -931,15 +965,18 @@ public class PlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
|
||||
quester.dispatchMultiplayerEverything(quest, type, (final Quester q, final Quest cq) -> {
|
||||
plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
q.reachLocation(cq, location);
|
||||
}
|
||||
});
|
||||
dispatchedQuestIDs.addAll(quester.dispatchMultiplayerEverything(quest, type,
|
||||
(final Quester q, final Quest cq) -> {
|
||||
if (!dispatchedQuestIDs.contains(cq.getId())) {
|
||||
plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
q.reachLocation(cq, location);
|
||||
}
|
||||
});
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user