feat: Add PlaceholderAPI expansion with guild placeholders for TAB and EssentialsChat

This commit is contained in:
2026-08-20 21:33:24 +02:00
parent 56231af30d
commit 35577906bd
4 changed files with 145 additions and 0 deletions
+4
View File
@@ -13,6 +13,7 @@ repositories {
maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
maven("https://oss.sonatype.org/content/groups/public/") maven("https://oss.sonatype.org/content/groups/public/")
maven("https://maven.enginehub.org/repo/") maven("https://maven.enginehub.org/repo/")
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
maven("https://jitpack.io") maven("https://jitpack.io")
} }
@@ -20,6 +21,9 @@ dependencies {
// Paper API (1.20.4) // Paper API (1.20.4)
compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT") compileOnly("io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT")
// PlaceholderAPI
compileOnly("me.clip:placeholderapi:2.11.5")
// WorldGuard & WorldEdit APIs // WorldGuard & WorldEdit APIs
compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9") compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9")
compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.0") compileOnly("com.sk89q.worldedit:worldedit-bukkit:7.3.0")
@@ -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.GuildChatListener(this), this);
pm.registerEvents(new fr.luc.gamingcore.listener.NametagListener(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 !"); getLogger().info("GamingCore (Système de Guilde - Cœur Métier & Commandes) a ete active avec succes !");
} }
@@ -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: &#00C9FF[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;
}
}
}
+2
View File
@@ -11,3 +11,5 @@ softdepend:
- WorldEdit - WorldEdit
- Essentials - Essentials
- EssentialsX - EssentialsX
- PlaceholderAPI
- TAB