Support for MythicDungeons & Heroes party systems

This commit is contained in:
Jules 2024-07-26 14:02:50 -07:00
parent 25509be21b
commit d248f11a0e
18 changed files with 224 additions and 50 deletions

View File

@ -105,6 +105,12 @@
<url>https://simonsator.de/repo</url> <url>https://simonsator.de/repo</url>
</repository> </repository>
<!-- Heroes Repository
<repository>
<id>herocraft</id>
<url>https://nexus.hc.to/content/repositories/pub_releases</url>
</repository> -->
</repositories> </repositories>
<dependencies> <dependencies>
@ -146,6 +152,7 @@
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.20</version> <version>1.18.20</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<!-- Plugin dependencies --> <!-- Plugin dependencies -->
@ -154,6 +161,7 @@
<artifactId>Mythic-Dist</artifactId> <artifactId>Mythic-Dist</artifactId>
<version>5.0.1</version> <version>5.0.1</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -161,6 +169,7 @@
<artifactId>MythicDungeons</artifactId> <artifactId>MythicDungeons</artifactId>
<version>1.4.1-SNAPSHOT-CUSTOM</version> <version>1.4.1-SNAPSHOT-CUSTOM</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -176,6 +185,7 @@
<artifactId>placeholderapi</artifactId> <artifactId>placeholderapi</artifactId>
<version>2.9.2</version> <version>2.9.2</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -183,6 +193,7 @@
<artifactId>VaultAPI</artifactId> <artifactId>VaultAPI</artifactId>
<version>1.7.1</version> <version>1.7.1</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -190,6 +201,7 @@
<artifactId>worldguard-bukkit</artifactId> <artifactId>worldguard-bukkit</artifactId>
<version>7.0.2-SNAPSHOT</version> <version>7.0.2-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
<exclusions> <exclusions>
<exclusion> <exclusion>
@ -208,6 +220,7 @@
<artifactId>ProtocolLib</artifactId> <artifactId>ProtocolLib</artifactId>
<version>4.8.0</version> <version>4.8.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -215,6 +228,7 @@
<artifactId>Citizens</artifactId> <artifactId>Citizens</artifactId>
<version>2.0.30</version> <version>2.0.30</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<!-- Party plugins --> <!-- Party plugins -->
@ -223,6 +237,7 @@
<artifactId>DevelopmentPAFSpigot</artifactId> <artifactId>DevelopmentPAFSpigot</artifactId>
<version>1.0.65</version> <version>1.0.65</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -230,6 +245,7 @@
<artifactId>Party-and-Friends-MySQL-Edition-Spigot-API</artifactId> <artifactId>Party-and-Friends-MySQL-Edition-Spigot-API</artifactId>
<version>1.5.4-RELEASE</version> <version>1.5.4-RELEASE</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -237,6 +253,7 @@
<artifactId>spigot-party-api-for-party-and-friends</artifactId> <artifactId>spigot-party-api-for-party-and-friends</artifactId>
<version>1.0.4-RELEASE</version> <version>1.0.4-RELEASE</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -244,6 +261,7 @@
<artifactId>OBTeam</artifactId> <artifactId>OBTeam</artifactId>
<version>1.1</version> <version>1.1</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -251,6 +269,7 @@
<artifactId>Parties</artifactId> <artifactId>Parties</artifactId>
<version>3.1.14</version> <version>3.1.14</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -258,6 +277,7 @@
<artifactId>mcMMO</artifactId> <artifactId>mcMMO</artifactId>
<version>2.1.209</version> <version>2.1.209</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -265,6 +285,15 @@
<artifactId>DungeonsXL</artifactId> <artifactId>DungeonsXL</artifactId>
<version>0.18-SNAPSHOT-1149</version> <version>0.18-SNAPSHOT-1149</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.herocraftonline</groupId>
<artifactId>Heroes</artifactId>
<version>1.9.22</version>
<scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -272,6 +301,7 @@
<artifactId>Bedrock</artifactId> <artifactId>Bedrock</artifactId>
<version>1.2.5</version> <version>1.2.5</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -279,6 +309,7 @@
<artifactId>Dungeons</artifactId> <artifactId>Dungeons</artifactId>
<version>1.0</version> <version>1.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<!-- Quest Plugins --> <!-- Quest Plugins -->
@ -287,24 +318,28 @@
<artifactId>Quests</artifactId> <artifactId>Quests</artifactId>
<version>4.4.1-b340</version> <version>4.4.1-b340</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>fr.skytasul.quests</groupId> <groupId>fr.skytasul.quests</groupId>
<artifactId>BeautyQuests</artifactId> <artifactId>BeautyQuests</artifactId>
<version>0.19.5</version> <version>0.19.5</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.guillaumevdn</groupId> <groupId>com.guillaumevdn</groupId>
<artifactId>QuestCreator</artifactId> <artifactId>QuestCreator</artifactId>
<version>6.39.0</version> <version>6.39.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.guillaumevdn</groupId> <groupId>com.guillaumevdn</groupId>
<artifactId>GCore</artifactId> <artifactId>GCore</artifactId>
<version>8.39.0</version> <version>8.39.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<!-- Guild plugins --> <!-- Guild plugins -->
@ -321,6 +356,7 @@
<artifactId>UClansV7-API</artifactId> <artifactId>UClansV7-API</artifactId>
<version>7.1.0</version> <version>7.1.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -328,6 +364,7 @@
<artifactId>Guilds</artifactId> <artifactId>Guilds</artifactId>
<version>3.5.6.0</version> <version>3.5.6.0</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
@ -335,6 +372,7 @@
<artifactId>Kingdoms</artifactId> <artifactId>Kingdoms</artifactId>
<version>1.15.5</version> <version>1.15.5</version>
<scope>provided</scope> <scope>provided</scope>
<optional>true</optional>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -6,6 +6,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.manager.MMOCoreManager; import net.Indyuce.mmocore.manager.MMOCoreManager;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyUtils;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import java.util.HashSet; import java.util.HashSet;
@ -23,7 +24,7 @@ public class PartyManager implements MMOCoreManager {
public void initialize(boolean clearBefore) { public void initialize(boolean clearBefore) {
if (clearBefore) { if (clearBefore) {
// Fixes MMOCore#1035, first remove existing buffs of players. // Fixes MMOCore#1035, first remove existing buffs of players.
PlayerData.getAll().forEach(MMOCore.plugin.partyModule::clearStatBonuses); PlayerData.getAll().forEach(PartyUtils::clearStatBonuses);
buffs.clear(); buffs.clear();
} }
@ -40,7 +41,7 @@ public class PartyManager implements MMOCoreManager {
if (clearBefore) if (clearBefore)
for (PlayerData playerData : PlayerData.getAll()) { for (PlayerData playerData : PlayerData.getAll()) {
AbstractParty party = MMOCore.plugin.partyModule.getParty(playerData); AbstractParty party = MMOCore.plugin.partyModule.getParty(playerData);
if (party != null) MMOCore.plugin.partyModule.applyStatBonuses(playerData, party.countMembers()); if (party != null) PartyUtils.applyStatBonuses(playerData, party.countMembers());
} }
} }
} }

