diff --git a/build.gradle.kts b/build.gradle.kts index 095f229..f3b3741 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,10 +15,12 @@ java { repositories { maven("https://repo.purpurmc.org/snapshots/") + maven("https://repo.extendedclip.com/content/repositories/placeholderapi/") } dependencies { paperweight.paperDevBundle("1.20.1-R0.1-SNAPSHOT", "org.purpurmc.purpur") + compileOnly("me.clip:placeholderapi:2.11.3") } tasks { diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java index 91e742f..817086f 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/NotJustNameplates.java @@ -20,10 +20,13 @@ public final class NotJustNameplates extends JavaPlugin { private final TeamManager teamManager = new TeamManager(); private NameplateManager nameplateManager = null; + private static boolean papiHook = false; + @Override public void onEnable() { instance = this; config = new NJNConfig(this); + papiHook = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI"); DefaultPermissions.registerPermission("notjustnameplates.seeown", "Allows a player to see their own nameplate", PermissionDefault.FALSE); DefaultPermissions.registerPermission("notjustnameplates.command", "Allows a player to use the /njn command", PermissionDefault.TRUE); @@ -52,6 +55,7 @@ public final class NotJustNameplates extends JavaPlugin { public void reloadPluginConfig() { config = new NJNConfig(this); + papiHook = Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null && Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI"); nameplateManager.reloadNameplates(); updateNameplatesBasedOnPermission(); } @@ -92,4 +96,8 @@ public final class NotJustNameplates extends JavaPlugin { return config; } + public static boolean isPapiHooked() { + return papiHook; + } + } diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java b/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java new file mode 100644 index 0000000..6061725 --- /dev/null +++ b/src/main/java/me/youhavetrouble/notjustnameplates/hooks/PAPIHook.java @@ -0,0 +1,19 @@ +package me.youhavetrouble.notjustnameplates.hooks; + +import me.clip.placeholderapi.PlaceholderAPI; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextReplacementConfig; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.bukkit.OfflinePlayer; + +public class PAPIHook { + + public static Component setPlaceholders(Component component, OfflinePlayer offlinePlayer) { + component = component.replaceText(TextReplacementConfig.builder() + .match(PlaceholderAPI.getPlaceholderPattern()) + .replacement((matchResult, builder) -> LegacyComponentSerializer.legacyAmpersand().deserialize(PlaceholderAPI.setPlaceholders(offlinePlayer, matchResult.group(0)))) + .build()); + return component; + } + +} diff --git a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java index b3280cd..719574b 100644 --- a/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java +++ b/src/main/java/me/youhavetrouble/notjustnameplates/nameplates/Nameplate.java @@ -2,6 +2,7 @@ package me.youhavetrouble.notjustnameplates.nameplates; import me.youhavetrouble.notjustnameplates.NotJustNameplates; import me.youhavetrouble.notjustnameplates.displays.DisplayContent; +import me.youhavetrouble.notjustnameplates.hooks.PAPIHook; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; @@ -167,6 +168,10 @@ public class Nameplate { if (player == null || !player.isOnline()) return component; + if (NotJustNameplates.isPapiHooked()) { + component = PAPIHook.setPlaceholders(component, player); + } + component = component.replaceText(builder -> { builder.matchLiteral("%displayname%"); builder.replacement(player.displayName()); diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index cb67766..edb9703 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -5,3 +5,6 @@ api-version: "1.20" authors: ["YouHaveTrouble"] description: Nameplates using display entities website: https://youhavetrouble.me +dependencies: + - name: PlaceholderAPI + required: false