From 35577906bd6613c720dea7254f58d25a4b1ef2cb Mon Sep 17 00:00:00 2001 From: GeminiAntigravityCLI Date: Thu, 20 Aug 2026 21:33:24 +0200 Subject: [PATCH] feat: Add PlaceholderAPI expansion with guild placeholders for TAB and EssentialsChat --- build.gradle.kts | 4 + src/main/java/fr/luc/gamingcore/Main.java | 6 + .../hook/GamingCorePlaceholderExpansion.java | 133 ++++++++++++++++++ src/main/resources/plugin.yml | 2 + 4 files changed, 145 insertions(+) create mode 100644 src/main/java/fr/luc/gamingcore/hook/GamingCorePlaceholderExpansion.java diff --git a/build.gradle.kts b/build.gradle.kts index d941e9a..bc05077 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,6 +13,7 @@ repositories { maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") maven("https://oss.sonatype.org/content/groups/public/") maven("https://maven.enginehub.org/repo/") + maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") maven("https://jitpack.io") } @@ -20,6 +21,9 @@ dependencies { // Paper API (1.20.4) compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") + // PlaceholderAPI + compileOnly("me.clip:placeholderapi:2.11.5") + // WorldGuard & WorldEdit APIs compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9") compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.0") diff --git a/src/main/java/fr/luc/gamingcore/Main.java b/src/main/java/fr/luc/gamingcore/Main.java index f6f0b01..bd494f9 100644 --- a/src/main/java/fr/luc/gamingcore/Main.java +++ b/src/main/java/fr/luc/gamingcore/Main.java @@ -80,6 +80,12 @@ public final class Main extends JavaPlugin { pm.registerEvents(new fr.luc.gamingcore.listener.GuildChatListener(this), this); pm.registerEvents(new fr.luc.gamingcore.listener.NametagListener(this), this); + // 9. Initialiser l'expansion PlaceholderAPI si présente + if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + new fr.luc.gamingcore.hook.GamingCorePlaceholderExpansion(this).register(); + getLogger().info("Expansion PlaceholderAPI (GamingCore) enregistree avec succes !"); + } + getLogger().info("GamingCore (Système de Guilde - Cœur Métier & Commandes) a ete active avec succes !"); } diff --git a/src/main/java/fr/luc/gamingcore/hook/GamingCorePlaceholderExpansion.java b/src/main/java/fr/luc/gamingcore/hook/GamingCorePlaceholderExpansion.java new file mode 100644 index 0000000..7252b78 --- /dev/null +++ b/src/main/java/fr/luc/gamingcore/hook/GamingCorePlaceholderExpansion.java @@ -0,0 +1,133 @@ +package fr.luc.gamingcore.hook; + +import fr.luc.gamingcore.Main; +import fr.luc.gamingcore.manager.GuildManager; +import fr.luc.gamingcore.model.Guild; +import fr.luc.gamingcore.model.GuildMember; +import fr.luc.gamingcore.model.GuildRank; +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Expansion PlaceholderAPI pour GamingCore. + * Expose les données des guildes (tag, couleur, nom, rang, banque, claims) + * aux plugins tiers comme TAB, EssentialsChat, DecentHolograms, etc. + */ +public class GamingCorePlaceholderExpansion extends PlaceholderExpansion { + + private final Main plugin; + private final GuildManager guildManager; + + /** + * Constructeur de l'expansion PlaceholderAPI. + * + * @param plugin Instance principale du plugin. + */ + public GamingCorePlaceholderExpansion(Main plugin) { + this.plugin = plugin; + this.guildManager = plugin.getGuildManager(); + } + + @Override + public @NotNull String getIdentifier() { + return "gamingcore"; + } + + @Override + public @NotNull String getAuthor() { + return "Luc"; + } + + @Override + public @NotNull String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public boolean persist() { + return true; + } + + @Override + public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) { + if (player == null) { + return ""; + } + + Guild guild = guildManager.getGuildByPlayer(player.getUniqueId()); + + // Placeholders de vérification + if (params.equalsIgnoreCase("has_guild")) { + return guild != null ? "true" : "false"; + } + + if (guild == null) { + if (params.equalsIgnoreCase("guild_tag") || params.equalsIgnoreCase("tag") || + params.equalsIgnoreCase("guild_name") || params.equalsIgnoreCase("guild") || + params.equalsIgnoreCase("guild_formatted_tag") || params.equalsIgnoreCase("guild_chat_tag") || + params.equalsIgnoreCase("guild_rank") || params.equalsIgnoreCase("rank")) { + return ""; + } + if (params.equalsIgnoreCase("guild_color") || params.equalsIgnoreCase("color")) { + return "#FFFFFF"; + } + return ""; + } + + GuildMember member = guild.getMember(player.getUniqueId()); + GuildRank rank = member != null ? guild.getRank(member.getRankId()) : null; + String rankName = rank != null ? rank.getName() : "Membre"; + int rankPriority = rank != null ? rank.getPriority() : 1; + + switch (params.toLowerCase()) { + case "guild": + case "guild_name": + case "name": + return guild.getName(); + + case "guild_tag": + case "tag": + return guild.getTag(); + + case "guild_tag_brackets": + return "[" + guild.getTag() + "]"; + + case "guild_color": + case "color": + return guild.getColor(); + + case "guild_formatted_tag": + case "formatted_tag": + // Format HEX compatible TAB et EssentialsChat (ex: �C9FF[VAL]&r ) + return "&" + guild.getColor() + "[" + guild.getTag() + "]&r "; + + case "guild_chat_tag": + case "chat_tag": + return "&" + guild.getColor() + "[" + guild.getTag() + "]&r "; + + case "guild_rank": + case "rank": + return rankName; + + case "guild_rank_priority": + return String.valueOf(rankPriority); + + case "guild_balance": + case "balance": + return guildManager.getEconomyManager().format(guild.getBalance()); + + case "guild_claims": + case "claims": + return String.valueOf(guild.getClaimCount()); + + case "guild_members": + case "members": + return String.valueOf(guild.getMemberCount()); + + default: + return null; + } + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 691c15d..cd89277 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -11,3 +11,5 @@ softdepend: - WorldEdit - Essentials - EssentialsX + - PlaceholderAPI + - TAB