From b56c94cc47310566aadce802bd8293e26702d813 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Fri, 13 Nov 2020 10:19:18 +0000 Subject: [PATCH] Added intial support for placeholders --- Plugin/pom.xml | 16 ++++++ .../ecoenchants/enchantments/EcoEnchant.java | 31 +++++++++++ .../enchantments/util/Callback.java | 6 --- .../enchantments/util/SpellRunnable.java | 9 ++-- .../placeholder/PlaceholderEntry.java | 22 ++++++++ .../placeholder/PlaceholderIntegration.java | 7 +++ .../placeholder/PlaceholderManager.java | 29 +++++++++++ .../plugins/PlaceholderIntegrationPAPI.java | 52 +++++++++++++++++++ .../com/willfp/ecoenchants/loader/Loader.java | 9 ++++ .../com/willfp/ecoenchants/util/Callable.java | 6 +++ .../ecoenchants/util/ObjectCallable.java | 6 +++ pom.xml | 4 ++ 12 files changed, 187 insertions(+), 10 deletions(-) delete mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Callback.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/util/Callable.java create mode 100644 Plugin/src/main/java/com/willfp/ecoenchants/util/ObjectCallable.java diff --git a/Plugin/pom.xml b/Plugin/pom.xml index 54c5594b..a895f5f8 100644 --- a/Plugin/pom.xml +++ b/Plugin/pom.xml @@ -259,5 +259,21 @@ 1.16.3-R0.1-SNAPSHOT provided + + me.clip + placeholderapi + 2.10.9 + provided + + + com.mojang + brigadier + + + com.tealcube.minecraft.bukkit + fanciful + + + 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 f9ca8018..3de39240 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -5,6 +5,8 @@ import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.config.configs.EnchantmentConfig; import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import com.willfp.ecoenchants.enchantments.util.Watcher; +import com.willfp.ecoenchants.integrations.placeholder.PlaceholderEntry; +import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager; import com.willfp.ecoenchants.util.StringUtils; import com.willfp.ecoenchants.util.interfaces.Registerable; import com.willfp.ecoenchants.util.optional.Prerequisite; @@ -99,6 +101,7 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist target.addAll(config.getTargets()); target.forEach(enchantmentTarget -> targetMaterials.addAll(enchantmentTarget.getMaterials())); enabled = config.getBool("enabled", true); + this.updatePlaceholders(); this.register(); } @@ -143,6 +146,34 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist EcoEnchants.removeEcoEnchant(this); } + private void updatePlaceholders() { + if(this.getConfig().config.get(EcoEnchants.CONFIG_LOCATION + "chance-per-level") != null) { + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "chance_per_level", (player) -> { + return String.valueOf(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")); + }) + ); + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "chance_per_level_percentage", (player) -> { + return String.valueOf(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level") * 100); + }) + ); + } + + if(this.getConfig().config.get(EcoEnchants.CONFIG_LOCATION + "multiplier") != null) { + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "multiplier", (player) -> { + return String.valueOf(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier")); + }) + ); + PlaceholderManager.registerPlaceholder( + new PlaceholderEntry(this.getPermissionName() + "_" + "multiplier_percentage", (player) -> { + return String.valueOf(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier") * 100); + }) + ); + } + } + /** * Get if enchantment can be removed in grindstone * @return Whether the enchantment can be removed diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Callback.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Callback.java deleted file mode 100644 index 40ca8da5..00000000 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Callback.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.willfp.ecoenchants.enchantments.util; - -@FunctionalInterface -public interface Callback { - void call(); -} diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/SpellRunnable.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/SpellRunnable.java index 121df2e8..302a398d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/SpellRunnable.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/SpellRunnable.java @@ -1,6 +1,7 @@ package com.willfp.ecoenchants.enchantments.util; import com.willfp.ecoenchants.enchantments.itemtypes.Spell; +import com.willfp.ecoenchants.util.Callable; import org.bukkit.entity.Player; import java.util.UUID; @@ -9,7 +10,7 @@ public class SpellRunnable { private final UUID player; private final Spell spell; private long endTime = 0; - private Callback callback = () -> {}; + private Callable callable = () -> {}; public SpellRunnable(Player player, Spell spell) { this.player = player.getUniqueId(); @@ -21,7 +22,7 @@ public class SpellRunnable { } public void run() { - callback.call(); + callable.call(); updateEndTime(); } @@ -33,7 +34,7 @@ public class SpellRunnable { endTime = System.currentTimeMillis() + (spell.getCooldownTime()*1000); } - public void setTask(Callback callback) { - this.callback = callback; + public void setTask(Callable callable) { + this.callable = callable; } } 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 new file mode 100644 index 00000000..2389d17d --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderEntry.java @@ -0,0 +1,22 @@ +package com.willfp.ecoenchants.integrations.placeholder; + +import com.willfp.ecoenchants.util.ObjectCallable; +import org.bukkit.entity.Player; + +public class PlaceholderEntry { + private final String identifier; + private final ObjectCallable function; + + public PlaceholderEntry(String identifier, ObjectCallable function) { + this.identifier = identifier; + this.function = function; + } + + public String getIdentifier() { + return this.identifier; + } + + public String getResult(Player player) { + return this.function.call(player); + } +} 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 new file mode 100644 index 00000000..18b1f4ec --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderIntegration.java @@ -0,0 +1,7 @@ +package com.willfp.ecoenchants.integrations.placeholder; + +import com.willfp.ecoenchants.integrations.Integration; + +public interface PlaceholderIntegration extends Integration { + void registerIntegration(); +} 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 new file mode 100644 index 00000000..f4805dd9 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/PlaceholderManager.java @@ -0,0 +1,29 @@ +package com.willfp.ecoenchants.integrations.placeholder; + +import org.bukkit.entity.Player; + +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; + +public class PlaceholderManager { + private static final Set placeholders = new HashSet<>(); + + public static void addIntegration(PlaceholderIntegration integration) { + integration.registerIntegration(); + } + + public static void registerPlaceholder(PlaceholderEntry expansion) { + placeholders.removeIf(placeholderEntry -> placeholderEntry.getIdentifier().equalsIgnoreCase(expansion.getIdentifier())); + placeholders.add(expansion); + } + + 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; + } + } +} 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 new file mode 100644 index 00000000..a3445e59 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/integrations/placeholder/plugins/PlaceholderIntegrationPAPI.java @@ -0,0 +1,52 @@ +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.expansion.PlaceholderExpansion; +import org.bukkit.entity.Player; + +public class PlaceholderIntegrationPAPI extends PlaceholderExpansion implements PlaceholderIntegration { + @Override + public boolean persist() { + return true; + } + + @Override + public boolean canRegister() { + return true; + } + + @Override + public String getAuthor() { + return "Auxilor"; + } + + @Override + public String getIdentifier() { + return "ecoenchants"; + } + + @Override + public String getVersion() { + return EcoEnchantsPlugin.getInstance().getDescription().getVersion(); + } + + @Override + public String onPlaceholderRequest(Player player, String identifier) { + if(player == null) + return ""; + + return PlaceholderManager.getResult(player, identifier); + } + + @Override + public void registerIntegration() { + this.register(); + } + + @Override + public String getPluginName() { + return "PlaceholderAPI"; + } +} diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java b/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java index 332827a6..4390c1e6 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java @@ -42,6 +42,8 @@ import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefTowny; import com.willfp.ecoenchants.integrations.antigrief.plugins.AntigriefWorldGuard; import com.willfp.ecoenchants.integrations.essentials.EssentialsManager; import com.willfp.ecoenchants.integrations.essentials.plugins.IntegrationEssentials; +import com.willfp.ecoenchants.integrations.placeholder.PlaceholderManager; +import com.willfp.ecoenchants.integrations.placeholder.plugins.PlaceholderIntegrationPAPI; import com.willfp.ecoenchants.listeners.ArrowListeners; import com.willfp.ecoenchants.listeners.PlayerJoinListener; import com.willfp.ecoenchants.nms.BlockBreak; @@ -419,6 +421,13 @@ public class Loader { Logger.info("Spartan: §9DISABLED"); } + if(Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) { + PlaceholderManager.addIntegration(new PlaceholderIntegrationPAPI()); + Logger.info("PlaceholderAPI: §aENABLED"); + } else { + Logger.info("PlaceholderAPI: §9DISABLED"); + } + /* Check for paper diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/Callable.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/Callable.java new file mode 100644 index 00000000..41e3bedc --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/Callable.java @@ -0,0 +1,6 @@ +package com.willfp.ecoenchants.util; + +@FunctionalInterface +public interface Callable { + void call(); +} diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/ObjectCallable.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/ObjectCallable.java new file mode 100644 index 00000000..8a070453 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/ObjectCallable.java @@ -0,0 +1,6 @@ +package com.willfp.ecoenchants.util; + +@FunctionalInterface +public interface ObjectCallable { + A call(B object); +} diff --git a/pom.xml b/pom.xml index f6c9498a..1278f42f 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,10 @@ papermc https://papermc.io/repo/repository/maven-public/ + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ +