diff --git a/bedwars-plugin/pom.xml b/bedwars-plugin/pom.xml
index 07104ed6c..9a4e27467 100644
--- a/bedwars-plugin/pom.xml
+++ b/bedwars-plugin/pom.xml
@@ -70,6 +70,10 @@
papermc
https://papermc.io/repo/repository/maven-public/
+
+ jitpack.io
+ https://jitpack.io
+
@@ -325,6 +329,13 @@
1.18-R0.1-SNAPSHOT
provided
+
+
+ com.github.sk8ingDuck
+ FriendSystem-Spigot-API
+ c2b5d9a0c0
+ provided
+
diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/BedWars.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/BedWars.java
index 6f351c6b1..3656be629 100644
--- a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/BedWars.java
+++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/BedWars.java
@@ -71,10 +71,7 @@
import com.andrei1058.bedwars.support.citizens.JoinNPC;
import com.andrei1058.bedwars.support.papi.PAPISupport;
import com.andrei1058.bedwars.support.papi.SupportPAPI;
-import com.andrei1058.bedwars.support.party.NoParty;
-import com.andrei1058.bedwars.support.party.PAF;
-import com.andrei1058.bedwars.support.party.PAFBungeecordRedisApi;
-import com.andrei1058.bedwars.support.party.PartiesAdapter;
+import com.andrei1058.bedwars.support.party.*;
import com.andrei1058.bedwars.support.preloadedparty.PrePartyListener;
import com.andrei1058.bedwars.support.vault.*;
import com.andrei1058.bedwars.support.vipfeatures.VipFeatures;
@@ -331,6 +328,9 @@ public void onEnable() {
} else if (Bukkit.getServer().getPluginManager().isPluginEnabled("Spigot-Party-API-PAF")) {
getLogger().info("Hook into Spigot Party API for Party and Friends Extended (by Simonsator) support!");
party = new PAFBungeecordRedisApi();
+ } else if (Bukkit.getServer().getPluginManager().isPluginEnabled("FriendSystem-Spigot-API")) {
+ party = new FAPAdapter();
+ getLogger().info("Hook into FriendSystem (by sk8ingDuck)!");
}
if (party instanceof NoParty) {
diff --git a/bedwars-plugin/src/main/java/com/andrei1058/bedwars/support/party/FAPAdapter.java b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/support/party/FAPAdapter.java
new file mode 100644
index 000000000..08e233750
--- /dev/null
+++ b/bedwars-plugin/src/main/java/com/andrei1058/bedwars/support/party/FAPAdapter.java
@@ -0,0 +1,117 @@
+package com.andrei1058.bedwars.support.party;
+
+import com.andrei1058.bedwars.api.party.Party;
+import me.sk8ingduck.friendsystem.SpigotAPI;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class FAPAdapter implements Party {
+
+ private me.sk8ingduck.friendsystem.util.Party getParty(Player player) {
+ return SpigotAPI.getInstance().getPartyManager().getParty(player.getUniqueId());
+ }
+
+ @Override
+ public boolean hasParty(Player p) {
+ return getParty(p) != null;
+ }
+
+ @Override
+ public int partySize(Player p) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(p);
+ return party == null ? 0 : party.getAllMembers().size();
+ }
+
+ @Override
+ public boolean isOwner(Player p) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(p);
+ return party == null || party.getLeaderUUID().equals(p.getUniqueId());
+ }
+
+ public List getMembers(Player owner) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ return party == null ? Collections.emptyList() :
+ party.getAllMembers().stream()
+ .map(Bukkit::getPlayer)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public void createParty(Player owner, Player... members) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party != null) return;
+
+ String[] memberUUIDs = new String[members.length];
+ for (int i = 0; i < members.length; i++) {
+ memberUUIDs[i] = members[i].getUniqueId().toString();
+ }
+
+ SpigotAPI.getInstance().getPartyManager().createParty(owner, memberUUIDs);
+ }
+
+ @Override
+ public void addMember(Player owner, Player member) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party == null) return;
+
+ SpigotAPI.getInstance().getPartyManager().addPlayer(party.getLeaderUUID(), member);
+ }
+
+ @Override
+ public void removeFromParty(Player member) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(member);
+ if (party == null) return;
+
+ SpigotAPI.getInstance().getPartyManager().kickPlayer(party.getLeaderUUID(), member);
+ }
+
+ @Override
+ public void disband(Player owner) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party == null) return;
+
+ SpigotAPI.getInstance().getPartyManager().disbandParty(owner);
+ }
+
+ @Override
+ public boolean isMember(Player owner, Player check) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party == null) return false;
+
+ return party.getAllMembers().contains(check.getUniqueId());
+ }
+
+ @Override
+ public void removePlayer(Player owner, Player target) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party == null) return;
+
+ SpigotAPI.getInstance().getPartyManager().kickPlayer(party.getLeaderUUID(), target);
+ }
+
+ @Override
+ public Player getOwner(Player member) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(member);
+ return party == null ? member : Bukkit.getPlayer(party.getLeaderUUID());
+ }
+
+ @Override
+ public void promote(@NotNull Player owner, @NotNull Player target) {
+ me.sk8ingduck.friendsystem.util.Party party = getParty(owner);
+ if (party == null) return;
+
+ SpigotAPI.getInstance().getPartyManager().promotePlayer(party.getLeaderUUID(), target);
+ }
+
+ @Override
+ public boolean isInternal() {
+ return false;
+ }
+}
diff --git a/bedwars-plugin/src/main/resources/plugin.yml b/bedwars-plugin/src/main/resources/plugin.yml
index 407b439c2..975f56f24 100644
--- a/bedwars-plugin/src/main/resources/plugin.yml
+++ b/bedwars-plugin/src/main/resources/plugin.yml
@@ -4,5 +4,5 @@ version: ${project.version}
author: andrei1058
description: BedWars minigame by andrei1058
main: com.andrei1058.bedwars.BedWars
-softdepend: [Vault,PlaceholderAPI,Citizens,Parties,SlimeWorldManager,VipFeatures,Enhanced-SlimeWorldManager,PartyAndFriends,Spigot-Party-API-PAF]
+softdepend: [Vault,PlaceholderAPI,Citizens,Parties,SlimeWorldManager,VipFeatures,Enhanced-SlimeWorldManager,PartyAndFriends,Spigot-Party-API-PAF,FriendSystem-Spigot-API]
#load: STARTUP