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