From 07356c72d53ebb9f63d5e9719fc51f0e053902ca Mon Sep 17 00:00:00 2001 From: AlessioDP Date: Sun, 8 Sep 2019 18:01:26 +0200 Subject: [PATCH] Added multiplayer enabled check --- .../main/java/me/blackvein/quests/Quest.java | 22 ++---- .../java/me/blackvein/quests/Quester.java | 78 +++++++++++++------ 2 files changed, 61 insertions(+), 39 deletions(-) diff --git a/main/src/main/java/me/blackvein/quests/Quest.java b/main/src/main/java/me/blackvein/quests/Quest.java index 9e74895e9..f4763fdfb 100644 --- a/main/src/main/java/me/blackvein/quests/Quest.java +++ b/main/src/main/java/me/blackvein/quests/Quest.java @@ -195,13 +195,9 @@ public class Quest { // Multiplayer try { if (opts.getShareProgressLevel() == 3) { - List mq = q.getMultiplayerQuesters(); - if (mq != null) { - for (Quester qq : mq) { - if (qq.getCurrentQuests().containsKey(this)) { - setStage(qq, qq.currentQuests.get(this) + 1); - } - } + List mq = q.getMultiplayerQuestersByQuest(this); + for (Quester qq : mq) { + setStage(qq, qq.currentQuests.get(this) + 1); } } } catch (InvalidStageException e) { @@ -691,14 +687,10 @@ public class Quest { // Multiplayer if (opts.getShareProgressLevel() == 4) { - List mq = q.getMultiplayerQuesters(); - if (mq != null) { - for (Quester qq : mq) { - if (qq.getCurrentQuests().containsKey(this)) { - completeQuest(qq); - } - } - } + List mq = q.getMultiplayerQuestersByQuest(this); + for (Quester qq : mq) { + completeQuest(qq); + } } } diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java index cd5cfe801..59b35bc3d 100644 --- a/main/src/main/java/me/blackvein/quests/Quester.java +++ b/main/src/main/java/me/blackvein/quests/Quester.java @@ -1981,13 +1981,9 @@ public class Quester { // Multiplayer if (quest.getOptions().getShareProgressLevel() == 2) { - List mq = getMultiplayerQuesters(); - if (mq != null) { - for (Quester q : mq) { - if (q.getCurrentQuests().containsKey(quest)) { - quest.nextStage(q); - } - } + List mq = getMultiplayerQuestersByQuest(quest); + for (Quester q : mq) { + quest.nextStage(q); } } } @@ -3120,49 +3116,83 @@ public class Quester { * @param fun The function to execute, the event call */ public void dispatchMultiplayerEvent(String eventName, BiFunction fun) { - List mq = getMultiplayerQuesters(); - if (mq != null) { - for (Quester q : mq) { - for (Quest quest : q.getCurrentQuests().keySet()) { - if (q.containsObjective(quest, eventName) && quest.getOptions().getShareProgressLevel() == 1) { - fun.apply(q, quest); - } + Map mq = getMultiplayerQuesters(); + for (Entry q : mq.entrySet()) { + for (Quest quest : q.getKey().getCurrentQuests().keySet()) { + if (q.getKey().containsObjective(quest, eventName) + && quest.getOptions().getShareProgressLevel() == 1 + && ((quest.getOptions().getUsePartiesPlugin() && q.getValue().parties) + || (quest.getOptions().getUseDungeonsXLPlugin() && q.getValue().dungeonxl))) { + fun.apply(q.getKey(), quest); } } } } /** - * Get a list of fellow Questers in a party or group + * Get a map of fellow Questers in a party or group * - * @return null if no linked plugins, or party/group is null + * @return empty if no linked plugins, or party/group is null */ - public List getMultiplayerQuesters() { + public Map getMultiplayerQuesters() { + Map ret = new LinkedHashMap<>(); if (plugin.getDependencies().getPartiesApi() != null) { Party party = plugin.getDependencies().getPartiesApi().getParty(plugin.getDependencies().getPartiesApi().getPartyPlayer(getUUID()).getPartyName()); if (party != null) { - List mq = new LinkedList(); for (UUID id : party.getMembers()) { if (!id.equals(getUUID())) { - mq.add(plugin.getQuester(id)); + ret.put(plugin.getQuester(id), new MultiplayerType(true, false)); } } - return mq; } } if (plugin.getDependencies().getDungeonsApi() != null) { DGroup group = DGroup.getByPlayer(getPlayer()); if (group != null) { - List mq = new LinkedList(); for (UUID id : group.getPlayers()) { if (!id.equals(getUUID())) { - mq.add(plugin.getQuester(id)); + Quester q = plugin.getQuester(id); + if (ret.containsKey(plugin.getQuester(id))) + ret.get(q).dungeonxl = true; + else + ret.put(q, new MultiplayerType(false, true)); } } - return mq; } } - return null; + return ret; + } + + /** + * Get a map of fellow Questers in a party or group + * that are doing the given quest + * + * @param quest the quest to check + * @return empty if no linked plugins, or party/group is null + */ + public List getMultiplayerQuestersByQuest(Quest quest) { + List ret = new LinkedList<>(); + Map mq = getMultiplayerQuesters(); + for (Entry q : mq.entrySet()) { + if (q.getKey().getCurrentQuests().containsKey(quest)) { + if ((quest.getOptions().getUsePartiesPlugin() && q.getValue().parties) + || (quest.getOptions().getUseDungeonsXLPlugin() && q.getValue().dungeonxl)) { + ret.add(q.getKey()); + } + } + + } + return ret; + } + + public class MultiplayerType { + public boolean parties; + public boolean dungeonxl; + + public MultiplayerType(boolean parties, boolean dungeonxl) { + this.parties = parties; + this.dungeonxl = dungeonxl; + } } /**