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: