diff --git a/pom.xml b/pom.xml
index 0df532a..dede917 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
me.pikamug.unite
Unite
- 1.1.8
+ 1.2.0
UTF-8
@@ -27,7 +27,7 @@
https://repo.alessiodp.com/releases/
-
+
jitpack.io
https://jitpack.io
@@ -68,6 +68,12 @@
3.2.9
provided
+
+ com.github.booksaw
+ BetterTeams
+ 4.11.0
+ provided
+
com.github.PikaMug
DungeonsXL-Dummy
diff --git a/src/main/java/me/pikamug/unite/Unite.java b/src/main/java/me/pikamug/unite/Unite.java
index 4830a15..55fe452 100644
--- a/src/main/java/me/pikamug/unite/Unite.java
+++ b/src/main/java/me/pikamug/unite/Unite.java
@@ -1,6 +1,7 @@
package me.pikamug.unite;
import me.pikamug.unite.api.objects.PartyProvider;
+import me.pikamug.unite.api.objects.plugins.PartyProvider_BetterTeams;
import me.pikamug.unite.api.objects.plugins.PartyProvider_DungeonsXL;
import me.pikamug.unite.api.objects.plugins.PartyProvider_PAF;
import me.pikamug.unite.api.objects.plugins.PartyProvider_PAFGUI;
@@ -57,6 +58,7 @@ public static Unite getInstance() {
public void hookProviders() {
hookProvider("Parties", PartyProvider_Parties.class, ServicePriority.Highest, "com.alessiodp.parties.api.interfaces.PartiesAPI");
+ hookProvider("BetterTeams", PartyProvider_BetterTeams.class, ServicePriority.Normal, "com.booksaw.betterTeams.Main");
hookProvider("DungeonsXL", PartyProvider_DungeonsXL.class, ServicePriority.Normal, "de.erethon.dungeonsxl.DungeonsXL");
hookProvider("mcMMO", PartyProvider_mcMMO.class, ServicePriority.High, "com.gmail.nossr50.party.PartyManager");
hookProvider("PartyAndFriends", PartyProvider_PAF.class, ServicePriority.Normal, "de.simonsator.partyandfriends.main.PAFPlugin");
diff --git a/src/main/java/me/pikamug/unite/api/events/betterteams/PartyCreateEvent_BetterTeams.java b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyCreateEvent_BetterTeams.java
new file mode 100644
index 0000000..db09bfb
--- /dev/null
+++ b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyCreateEvent_BetterTeams.java
@@ -0,0 +1,36 @@
+package me.pikamug.unite.api.events.betterteams;
+
+import com.booksaw.betterTeams.customEvents.CreateTeamEvent;
+import me.pikamug.unite.api.events.PartyCreateEvent;
+import me.pikamug.unite.api.objects.PartyProvider;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+import java.util.UUID;
+
+public class PartyCreateEvent_BetterTeams extends PartyCreateEvent {
+ private final PartyProvider partyProvider;
+ private final CreateTeamEvent event;
+
+ public PartyCreateEvent_BetterTeams(PartyProvider partyProvider, Event event, boolean async) {
+ super(async);
+ this.partyProvider = partyProvider;
+ this.event = (CreateTeamEvent) event;
+ }
+
+ @Override
+ public Event getPluginEvent() {
+ return event;
+ }
+
+ @Override
+ public @NotNull PartyProvider getPartyProvider() {
+ return partyProvider;
+ }
+
+ @Override
+ public UUID getCreator() {
+ return Objects.requireNonNull(event.getPlayer()).getUniqueId();
+ }
+}
diff --git a/src/main/java/me/pikamug/unite/api/events/betterteams/PartyDeleteEvent_BetterTeams.java b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyDeleteEvent_BetterTeams.java
new file mode 100644
index 0000000..5b782ae
--- /dev/null
+++ b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyDeleteEvent_BetterTeams.java
@@ -0,0 +1,36 @@
+package me.pikamug.unite.api.events.betterteams;
+
+import com.booksaw.betterTeams.customEvents.DisbandTeamEvent;
+import me.pikamug.unite.api.events.PartyDeleteEvent;
+import me.pikamug.unite.api.objects.PartyProvider;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+import java.util.UUID;
+
+public class PartyDeleteEvent_BetterTeams extends PartyDeleteEvent {
+ private final PartyProvider partyProvider;
+ private final DisbandTeamEvent event;
+
+ public PartyDeleteEvent_BetterTeams(PartyProvider partyProvider, Event event, boolean async) {
+ super(async);
+ this.partyProvider = partyProvider;
+ this.event = (DisbandTeamEvent) event;
+ }
+
+ @Override
+ public Event getPluginEvent() {
+ return event;
+ }
+
+ @Override
+ public @NotNull PartyProvider getPartyProvider() {
+ return partyProvider;
+ }
+
+ @Override
+ public UUID getDisbander() {
+ return Objects.requireNonNull(event.getPlayer()).getUniqueId();
+ }
+}
diff --git a/src/main/java/me/pikamug/unite/api/events/betterteams/PartyJoinEvent_BetterTeams.java b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyJoinEvent_BetterTeams.java
new file mode 100644
index 0000000..2b099a4
--- /dev/null
+++ b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyJoinEvent_BetterTeams.java
@@ -0,0 +1,35 @@
+package me.pikamug.unite.api.events.betterteams;
+
+import com.booksaw.betterTeams.customEvents.PlayerJoinTeamEvent;
+import me.pikamug.unite.api.events.PartyJoinEvent;
+import me.pikamug.unite.api.objects.PartyProvider;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.UUID;
+
+public class PartyJoinEvent_BetterTeams extends PartyJoinEvent {
+ private final PartyProvider partyProvider;
+ private final PlayerJoinTeamEvent event;
+
+ public PartyJoinEvent_BetterTeams(PartyProvider partyProvider, Event event, boolean async) {
+ super(async);
+ this.partyProvider = partyProvider;
+ this.event = (PlayerJoinTeamEvent) event;
+ }
+
+ @Override
+ public Event getPluginEvent() {
+ return event;
+ }
+
+ @Override
+ public @NotNull PartyProvider getPartyProvider() {
+ return partyProvider;
+ }
+
+ @Override
+ public UUID getPlayer() {
+ return event.getPlayer().getUniqueId();
+ }
+}
diff --git a/src/main/java/me/pikamug/unite/api/events/betterteams/PartyLeaveEvent_BetterTeams.java b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyLeaveEvent_BetterTeams.java
new file mode 100644
index 0000000..f3f409b
--- /dev/null
+++ b/src/main/java/me/pikamug/unite/api/events/betterteams/PartyLeaveEvent_BetterTeams.java
@@ -0,0 +1,35 @@
+package me.pikamug.unite.api.events.betterteams;
+
+import com.booksaw.betterTeams.customEvents.PlayerLeaveTeamEvent;
+import me.pikamug.unite.api.events.PartyLeaveEvent;
+import me.pikamug.unite.api.objects.PartyProvider;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.UUID;
+
+public class PartyLeaveEvent_BetterTeams extends PartyLeaveEvent {
+ private final PartyProvider partyProvider;
+ private final PlayerLeaveTeamEvent event;
+
+ public PartyLeaveEvent_BetterTeams(PartyProvider partyProvider, Event event, boolean async) {
+ super(async);
+ this.partyProvider = partyProvider;
+ this.event = (PlayerLeaveTeamEvent) event;
+ }
+
+ @Override
+ public Event getPluginEvent() {
+ return event;
+ }
+
+ @Override
+ public @NotNull PartyProvider getPartyProvider() {
+ return partyProvider;
+ }
+
+ @Override
+ public UUID getPlayer() {
+ return event.getPlayer().getUniqueId();
+ }
+}
diff --git a/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_BetterTeams.java b/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_BetterTeams.java
new file mode 100644
index 0000000..78f7aef
--- /dev/null
+++ b/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_BetterTeams.java
@@ -0,0 +1,155 @@
+package me.pikamug.unite.api.objects.plugins;
+
+import com.booksaw.betterTeams.Main;
+import com.booksaw.betterTeams.PlayerRank;
+import com.booksaw.betterTeams.Team;
+import com.booksaw.betterTeams.customEvents.CreateTeamEvent;
+import com.booksaw.betterTeams.customEvents.DisbandTeamEvent;
+import com.booksaw.betterTeams.customEvents.PlayerJoinTeamEvent;
+import com.booksaw.betterTeams.customEvents.PlayerLeaveTeamEvent;
+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 me.pikamug.unite.api.events.betterteams.PartyCreateEvent_BetterTeams;
+import me.pikamug.unite.api.events.betterteams.PartyDeleteEvent_BetterTeams;
+import me.pikamug.unite.api.events.betterteams.PartyJoinEvent_BetterTeams;
+import me.pikamug.unite.api.events.betterteams.PartyLeaveEvent_BetterTeams;
+import me.pikamug.unite.api.objects.PartyProvider;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.server.PluginDisableEvent;
+import org.bukkit.event.server.PluginEnableEvent;
+import org.bukkit.plugin.Plugin;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Objects;
+import java.util.Set;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+public class PartyProvider_BetterTeams extends PartyProvider {
+ private Main betterTeams;
+ private final String pluginName = "BetterTeams";
+
+ public PartyProvider_BetterTeams(Plugin plugin) {
+ this.plugin = plugin;
+ plugin.getServer().getPluginManager().registerEvents(new PartyServerListener(this), plugin);
+
+ if (betterTeams == null) {
+ betterTeams = (Main) Bukkit.getPluginManager().getPlugin(pluginName);
+ }
+ }
+
+ public class PartyServerListener implements Listener {
+ final PartyProvider_BetterTeams partyPlugin;
+
+ public PartyServerListener(PartyProvider_BetterTeams partyPlugin) {
+ this.partyPlugin = partyPlugin;
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPluginEnable(PluginEnableEvent event) {
+ if (event.getPlugin().getDescription().getName().equals(pluginName)) {
+ log.info(String.format("[%s][Party] %s hooked.", plugin.getDescription().getName(), partyPlugin.pluginName));
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPluginDisable(PluginDisableEvent event) {
+ if (event.getPlugin().getDescription().getName().equals(pluginName)) {
+ log.info(String.format("[%s][Party] %s un-hooked.", plugin.getDescription().getName(), partyPlugin.pluginName));
+ }
+ }
+
+ @EventHandler
+ public void onPartyCreate(final CreateTeamEvent pluginEvent) {
+ final PartyCreateEvent event = new PartyCreateEvent_BetterTeams(partyPlugin, pluginEvent, pluginEvent.isAsynchronous());
+ plugin.getServer().getPluginManager().callEvent(event);
+ }
+
+ @EventHandler
+ public void onPartyDelete(final DisbandTeamEvent pluginEvent) {
+ final PartyDeleteEvent event = new PartyDeleteEvent_BetterTeams(partyPlugin, pluginEvent, pluginEvent.isAsynchronous());
+ plugin.getServer().getPluginManager().callEvent(event);
+ }
+
+ @EventHandler
+ public void onPartyJoin(final PlayerJoinTeamEvent pluginEvent) {
+ final PartyJoinEvent event = new PartyJoinEvent_BetterTeams(partyPlugin, pluginEvent, pluginEvent.isAsynchronous());
+ plugin.getServer().getPluginManager().callEvent(event);
+ }
+
+ @EventHandler
+ public void onPartyLeave(final PlayerLeaveTeamEvent pluginEvent) {
+ final PartyLeaveEvent event = new PartyLeaveEvent_BetterTeams(partyPlugin, pluginEvent, pluginEvent.isAsynchronous());
+ plugin.getServer().getPluginManager().callEvent(event);
+ }
+ }
+
+ @Override
+ public boolean isPluginEnabled() {
+ if (betterTeams == null) {
+ return false;
+ }
+ if (plugin.getServer().getPluginManager().getPlugin(pluginName) != null) {
+ return Objects.requireNonNull(plugin.getServer().getPluginManager().getPlugin(pluginName)).isEnabled();
+ }
+ return false;
+ }
+
+ @Override
+ public @NotNull String getPluginName() {
+ return pluginName;
+ }
+
+ @Override
+ public boolean createParty(String partyName, UUID playerId) {
+ return Team.getTeamManager().createNewTeam(partyName, plugin.getServer().getPlayer(playerId)) != null;
+ }
+
+ @Override
+ public boolean isPlayerInParty(UUID playerId) {
+ return Team.getTeamManager().isInTeam(plugin.getServer().getOfflinePlayer(playerId));
+ }
+
+ @Override
+ public boolean areInSameParty(UUID playerId1, UUID playerId2) {
+ final Team one = Team.getTeam(plugin.getServer().getOfflinePlayer(playerId1));
+ final Team two = Team.getTeam(plugin.getServer().getOfflinePlayer(playerId2));
+ return one != null && two != null && one.getID().equals(two.getID());
+ }
+
+ @Override
+ public String getPartyName(UUID playerId) {
+ return Team.getTeam(plugin.getServer().getOfflinePlayer(playerId)).getName();
+ }
+
+ @Override
+ public String getPartyId(UUID playerId) {
+ return Team.getTeam(plugin.getServer().getOfflinePlayer(playerId)).getID().toString();
+ }
+
+ @Override
+ public UUID getLeader(String partyId) {
+ final Team team = Team.getTeam(UUID.fromString(partyId));
+ if (team != null) {
+ return team.getMembers().getRank(PlayerRank.OWNER).get(0).getPlayer().getUniqueId();
+ }
+ return null;
+ }
+
+ @Override
+ public Set getMembers(String partyId) {
+ return Team.getTeam(UUID.fromString(partyId)).getMembers().getOfflinePlayers().stream().map(OfflinePlayer::getUniqueId).collect(Collectors.toSet());
+ }
+
+ @Override
+ public Set getOnlineMembers(String partyId) {
+ return Team.getTeam(UUID.fromString(partyId)).getOnlineMembers().stream().map(Player::getUniqueId).collect(Collectors.toSet());
+ }
+}
diff --git a/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_mcMMO.java b/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_mcMMO.java
index 0a7520f..5ff4ef4 100644
--- a/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_mcMMO.java
+++ b/src/main/java/me/pikamug/unite/api/objects/plugins/PartyProvider_mcMMO.java
@@ -40,7 +40,7 @@ public PartyProvider_mcMMO(Plugin plugin) {
plugin.getServer().getPluginManager().registerEvents(new PartyServerListener(this), plugin);
if (mcmmo == null) {
- mcmmo = (mcMMO) Bukkit.getPluginManager().getPlugin("mcMMO");
+ mcmmo = (mcMMO) Bukkit.getPluginManager().getPlugin(pluginName);
}
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 877c387..8534eed 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -5,7 +5,7 @@ api-version: 1.13
description: Abstraction library for Minecraft party plugins
dev-url: https://github.com/PikaMug/Unite
author: PikaMug
-softdepend: [DungeonsXL, mcMMO, Parties, PartyAndFriends, PartyAndFriendsGUI, SimpleClans]
+softdepend: [BetterTeams, DungeonsXL, mcMMO, Parties, PartyAndFriends, PartyAndFriendsGUI, SimpleClans]
commands:
unite: