diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java index f1ec204d..95c472f4 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -178,7 +178,7 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist PlaceholderManager.registerPlaceholder( new PlaceholderEntry(this.getPermissionName() + "_" + "cooldown", (player) -> { return String.valueOf(Spell.getCooldown((Spell) this, player)); - }) + }, true) ); PlaceholderManager.registerPlaceholder( new PlaceholderEntry(this.getPermissionName() + "_" + "cooldown_total", (player) -> { diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java index 2389d17d..dec63448 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java @@ -6,10 +6,16 @@ import org.bukkit.entity.Player; public class PlaceholderEntry { private final String identifier; private final ObjectCallable function; + private final boolean requiresPlayer; public PlaceholderEntry(String identifier, ObjectCallable function) { + this(identifier, function, false); + } + + public PlaceholderEntry(String identifier, ObjectCallable function, boolean requiresPlayer) { this.identifier = identifier; this.function = function; + this.requiresPlayer = requiresPlayer; } public String getIdentifier() { diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java index 18b1f4ec..b1dbbed0 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java @@ -1,7 +1,9 @@ package com.willfp.ecoenchants.integrations.placeholder; import com.willfp.ecoenchants.integrations.Integration; +import org.bukkit.entity.Player; public interface PlaceholderIntegration extends Integration { void registerIntegration(); + String translate(String text, Player player); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java index f4805dd9..a901c250 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java @@ -5,12 +5,15 @@ import org.bukkit.entity.Player; import java.util.HashSet; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; public class PlaceholderManager { private static final Set placeholders = new HashSet<>(); + private static final Set integrations = new HashSet<>(); public static void addIntegration(PlaceholderIntegration integration) { integration.registerIntegration(); + integrations.add(integration); } public static void registerPlaceholder(PlaceholderEntry expansion) { @@ -20,10 +23,12 @@ public class PlaceholderManager { public static String getResult(Player player, String identifier) { Optional matching = placeholders.stream().filter(expansion -> expansion.getIdentifier().equalsIgnoreCase(identifier)).findFirst(); - if(matching.isPresent()) { - return matching.get().getResult(player); - } else { - return null; - } + return matching.map(placeholderEntry -> placeholderEntry.getResult(player)).orElse(null); + } + + public static String translatePlaceholders(String text, Player player) { + AtomicReference translatedReference = new AtomicReference<>(text); + integrations.forEach(placeholderIntegration -> translatedReference.set(placeholderIntegration.translate(translatedReference.get(), player))); + return translatedReference.get(); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java index a3445e59..945c10a8 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java @@ -3,9 +3,12 @@ package com.willfp.ecoenchants.integrations.placeholder.plugins; import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.integrations.placeholder.PlaceholderIntegration; import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager; +import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.expansion.PlaceholderExpansion; import org.bukkit.entity.Player; +import javax.annotation.PostConstruct; + public class PlaceholderIntegrationPAPI extends PlaceholderExpansion implements PlaceholderIntegration { @Override public boolean persist() { @@ -49,4 +52,9 @@ public class PlaceholderIntegrationPAPI extends PlaceholderExpansion implements public String getPluginName() { return "PlaceholderAPI"; } + + @Override + public String translate(String text, Player player) { + return PlaceholderAPI.setPlaceholders(player, text); + } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/StringUtils.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/StringUtils.java index ae3a8b38..bc9ca3bb 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/util/StringUtils.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/StringUtils.java @@ -1,6 +1,9 @@ package com.willfp.ecoenchants.util; +import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager; import net.md_5.bungee.api.ChatColor; +import org.bukkit.entity.Player; +import scala.runtime.Static; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -8,7 +11,17 @@ import java.util.regex.Pattern; import static net.md_5.bungee.api.ChatColor.COLOR_CHAR; public class StringUtils { - public static String translate(String message){ + public static String translate(String message, Player player) { + message = PlaceholderManager.translatePlaceholders(message, player); + message = translateHexColorCodes("&#", "", message); + message = ChatColor.translateAlternateColorCodes('&', message); + return ChatColor.translateAlternateColorCodes('&', translateHexColorCodes("&#", "", message)); + } + + public static String translate(String message) { + message = PlaceholderManager.translatePlaceholders(message, null); + message = translateHexColorCodes("&#", "", message); + message = ChatColor.translateAlternateColorCodes('&', message); return ChatColor.translateAlternateColorCodes('&', translateHexColorCodes("&#", "", message)); }