View File

@ -2,6 +2,7 @@ package net.Indyuce.mmocore.party;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
@ -10,17 +11,17 @@ public interface AbstractParty {
/** /**
* @return If given player is in that party * @return If given player is in that party
*/ */
boolean hasMember(Player player); default boolean hasMember(@NotNull Player player) {
for (PlayerData member : getOnlineMembers())
if (member.getPlayer().equals(player)) return true;
return false;
}
/** /**
* @return List of online members * @return List of online members
*/ */
List<PlayerData> getOnlineMembers(); List<PlayerData> getOnlineMembers();
/**
* @deprecated Prefer using {@link #getOnlineMembers()}
*/
@Deprecated
default PlayerData getMember(int n) { default PlayerData getMember(int n) {
return getOnlineMembers().get(n); return getOnlineMembers().get(n);
} }

View File

@ -1,26 +1,21 @@
package net.Indyuce.mmocore.party; package net.Indyuce.mmocore.party;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface PartyModule { public interface PartyModule {
@Nullable @Nullable
public AbstractParty getParty(PlayerData playerData); public AbstractParty getParty(@NotNull PlayerData playerData);
@Deprecated
/**
* Applies party stat bonuses to a specific player
*/
default void applyStatBonuses(PlayerData player, int memberCount) { default void applyStatBonuses(PlayerData player, int memberCount) {
MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.multiply(memberCount - 1).register(player.getMMOPlayerData())); PartyUtils.applyStatBonuses(player, memberCount);
} }
/** @Deprecated
* Clear party stat bonuses from a player
*/
default void clearStatBonuses(PlayerData player) { default void clearStatBonuses(PlayerData player) {
MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.unregister(player.getMMOPlayerData())); PartyUtils.clearStatBonuses(player);
} }
} }

