diff --git a/pom.xml b/pom.xml index 4d0c568..280ab33 100644 --- a/pom.xml +++ b/pom.xml @@ -112,6 +112,10 @@ bg-repo https://repo.bg-software.com/repository/api/ + + codemc-repo + https://repo.codemc.org/repository/maven-public + @@ -225,5 +229,11 @@ ${basedir}/libs/SaberFactions.jar system + + net.sacredlabyrinth.phaed.simpleclans + SimpleClans + 2.15.2 + provided + \ No newline at end of file diff --git a/src/fr/maxlego08/koth/KothManager.java b/src/fr/maxlego08/koth/KothManager.java index e8c5880..211e6d5 100644 --- a/src/fr/maxlego08/koth/KothManager.java +++ b/src/fr/maxlego08/koth/KothManager.java @@ -20,6 +20,7 @@ import fr.maxlego08.koth.zcore.utils.storage.Persist; import fr.maxlego08.koth.zcore.utils.storage.Savable; import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.command.CommandSender; @@ -55,10 +56,12 @@ public class KothManager extends ZUtils implements Savable { for (TeamPlugin value : TeamPlugin.values()) { if (value.isEnable()) { - kothTeam = value.init(plugin); + this.kothTeam = value.init(plugin); Logger.info("Register " + value.getPluginName() + " team implementation.", Logger.LogType.INFO); } } + + Bukkit.getPluginManager().registerEvents(this.kothTeam, plugin); } @Override diff --git a/src/fr/maxlego08/koth/hook/TeamPlugin.java b/src/fr/maxlego08/koth/hook/TeamPlugin.java index d53e09c..1d9d43d 100644 --- a/src/fr/maxlego08/koth/hook/TeamPlugin.java +++ b/src/fr/maxlego08/koth/hook/TeamPlugin.java @@ -6,6 +6,7 @@ import fr.maxlego08.koth.hook.teams.BetterTeamHook; import fr.maxlego08.koth.hook.teams.HuskTownHook; import fr.maxlego08.koth.hook.teams.LandHook; import fr.maxlego08.koth.hook.teams.SaberFactionHook; +import fr.maxlego08.koth.hook.teams.SimpleClanHook; import fr.maxlego08.koth.hook.teams.SuperiorSkyblock2Hook; import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; @@ -19,6 +20,7 @@ public enum TeamPlugin { SUPERIORSKYBLOCK("SuperiorSkyblock2", SuperiorSkyblock2Hook.class), BETTERTEAMS("BetterTeams", BetterTeamHook.class), FACTIONS("Factions", SaberFactionHook.class), + SIMPLECLANS("SimpleClans", SimpleClanHook.class), ; diff --git a/src/fr/maxlego08/koth/hook/teams/SimpleClanHook.java b/src/fr/maxlego08/koth/hook/teams/SimpleClanHook.java new file mode 100644 index 0000000..3a02c84 --- /dev/null +++ b/src/fr/maxlego08/koth/hook/teams/SimpleClanHook.java @@ -0,0 +1,66 @@ +package fr.maxlego08.koth.hook.teams; + +import fr.maxlego08.koth.KothPlugin; +import fr.maxlego08.koth.api.KothTeam; +import net.sacredlabyrinth.phaed.simpleclans.Clan; +import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer; +import net.sacredlabyrinth.phaed.simpleclans.SimpleClans; +import net.sacredlabyrinth.phaed.simpleclans.events.DisbandClanEvent; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class SimpleClanHook implements KothTeam { + + private final KothPlugin plugin; + private final SimpleClans clan; + + public SimpleClanHook(KothPlugin plugin) { + this.plugin = plugin; + this.clan = (SimpleClans) Bukkit.getServer().getPluginManager().getPlugin("SimpleClans"); + } + + private Optional getClan(Player player) { + ClanPlayer clanPlayer = this.clan.getClanManager().getClanPlayer(player); + if (clanPlayer == null) return Optional.empty(); + return Optional.ofNullable(clanPlayer.getClan()); + } + + @Override + public String getTeamName(Player player) { + Optional optional = getClan(player); + return optional.isPresent() ? optional.get().getName() : player.getName(); + } + + @Override + public List getOnlinePlayer(Player player) { + Optional optional = getClan(player); + return optional.map(value -> value.getOnlineMembers().stream().map(e -> Bukkit.getOfflinePlayer(e.getUniqueId())) + .filter(OfflinePlayer::isOnline).map(OfflinePlayer::getPlayer).collect(Collectors.toList())).orElseGet(() -> Collections.singletonList(player)); + } + + @Override + public String getLeaderName(Player player) { + Optional optional = getClan(player); + if (!optional.isPresent()) return player.getName(); + Clan clan = optional.get(); + return clan.getMembers().stream().filter(e -> clan.isLeader(e.getUniqueId())).findFirst().map(ClanPlayer::getName).orElseGet(player::getName); + } + + @Override + public String getTeamId(Player player) { + Optional optional = getClan(player); + return optional.isPresent() ? optional.get().getName() : player.getUniqueId().toString(); + } + + @EventHandler + public void onClan(DisbandClanEvent event) { + this.plugin.getStorageManager().onTeamDisband(event.getClan().getName()); + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c65c9fd..f113724 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -59,6 +59,7 @@ # - BetterTeams # - SaberFaction # - FactionUUID +# - SimpleClan # # Need scheduler ? Use zScheduler: https://www.spigotmc.org/resources/zschedulers.112705/ #