diff --git a/main/pom.xml b/main/pom.xml
index 32bfdf5b1..a63778ba8 100644
--- a/main/pom.xml
+++ b/main/pom.xml
@@ -122,14 +122,12 @@
3.1.6
provided
-
com.github.PikaMug
LocaleLib
diff --git a/main/src/main/java/me/blackvein/quests/Dependencies.java b/main/src/main/java/me/blackvein/quests/Dependencies.java
index 84a49322b..28cca64d6 100644
--- a/main/src/main/java/me/blackvein/quests/Dependencies.java
+++ b/main/src/main/java/me/blackvein/quests/Dependencies.java
@@ -26,6 +26,7 @@ import me.blackvein.quests.reflect.denizen.DenizenAPI;
import me.blackvein.quests.reflect.worldguard.WorldGuardAPI;
import me.blackvein.quests.util.Lang;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
+import me.pikamug.unite.api.objects.PartyProvider;
import net.citizensnpcs.api.CitizensPlugin;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
@@ -37,15 +38,15 @@ import org.bukkit.plugin.RegisteredServiceProvider;
import ro.nicuch.citizensbooks.CitizensBooksAPI;
import ro.nicuch.citizensbooks.CitizensBooksPlugin;
+import java.util.Objects;
import java.util.UUID;
-//import de.erethon.dungeonsxl.DungeonsXL;
-
public class Dependencies {
private final Quests plugin;
private static Economy economy = null;
private static Permission permission = null;
+ private static PartyProvider partyProvider = null;
private static WorldGuardAPI worldGuardApi = null;
private static mcMMO mcmmo = null;
private static Heroes heroes = null;
@@ -54,7 +55,6 @@ public class Dependencies {
private static CitizensPlugin citizens = null;
private static DenizenAPI denizenApi = null;
private static CitizensBooksAPI citizensBooks = null;
- //private static DungeonsXL dungeons = null;
private static PartiesAPI parties = null;
public Dependencies(final Quests plugin) {
@@ -64,7 +64,7 @@ public class Dependencies {
public Economy getVaultEconomy() {
if (economy == null && isPluginAvailable("Vault")) {
if (!setupEconomy()) {
- plugin.getLogger().warning("Economy not found.");
+ plugin.getLogger().warning("Economy provider not found.");
}
}
return economy;
@@ -73,11 +73,20 @@ public class Dependencies {
public Permission getVaultPermission() {
if (permission == null && isPluginAvailable("Vault")) {
if (!setupPermissions()) {
- plugin.getLogger().warning("Permissions not found.");
+ plugin.getLogger().warning("Permission provider not found.");
}
}
return permission;
}
+
+ public PartyProvider getPartyProvider() {
+ if (partyProvider == null && isPluginAvailable("Unite")) {
+ if (!setupParty()) {
+ plugin.getLogger().warning("Party provider not found.");
+ }
+ }
+ return partyProvider;
+ }
public WorldGuardAPI getWorldGuardApi() {
if (worldGuardApi == null && isPluginAvailable("WorldGuard")) {
@@ -171,22 +180,15 @@ public class Dependencies {
public CitizensBooksAPI getCitizensBooksApi() {
if (citizensBooks == null && isPluginAvailable("CitizensBooks")) {
try {
- citizensBooks = ((CitizensBooksPlugin) plugin.getServer().getPluginManager().getPlugin("CitizensBooks"))
- .getAPI();
+ citizensBooks = ((CitizensBooksPlugin) Objects.requireNonNull(plugin.getServer().getPluginManager()
+ .getPlugin("CitizensBooks"))).getAPI();
} catch (final Exception e) {
e.printStackTrace();
}
}
return citizensBooks;
}
-
- /*public DungeonsXL getDungeonsApi() {
- if (dungeons == null && isPluginAvailable("DungeonsXL")) {
- dungeons = DungeonsXL.getInstance();
- }
- return dungeons;
- }*/
-
+
public PartiesAPI getPartiesApi() {
if (parties == null && isPluginAvailable("Parties")) {
try {
@@ -202,7 +204,7 @@ public class Dependencies {
public boolean isPluginAvailable(final String pluginName) {
if (plugin.getServer().getPluginManager().getPlugin(pluginName) != null ) {
try {
- if (!plugin.getServer().getPluginManager().getPlugin(pluginName).isEnabled()) {
+ if (!Objects.requireNonNull(plugin.getServer().getPluginManager().getPlugin(pluginName)).isEnabled()) {
plugin.getLogger().warning(pluginName
+ " was detected, but is not enabled! Fix "+ pluginName + " to allow linkage.");
} else {
@@ -225,18 +227,18 @@ public class Dependencies {
getPhatLoots();
getPlaceholderApi();
getCitizensBooksApi();
- //getDungeonsApi();
getPartiesApi();
+ getPartyProvider();
getVaultEconomy();
getVaultPermission();
}
private boolean setupEconomy() {
try {
- final RegisteredServiceProvider economyProvider = plugin.getServer().getServicesManager()
- .getRegistration(net.milkbowl.vault.economy.Economy.class);
- if (economyProvider != null) {
- economy = economyProvider.getProvider();
+ final RegisteredServiceProvider rsp = plugin.getServer().getServicesManager()
+ .getRegistration(Economy.class);
+ if (rsp != null) {
+ economy = rsp.getProvider();
}
return (economy != null);
} catch (final Exception e) {
@@ -245,14 +247,23 @@ public class Dependencies {
}
private boolean setupPermissions() {
- final RegisteredServiceProvider permissionProvider = plugin.getServer().getServicesManager()
- .getRegistration(net.milkbowl.vault.permission.Permission.class);
- if (permissionProvider != null) {
- permission = permissionProvider.getProvider();
+ final RegisteredServiceProvider rsp = plugin.getServer().getServicesManager()
+ .getRegistration(Permission.class);
+ if (rsp != null) {
+ permission = rsp.getProvider();
}
return (permission != null);
}
+ private boolean setupParty() {
+ final RegisteredServiceProvider rsp = plugin.getServer().getServicesManager()
+ .getRegistration(PartyProvider.class);
+ if (rsp != null) {
+ partyProvider = rsp.getProvider();
+ }
+ return (partyProvider != null);
+ }
+
/**
* @deprecated Do not use. Will be removed in a future version.
**/
diff --git a/main/src/main/java/me/blackvein/quests/Quester.java b/main/src/main/java/me/blackvein/quests/Quester.java
index ff4683a95..719bb0f22 100644
--- a/main/src/main/java/me/blackvein/quests/Quester.java
+++ b/main/src/main/java/me/blackvein/quests/Quester.java
@@ -16,7 +16,6 @@ import com.alessiodp.parties.api.interfaces.Party;
import com.alessiodp.parties.api.interfaces.PartyPlayer;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.player.UserManager;
-//import de.erethon.dungeonsxl.player.DGroup;
import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.events.quest.QuestTakeEvent;
@@ -35,6 +34,7 @@ import me.blackvein.quests.util.Lang;
import me.blackvein.quests.util.MiscUtil;
import me.blackvein.quests.util.RomanNumeral;
import me.clip.placeholderapi.PlaceholderAPI;
+import me.pikamug.unite.api.objects.PartyProvider;
import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import org.bukkit.Bukkit;
@@ -76,6 +76,8 @@ import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collectors;
+//import de.erethon.dungeonsxl.player.DGroup;
+
public class Quester implements Comparable {
private final Quests plugin;
@@ -4089,13 +4091,46 @@ public class Quester implements Comparable {
return null;
}
final List mq = new LinkedList();
- if (plugin.getDependencies().getPartiesApi() != null) {
+ if (plugin.getDependencies().getPartyProvider() != null) {
+ final PartyProvider partyProvider = plugin.getDependencies().getPartyProvider();
+ if (partyProvider != null && quest.getOptions().canUsePartiesPlugin()
+ || quest.getOptions().canUseDungeonsXLPlugin()) {
+ if (getUUID() != null && partyProvider.getPartyId(getUUID()) != null) {
+ String partyId = partyProvider.getPartyId(getUUID());
+ final double distanceSquared = quest.getOptions().getShareDistance()
+ * quest.getOptions().getShareDistance();
+ final boolean offlinePlayers = quest.getOptions().canHandleOfflinePlayers();
+ if (offlinePlayers) {
+ for (final UUID id : partyProvider.getMembers(partyId)) {
+ if (!id.equals(getUUID())) {
+ mq.add(plugin.getQuester(id));
+ }
+ }
+ } else {
+ for (final UUID id : partyProvider.getOnlineMembers(partyId)) {
+ if (!id.equals(getUUID())) {
+ if (distanceSquared > 0) {
+ final Player player = Bukkit.getPlayer(id);
+ if (player != null && distanceSquared >= getPlayer().getLocation()
+ .distanceSquared(player.getLocation())) {
+ mq.add(plugin.getQuester(id));
+ }
+ } else {
+ mq.add(plugin.getQuester(id));
+ }
+ }
+ }
+ }
+ return mq;
+ }
+ }
+ } else if (plugin.getDependencies().getPartiesApi() != null) {
if (quest.getOptions().canUsePartiesPlugin()) {
final PartyPlayer partyPlayer = plugin.getDependencies().getPartiesApi().getPartyPlayer(getUUID());
if (partyPlayer != null && partyPlayer.getPartyId() != null) {
final Party party = plugin.getDependencies().getPartiesApi().getParty(partyPlayer.getPartyId());
if (party != null) {
- final double distanceSquared = quest.getOptions().getShareDistance()
+ final double distanceSquared = quest.getOptions().getShareDistance()
* quest.getOptions().getShareDistance();
final boolean offlinePlayers = quest.getOptions().canHandleOfflinePlayers();
if (offlinePlayers) {
@@ -4119,44 +4154,12 @@ public class Quester implements Comparable {
}
}
}
-
+
return mq;
}
}
}
}
- /*if (plugin.getDependencies().getDungeonsApi() != null) {
- if (quest.getOptions().canUseDungeonsXLPlugin()) {
- final DGroup group = (DGroup) plugin.getDependencies().getDungeonsApi().getPlayerGroup(getPlayer());
- if (group != null) {
- final double distanceSquared = quest.getOptions().getShareDistance()
- * quest.getOptions().getShareDistance();
- final boolean offlinePlayers = quest.getOptions().canHandleOfflinePlayers();
- if (offlinePlayers) {
- for (final UUID id : group.getMembers()) {
- if (!id.equals(getUUID())) {
- mq.add(plugin.getQuester(id));
- }
- }
- } else {
- for (final UUID id : group.getMembers()) {
- if (!id.equals(getUUID())) {
- if (distanceSquared > 0) {
- final Player player = Bukkit.getPlayer(id);
- if (player != null && distanceSquared >= getPlayer().getLocation()
- .distanceSquared(player.getLocation())) {
- mq.add(plugin.getQuester(id));
- }
- } else {
- mq.add(plugin.getQuester(id));
- }
- }
- }
- }
- return mq;
- }
- }
- }*/
return mq;
}
diff --git a/main/src/main/java/me/blackvein/quests/Quests.java b/main/src/main/java/me/blackvein/quests/Quests.java
index 81fe5b73b..5b9f80147 100644
--- a/main/src/main/java/me/blackvein/quests/Quests.java
+++ b/main/src/main/java/me/blackvein/quests/Quests.java
@@ -29,10 +29,10 @@ import me.blackvein.quests.exceptions.StageFormatException;
import me.blackvein.quests.interfaces.ReloadCallback;
import me.blackvein.quests.listeners.BlockListener;
import me.blackvein.quests.listeners.CmdExecutor;
-import me.blackvein.quests.listeners.DungeonsListener;
import me.blackvein.quests.listeners.ItemListener;
import me.blackvein.quests.listeners.NpcListener;
import me.blackvein.quests.listeners.PartiesListener;
+import me.blackvein.quests.listeners.UniteListener;
import me.blackvein.quests.listeners.PlayerListener;
import me.blackvein.quests.statistics.Metrics;
import me.blackvein.quests.storage.Storage;
@@ -102,6 +102,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
@@ -137,7 +138,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
private PlayerListener playerListener;
private NpcEffectThread effectThread;
private PlayerMoveThread moveThread;
- private DungeonsListener dungeonsListener;
+ private UniteListener uniteListener;
private PartiesListener partiesListener;
private DenizenTrigger trigger;
private LocaleManager localeManager;
@@ -155,7 +156,7 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
itemListener = new ItemListener(this);
npcListener = new NpcListener(this);
playerListener = new PlayerListener(this);
- dungeonsListener = new DungeonsListener();
+ uniteListener = new UniteListener();
partiesListener = new PartiesListener();
effectThread = new NpcEffectThread(this);
moveThread = new PlayerMoveThread(this);
@@ -173,12 +174,10 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
// 3 - Setup language files
try {
setupLang();
- } catch (final IOException e) {
- e.printStackTrace();
- } catch (final URISyntaxException e) {
+ } catch (final IOException | URISyntaxException e) {
e.printStackTrace();
}
-
+
// 4 - Load command executor
cmdExecutor = new CmdExecutor(this);
@@ -197,15 +196,21 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
storage = storageFactory.getInstance();
// 8 - Setup commands
- getCommand("quests").setExecutor(cmdExecutor);
- getCommand("questadmin").setExecutor(cmdExecutor);
- getCommand("quest").setExecutor(cmdExecutor);
+ if (getCommand("quests") != null) {
+ Objects.requireNonNull(getCommand("quests")).setExecutor(cmdExecutor);
+ }
+ if (getCommand("questadmin") != null) {
+ Objects.requireNonNull(getCommand("questadmin")).setExecutor(cmdExecutor);
+ }
+ if (getCommand("quest") != null) {
+ Objects.requireNonNull(getCommand("quest")).setExecutor(cmdExecutor);
+ }
// 9 - Build conversation factories
this.conversationFactory = new ConversationFactory(this).withModality(false)
.withPrefix(new ConversationPrefix() {
@Override
- public String getPrefix(final ConversationContext context) {
+ public @Nonnull String getPrefix(final @Nonnull ConversationContext context) {
return ChatColor.GRAY.toString();
}
})
@@ -225,10 +230,9 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
final long ticks = settings.getStrictPlayerMovement() * 20L;
getServer().getScheduler().scheduleSyncRepeatingTask(this, moveThread, ticks, ticks);
}
- /*if (depends.getDungeonsApi() != null) {
- getServer().getPluginManager().registerEvents(dungeonsListener, this);
- }*/
- if (depends.getPartiesApi() != null) {
+ if (depends.getPartyProvider() != null) {
+ getServer().getPluginManager().registerEvents(uniteListener, this);
+ } else if (depends.getPartiesApi() != null) {
getServer().getPluginManager().registerEvents(partiesListener, this);
}
@@ -243,8 +247,11 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
final Quester quester = getQuester(p.getUniqueId());
quester.saveData();
}
+ Bukkit.getScheduler().cancelTasks(this);
getLogger().info("Closing storage...");
- storage.close();
+ if (storage != null) {
+ storage.close();
+ }
}
public boolean isLoading() {
@@ -527,17 +534,17 @@ public class Quests extends JavaPlugin implements ConversationAbandonedListener
return playerListener;
}
- public DungeonsListener getDungeonsListener() {
- return dungeonsListener;
- }
-
- public PartiesListener getPartiesListener() {
- return partiesListener;
+ public UniteListener getUniteListener() {
+ return uniteListener;
}
public NpcEffectThread getNpcEffectThread() {
return effectThread;
}
+
+ public PartiesListener getPartiesListener() {
+ return partiesListener;
+ }
public DenizenTrigger getDenizenTrigger() {
return trigger;
diff --git a/main/src/main/java/me/blackvein/quests/listeners/BlockListener.java b/main/src/main/java/me/blackvein/quests/listeners/BlockListener.java
index fe11ea026..8b40811e5 100644
--- a/main/src/main/java/me/blackvein/quests/listeners/BlockListener.java
+++ b/main/src/main/java/me/blackvein/quests/listeners/BlockListener.java
@@ -16,6 +16,7 @@ import me.blackvein.quests.Objective;
import me.blackvein.quests.Quest;
import me.blackvein.quests.Quester;
import me.blackvein.quests.Quests;
+import me.blackvein.quests.Stage;
import me.blackvein.quests.enums.ObjectiveType;
import me.blackvein.quests.events.quester.QuesterPostUpdateObjectiveEvent;
import me.blackvein.quests.events.quester.QuesterPreUpdateObjectiveEvent;
@@ -67,12 +68,13 @@ public class BlockListener implements Listener {
continue;
}
if (quester.getCurrentQuests().containsKey(quest)) {
- if (quester.getCurrentStage(quest) == null) {
+ final Stage currentStage = quester.getCurrentStage(quest);
+ if (currentStage == null) {
plugin.getLogger().severe("Player " + player.getName() + " (" + player.getUniqueId()
+ ") has invalid stage for quest " + quest.getName() + " (" + quest.getId() + ")");
continue;
}
- if (quester.getCurrentStage(quest).containsObjective(breakType)) {
+ if (currentStage.containsObjective(breakType)) {
if (quest.getOptions().canIgnoreSilkTouch()
&& player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) {
Lang.send(player, ChatColor.RED + Lang.get(player, "optionSilkTouchFail")
@@ -90,11 +92,11 @@ public class BlockListener implements Listener {
}));
}
}
- if (quester.getCurrentStage(quest).containsObjective(placeType)) {
+ if (currentStage.containsObjective(placeType)) {
for (final ItemStack is : quester.getQuestData(quest).blocksPlaced) {
if (evt.getBlock().getType().equals(is.getType()) && is.getAmount() > 0) {
ItemStack toPlace = new ItemStack(is.getType(), 64);
- for (final ItemStack stack : quester.getCurrentStage(quest).getBlocksToPlace()) {
+ for (final ItemStack stack : currentStage.getBlocksToPlace()) {
if (ItemUtil.compareItems(is, stack, true) == 0) {
toPlace = stack;
}
@@ -148,7 +150,7 @@ public class BlockListener implements Listener {
}
return null;
}));
- if (quester.getCurrentStage(quest).containsObjective(cutType)) {
+ if (currentStage.containsObjective(cutType)) {
if (player.getItemInHand().getType().equals(Material.SHEARS)) {
quester.cutBlock(quest, blockItemStack);
}
diff --git a/main/src/main/java/me/blackvein/quests/listeners/DungeonsListener.java b/main/src/main/java/me/blackvein/quests/listeners/DungeonsListener.java
deleted file mode 100644
index 82761fe0e..000000000
--- a/main/src/main/java/me/blackvein/quests/listeners/DungeonsListener.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************************************
- * Copyright (c) 2014 PikaMug and contributors. All rights reserved.
- *
- * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *******************************************************************************************************/
-
-package me.blackvein.quests.listeners;
-
-import org.bukkit.event.Listener;
-
-public class DungeonsListener implements Listener {
-
- /*@EventHandler
- public void onGroupCreate(final GroupCreateEvent event) {
- if (Lang.get("questDungeonsCreate").length() > 0) {
- final Player p = event.getCreator().getPlayer();
- Lang.send(p, ChatColor.YELLOW + Lang.get("questDungeonsCreate"));
- }
- }
-
- @EventHandler
- public void onGroupDisbandEvent(final GroupDisbandEvent event) {
- if (Lang.get("questDungeonsDisband").length() > 0) {
- final Player p = event.getDisbander().getPlayer();
- Lang.send(p, ChatColor.RED + Lang.get("questDungeonsDisband"));
- }
- }
-
- @EventHandler
- public void onPlayerJoinEvent(final GroupPlayerJoinEvent event) {
- if (event.getGroup() != null && event.getPlayer() != null) {
- final Player i = event.getGroup().getLeader();
- final Player p = event.getPlayer().getPlayer();
- if (i != null && p != null) {
- if (Lang.get("questDungeonsInvite").length() > 0) {
- Lang.send(i, ChatColor.GREEN + Lang.get(i, "questDungeonsInvite")
- .replace("", p.getName()));
- }
- if (Lang.get("questDungeonsJoin").length() > 0) {
- Lang.send(p, ChatColor.GREEN + Lang.get(p, "questDungeonsJoin").replace("", i.getName()));
- }
- }
- }
- }
-
- @EventHandler
- public void onPlayerLeaveEvent(final GroupPlayerLeaveEvent event) {
- if (event.getGroup() != null && event.getPlayer() != null) {
- final Player k = event.getGroup().getLeader();
- final Player p = event.getPlayer().getPlayer();
- if (k != null && p != null) {
- if (Lang.get("questDungeonsKicked").length() > 0) {
- Lang.send(k, ChatColor.RED + Lang.get(k, "questDungeonsKicked").replace("", k.getName()));
- }
- if (Lang.get("questDungeonsLeave").length() > 0) {
- Lang.send(p, ChatColor.RED + Lang.get(p, "questDungeonsLeave").replace("", p.getName()));
- }
- }
- }
- }*/
-}
diff --git a/main/src/main/java/me/blackvein/quests/listeners/PartiesListener.java b/main/src/main/java/me/blackvein/quests/listeners/PartiesListener.java
index e4461226f..dde37a947 100644
--- a/main/src/main/java/me/blackvein/quests/listeners/PartiesListener.java
+++ b/main/src/main/java/me/blackvein/quests/listeners/PartiesListener.java
@@ -1,6 +1,6 @@
/*******************************************************************************************************
* Copyright (c) 2014 PikaMug and contributors. All rights reserved.
- *
+ *
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
@@ -25,7 +25,7 @@ import com.alessiodp.parties.api.events.bukkit.player.BukkitPartiesPlayerPostLea
import me.blackvein.quests.util.Lang;
public class PartiesListener implements Listener {
-
+
@EventHandler
public void onPartyCreate(final BukkitPartiesPartyPostCreateEvent event) {
if (event.getCreator() != null) {
@@ -37,7 +37,7 @@ public class PartiesListener implements Listener {
}
}
}
-
+
@EventHandler
public void onPlayerJoinEvent(final BukkitPartiesPlayerPostJoinEvent event) {
final Player p = Bukkit.getServer().getPlayer(event.getPartyPlayer().getPlayerUUID());
@@ -46,7 +46,7 @@ public class PartiesListener implements Listener {
event.getParty().broadcastMessage(ChatColor.GREEN + Lang.get("questPartiesJoinBroadcast").replace("", event.getPartyPlayer().getName()), event.getPartyPlayer());
}
}
-
+
@EventHandler
public void onPlayerLeaveEvent(final BukkitPartiesPlayerPostLeaveEvent event) {
final Player p = Bukkit.getServer().getPlayer(event.getPartyPlayer().getPlayerUUID());
diff --git a/main/src/main/java/me/blackvein/quests/listeners/UniteListener.java b/main/src/main/java/me/blackvein/quests/listeners/UniteListener.java
new file mode 100644
index 000000000..1c522cc65
--- /dev/null
+++ b/main/src/main/java/me/blackvein/quests/listeners/UniteListener.java
@@ -0,0 +1,87 @@
+/*******************************************************************************************************
+ * Copyright (c) 2014 PikaMug and contributors. All rights reserved.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *******************************************************************************************************/
+
+package me.blackvein.quests.listeners;
+
+import me.blackvein.quests.util.Lang;
+import me.pikamug.unite.api.events.PartyCreateEvent;
+import me.pikamug.unite.api.events.PartyDeleteEvent;
+import me.pikamug.unite.api.events.PartyJoinEvent;
+import me.pikamug.unite.api.events.PartyLeaveEvent;
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+
+public class UniteListener implements Listener {
+
+ @EventHandler
+ public void onPartyCreate(final PartyCreateEvent event) {
+ if (event.getCreator() != null) {
+ final Player p = Bukkit.getServer().getPlayer(event.getCreator());
+ if (p != null) {
+ if (Lang.get("questPartiesCreate").length() > 0) {
+ Lang.send(p, ChatColor.YELLOW + Lang.get("questPartiesCreate"));
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void onPartyDelete(final PartyDeleteEvent event) {
+ if (event.getDisbander() != null) {
+ final Player p = Bukkit.getServer().getPlayer(event.getDisbander());
+ if (p != null) {
+ if (Lang.get("questDungeonsDisband").length() > 0) {
+ Lang.send(p, ChatColor.RED + Lang.get("questDungeonsDisband"));
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void onPlayerJoinEvent(final PartyJoinEvent event) {
+ final Player p = Bukkit.getServer().getPlayer(event.getPlayer());
+ if (p != null && Lang.get("questPartiesLeave").length() > 0) {
+ Lang.send(p, ChatColor.GREEN + Lang.get(p, "questPartiesJoin"));
+ if (Lang.get("questPartiesJoinBroadcast").length() > 0) {
+ for (Player online : Bukkit.getOnlinePlayers()) {
+ if (event.getPlayer().equals(online.getUniqueId())) {
+ continue;
+ }
+ if (event.getPartyProvider().areInSameParty(p, online)) {
+ online.sendMessage(ChatColor.GREEN + Lang.get("questPartiesJoinBroadcast").replace("", p.getName()));
+ }
+ }
+ }
+ }
+ }
+
+ @EventHandler
+ public void onPlayerLeaveEvent(final PartyLeaveEvent event) {
+ final Player p = Bukkit.getServer().getPlayer(event.getPlayer());
+ if (p != null && Lang.get("questPartiesLeave").length() > 0) {
+ Lang.send(p, ChatColor.RED + Lang.get(p, "questPartiesLeave"));
+ if (Lang.get("questPartiesLeaveBroadcast").length() > 0) {
+ for (Player online : Bukkit.getOnlinePlayers()) {
+ if (event.getPlayer().equals(online.getUniqueId())) {
+ continue;
+ }
+ if (event.getPartyProvider().areInSameParty(p, online)) {
+ online.sendMessage(ChatColor.RED + Lang.get("questPartiesLeaveBroadcast").replace("", p.getName()));
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/main/src/main/resources/plugin.yml b/main/src/main/resources/plugin.yml
index 486d4351a..53993f88f 100644
--- a/main/src/main/resources/plugin.yml
+++ b/main/src/main/resources/plugin.yml
@@ -6,7 +6,7 @@ description: An extensive questing system.
website: https://www.spigotmc.org/resources/quests.3711/
dev-url: https://github.com/PikaMug/Quests
author: PikaMug
-softdepend: [Citizens, CitizensBooks, Denizen, DungeonsXL, GPS, Heroes, mcMMO, Parties, PhatLoots, PlaceholderAPI, Vault, WorldGuard]
+softdepend: [Citizens, CitizensBooks, Denizen, DungeonsXL, GPS, Heroes, mcMMO, Parties, PhatLoots, PlaceholderAPI, Unite, Vault, WorldGuard]
permissions:
quests.*:
description: Access ALL Quests functionality