View File

@ -10,7 +10,9 @@ public enum PartyModuleType {
MMOCORE("MMOCore", MMOCorePartyModule::new), MMOCORE("MMOCore", MMOCorePartyModule::new),
// DUNGEONS("Dungeons", DungeonsPartyModule::new), // DUNGEONS("Dungeons", DungeonsPartyModule::new),
DUNGEONSXL("DungeonsXL", DungeonsXLPartyModule::new), DUNGEONSXL("DungeonsXL", DungeonsXLPartyModule::new),
HEROES("Heroes", HeroesPartyModule::new),
MCMMO("mcMMO", McMMOPartyModule::new), MCMMO("mcMMO", McMMOPartyModule::new),
MYTHICDUNGEONS_INJECT("MythicDungeons", MythicDungeonsPartyInjector::new),
MYTHICDUNGEONS("MythicDungeons", MythicDungeonsPartyModule::new), MYTHICDUNGEONS("MythicDungeons", MythicDungeonsPartyModule::new),
OBTEAM("OBTeam", OBTeamPartyModule::new), OBTEAM("OBTeam", OBTeamPartyModule::new),
PARTY_AND_FRIENDS("PartyAndFriends", PAFPartyModule::new), PARTY_AND_FRIENDS("PartyAndFriends", PAFPartyModule::new),

View File

@ -0,0 +1,22 @@
package net.Indyuce.mmocore.party;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import org.jetbrains.annotations.NotNull;
public class PartyUtils {
/**
* Applies party stat bonuses to a specific player
*/
public static void applyStatBonuses(@NotNull PlayerData player, int memberCount) {
MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.multiply(memberCount - 1).register(player.getMMOPlayerData()));
}
/**
* Clear party stat bonuses from a player
*/
public static void clearStatBonuses(@NotNull PlayerData player) {
MMOCore.plugin.partyManager.getBonuses().forEach(buff -> buff.unregister(player.getMMOPlayerData()));
}
}

View File

@ -15,7 +15,7 @@ public class DungeonsPartyModule implements PartyModule {
throw new RuntimeException("Not supported"); throw new RuntimeException("Not supported");
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
public CustomParty() { public CustomParty() {
} }

View File

@ -9,6 +9,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyModule; import net.Indyuce.mmocore.party.PartyModule;
import net.Indyuce.mmocore.party.PartyUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -34,25 +35,25 @@ public class DungeonsXLPartyModule implements PartyModule, Listener {
public void onPlayerJoin(GroupPlayerJoinEvent event) { public void onPlayerJoin(GroupPlayerJoinEvent event) {
//We add 1 because this returns the members of the group excluding the player that just joined. //We add 1 because this returns the members of the group excluding the player that just joined.
int membersSize = event.getGroup().getMembers().size() + 1; int membersSize = event.getGroup().getMembers().size() + 1;
applyStatBonuses(PlayerData.get(event.getPlayer().getPlayer()), membersSize); PartyUtils.applyStatBonuses(PlayerData.get(event.getPlayer().getPlayer()), membersSize);
event.getGroup().getMembers().getOnlinePlayers() event.getGroup().getMembers().getOnlinePlayers()
.forEach(p -> applyStatBonuses(PlayerData.get(p), membersSize)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p), membersSize));
} }
@EventHandler @EventHandler
public void onPlayerLeave(GroupPlayerLeaveEvent event) { public void onPlayerLeave(GroupPlayerLeaveEvent event) {
int membersSize = event.getGroup().getMembers().size(); int membersSize = event.getGroup().getMembers().size();
clearStatBonuses(PlayerData.get(event.getPlayer().getPlayer())); PartyUtils.clearStatBonuses(PlayerData.get(event.getPlayer().getPlayer()));
event.getGroup().getMembers().getOnlinePlayers() event.getGroup().getMembers().getOnlinePlayers()
.forEach(p -> applyStatBonuses(PlayerData.get(p), membersSize)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p), membersSize));
} }
@EventHandler @EventHandler
public void onGroupDisband(GroupDisbandEvent event) { public void onGroupDisband(GroupDisbandEvent event) {
event.getGroup().getMembers().getOnlinePlayers().forEach(p -> clearStatBonuses(PlayerData.get(p))); event.getGroup().getMembers().getOnlinePlayers().forEach(p -> PartyUtils.clearStatBonuses(PlayerData.get(p)));
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
private final PlayerGroup group; private final PlayerGroup group;
public CustomParty(PlayerGroup group) { public CustomParty(PlayerGroup group) {
@ -81,6 +82,5 @@ public class DungeonsXLPartyModule implements PartyModule, Listener {
public int countMembers() { public int countMembers() {
return group.getMembers().getUniqueIds().size(); return group.getMembers().getUniqueIds().size();
} }
} }
} }

View File

@ -0,0 +1,56 @@
package net.Indyuce.mmocore.party.compat;
import com.herocraftonline.heroes.Heroes;
import com.herocraftonline.heroes.characters.Hero;
import com.herocraftonline.heroes.characters.party.HeroParty;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyModule;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class HeroesPartyModule implements PartyModule, Listener {
@Nullable
@Override
public AbstractParty getParty(PlayerData playerData) {
final Hero hero = Heroes.getInstance().getCharacterManager().getHero(playerData.getPlayer());
return hero.getParty() == null ? null : new CustomParty(hero.getParty());
}
private static class CustomParty implements AbstractParty {
private final HeroParty party;
public CustomParty(HeroParty party) {
this.party = party;
}
@Override
public boolean hasMember(@NotNull Player player) {
return party.isPartyMember(player);
}
@Override
public List<PlayerData> getOnlineMembers() {
final List<PlayerData> list = new ArrayList<>();
for (Hero hero : party.getMembers())
try {
list.add(PlayerData.get(hero.getPlayer()));
} catch (Exception ignored) {
}
return list;
}
@Override
public int countMembers() {
return party.getMembers().size();
}
}
}

View File

@ -9,6 +9,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyModule; import net.Indyuce.mmocore.party.PartyModule;
import net.Indyuce.mmocore.party.PartyUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -43,8 +44,8 @@ public class McMMOPartyModule implements PartyModule, Listener {
int membersSize = party.getMembers().size(); int membersSize = party.getMembers().size();
if(membersSize!=1 || party.getOnlineMembers().get(0)!=event.getPlayer()) { if(membersSize!=1 || party.getOnlineMembers().get(0)!=event.getPlayer()) {
party.getOnlineMembers() party.getOnlineMembers()
.forEach(p -> applyStatBonuses(PlayerData.get(p), membersSize+1)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p), membersSize+1));
applyStatBonuses(PlayerData.get(event.getPlayer()), membersSize+1); PartyUtils.applyStatBonuses(PlayerData.get(event.getPlayer()), membersSize+1);
} }
} }
} }
@ -54,13 +55,13 @@ public class McMMOPartyModule implements PartyModule, Listener {
//This is the size of the party before the player leaves=> we decrement it by 1. //This is the size of the party before the player leaves=> we decrement it by 1.
int membersSize = party.getMembers().size() - 1; int membersSize = party.getMembers().size() - 1;
party.getOnlineMembers() party.getOnlineMembers()
.forEach(p -> applyStatBonuses(PlayerData.get(p), membersSize)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p), membersSize));
clearStatBonuses(PlayerData.get(event.getPlayer().getPlayer())); PartyUtils.clearStatBonuses(PlayerData.get(event.getPlayer().getPlayer()));
} }
} }
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
private final Party party; private final Party party;
public CustomParty(Party party) { public CustomParty(Party party) {

View File

@ -0,0 +1,59 @@
package net.Indyuce.mmocore.party.compat;
import io.lumine.mythic.lib.data.SynchronizedDataHolder;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.provided.MMOCorePartyModule;
import net.Indyuce.mmocore.party.provided.Party;
import net.playavalon.mythicdungeons.api.party.IDungeonParty;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.logging.Level;
import java.util.stream.Collectors;
/**
* Used to inject MMOCore party system into MythicDungeons
*/
public class MythicDungeonsPartyInjector extends MMOCorePartyModule {
public MythicDungeonsPartyInjector() {
MMOCore.plugin.getLogger().log(Level.INFO, "Injecting MMOCore party system into MythicDungeons");
}
@Override
public Party newRegisteredParty(PlayerData owner) {
final CustomParty party = new CustomParty(this, owner);
parties.add(party);
party.initDungeonParty(MMOCore.plugin);
return party;
}
private static class CustomParty extends Party implements IDungeonParty {
public CustomParty(MMOCorePartyModule module, PlayerData owner) {
super(module, owner);
}
@Override
public void addPlayer(Player player) {
addMember(PlayerData.get(player));
}
@Override
public void removePlayer(Player player) {
removeMember(PlayerData.get(player));
}
@Override
public List<Player> getPlayers() {
return getMembers().stream().map(SynchronizedDataHolder::getPlayer).collect(Collectors.toList());
}
@NotNull
@Override
public OfflinePlayer getLeader() {
return getOwner().getPlayer();
}
}
}

View File

@ -29,8 +29,7 @@ public class MythicDungeonsPartyModule implements PartyModule, Listener {
return party == null ? null : new CustomParty(party); return party == null ? null : new CustomParty(party);
} }
private static class CustomParty implements AbstractParty {
static class CustomParty implements AbstractParty {
private final MythicParty party; private final MythicParty party;
public CustomParty(MythicParty party) { public CustomParty(MythicParty party) {

View File

@ -3,11 +3,9 @@ package net.Indyuce.mmocore.party.compat;
import com.civious.obteam.mechanics.Team; import com.civious.obteam.mechanics.Team;
import com.civious.obteam.mechanics.TeamManager; import com.civious.obteam.mechanics.TeamManager;
import com.civious.obteam.mechanics.TeamMember; import com.civious.obteam.mechanics.TeamMember;
import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyModule; import net.Indyuce.mmocore.party.PartyModule;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -23,8 +21,7 @@ public class OBTeamPartyModule implements PartyModule, Listener {
final @Nullable Team team = TeamManager.getInstance().getTeam(playerData.getPlayer()); final @Nullable Team team = TeamManager.getInstance().getTeam(playerData.getPlayer());
return team == null ? null : new CustomParty(team); return team == null ? null : new CustomParty(team);
} }
private static class CustomParty implements AbstractParty {
class CustomParty implements AbstractParty {
private final Team team; private final Team team;
public CustomParty(Team team) { public CustomParty(Team team) {

View File

@ -22,7 +22,7 @@ public class PAFPartyModule implements PartyModule {
return party == null ? null : new CustomParty(party); return party == null ? null : new CustomParty(party);
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
private final PlayerParty party; private final PlayerParty party;
public CustomParty(PlayerParty party) { public CustomParty(PlayerParty party) {

View File

@ -22,7 +22,7 @@ public class PAFProxyPartyModule implements PartyModule {
return party == null ? null : new CustomParty(party); return party == null ? null : new CustomParty(party);
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
private final PlayerParty party; private final PlayerParty party;
public CustomParty(PlayerParty party) { public CustomParty(PlayerParty party) {

View File

@ -10,6 +10,7 @@ import net.Indyuce.mmocore.MMOCore;
import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.player.PlayerData;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyModule; import net.Indyuce.mmocore.party.PartyModule;
import net.Indyuce.mmocore.party.PartyUtils;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -39,18 +40,18 @@ public class PartiesPartyModule implements PartyModule, Listener {
public void onPlayerJoin(BukkitPartiesPlayerPostJoinEvent event) { public void onPlayerJoin(BukkitPartiesPlayerPostJoinEvent event) {
int membersSize = event.getParty().getMembers().size(); int membersSize = event.getParty().getMembers().size();
event.getParty().getOnlineMembers() event.getParty().getOnlineMembers()
.forEach(p -> applyStatBonuses(PlayerData.get(p.getPlayerUUID()), membersSize)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p.getPlayerUUID()), membersSize));
} }
@EventHandler @EventHandler
public void onPlayerLeave(BukkitPartiesPlayerPostLeaveEvent event) { public void onPlayerLeave(BukkitPartiesPlayerPostLeaveEvent event) {
int membersSize = event.getParty().getMembers().size(); int membersSize = event.getParty().getMembers().size();
clearStatBonuses(PlayerData.get(event.getPartyPlayer().getPlayerUUID())); PartyUtils.clearStatBonuses(PlayerData.get(event.getPartyPlayer().getPlayerUUID()));
event.getParty().getOnlineMembers() event.getParty().getOnlineMembers()
.forEach(p -> applyStatBonuses(PlayerData.get(p.getPlayerUUID()), membersSize)); .forEach(p -> PartyUtils.applyStatBonuses(PlayerData.get(p.getPlayerUUID()), membersSize));
} }
class CustomParty implements AbstractParty { private static class CustomParty implements AbstractParty {
private final Party party; private final Party party;
public CustomParty(Party party) { public CustomParty(Party party) {

View File

@ -9,13 +9,14 @@ import org.bukkit.Bukkit;
import java.util.*; import java.util.*;
public class MMOCorePartyModule implements PartyModule { public class MMOCorePartyModule implements PartyModule {
private final Set<Party> parties = new HashSet<>(); protected final Set<Party> parties = new HashSet<>();
private final Map<UUID, Party> playerParties = new HashMap<>(); protected final Map<UUID, Party> playerParties = new HashMap<>();
public MMOCorePartyModule() { public MMOCorePartyModule() {
Bukkit.getPluginManager().registerEvents(new PartyListener(this), MMOCore.plugin); Bukkit.getPluginManager().registerEvents(new PartyListener(this), MMOCore.plugin);
} }
@Deprecated
public void registerParty(Party party) { public void registerParty(Party party) {
parties.add(party); parties.add(party);
} }
@ -24,8 +25,8 @@ public class MMOCorePartyModule implements PartyModule {
* Creates and registers a new party with given owner * Creates and registers a new party with given owner
*/ */
public Party newRegisteredParty(PlayerData owner) { public Party newRegisteredParty(PlayerData owner) {
Party party = new Party(this, owner); final Party party = new Party(this, owner);
registerParty(party); parties.add(party);
return party; return party;
} }

View File

@ -10,6 +10,7 @@ import net.Indyuce.mmocore.gui.api.PluginInventory;
import net.Indyuce.mmocore.gui.social.party.EditablePartyView; import net.Indyuce.mmocore.gui.social.party.EditablePartyView;
import net.Indyuce.mmocore.manager.InventoryManager; import net.Indyuce.mmocore.manager.InventoryManager;
import net.Indyuce.mmocore.party.AbstractParty; import net.Indyuce.mmocore.party.AbstractParty;
import net.Indyuce.mmocore.party.PartyUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -107,8 +108,8 @@ public class Party implements AbstractParty {
members.remove(data); members.remove(data);
module.setParty(data, null); module.setParty(data, null);
module.clearStatBonuses(data); PartyUtils.clearStatBonuses(data);
members.forEach(member -> module.applyStatBonuses(member, members.size())); members.forEach(member -> PartyUtils.applyStatBonuses(member, members.size()));
updateOpenInventories(); updateOpenInventories();
// Disband the party if no member left // Disband the party if no member left
@ -132,7 +133,7 @@ public class Party implements AbstractParty {
module.setParty(data, this); module.setParty(data, this);
members.add(data); members.add(data);
members.forEach(member -> module.applyStatBonuses(member, members.size())); members.forEach(member -> PartyUtils.applyStatBonuses(member, members.size()));
updateOpenInventories(); updateOpenInventories();
} }