From e8664544a3b8cfd411954b6967e47558f37584b5 Mon Sep 17 00:00:00 2001 From: efe Date: Mon, 3 Jun 2024 14:08:32 +0300 Subject: [PATCH 1/2] placeholder abstraction --- .../placeholder/EmptyPlaceholder.java | 17 ++++ .../services/placeholder/Placeholder.java | 20 +++++ .../services/placeholder/Placeholders.java | 61 +++++++++++++ plugin/pom.xml | 8 ++ .../main/java/de/minebench/tresor/Tresor.java | 2 + providers/placeholderapi/pom.xml | 32 +++++++ .../PlaceholderAPIExpansion.java | 35 ++++++++ .../PlaceholderAPIPlaceholders.java | 86 +++++++++++++++++++ providers/pom.xml | 3 + 9 files changed, 264 insertions(+) create mode 100644 api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java create mode 100644 api/src/main/java/de/minebench/tresor/services/placeholder/Placeholder.java create mode 100644 api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java create mode 100644 providers/placeholderapi/pom.xml create mode 100644 providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIExpansion.java create mode 100644 providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java diff --git a/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java b/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java new file mode 100644 index 0000000..1f41b2c --- /dev/null +++ b/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java @@ -0,0 +1,17 @@ +package de.minebench.tresor.services.placeholder; + +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +public class EmptyPlaceholder implements Placeholder { + + @Override + public String getKey() { + return ""; + } + + @Override + public String request(OfflinePlayer player) { + return "N/A"; + } +} diff --git a/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholder.java b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholder.java new file mode 100644 index 0000000..99a27d0 --- /dev/null +++ b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholder.java @@ -0,0 +1,20 @@ +package de.minebench.tresor.services.placeholder; + +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +public interface Placeholder { + + /** + * Get the key of the placeholder + * @return The key + */ + String getKey(); + + /** + * Request the value of the placeholder + * @param player The player to request the value for + * @return The value + */ + String request(final OfflinePlayer player); +} diff --git a/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java new file mode 100644 index 0000000..7b8e78c --- /dev/null +++ b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java @@ -0,0 +1,61 @@ +package de.minebench.tresor.services.placeholder; + +import de.minebench.tresor.services.TresorServiceProvider; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public interface Placeholders extends TresorServiceProvider { + + /** + * Get all registered placeholders + * @return The placeholders + */ + Map getRegisteredPlaceholders(); + + /** + * Get a placeholder by its key + * @param key The key of the placeholder + * @return The placeholder + */ + Placeholder getPlaceholder(final String key); + + /** + * Register a placeholder + * @param placeholder The placeholder to register + */ + void add(final Placeholder placeholder); + + /** + * Replace placeholders in a string + * @param player The player to replace the placeholders for + * @param text The text to replace the placeholders in + * @return The text with replaced placeholders + */ + String replace(final Player player, final String text); + + default List replace(final Player player, final List text){ + return text + .stream() + .map(line -> replace(player, line)) + .collect(Collectors.toList()); + } + + /** + * Register placeholders into placeholder plugin + */ + void hook(); + + /** + * Request the value of the placeholder + * @param player The player to request the value for + * @param params The parameters for the placeholder + * @return The value + */ + String request(final OfflinePlayer player, final String params); + +} diff --git a/plugin/pom.xml b/plugin/pom.xml index e6bcac0..cbfe599 100644 --- a/plugin/pom.xml +++ b/plugin/pom.xml @@ -68,6 +68,14 @@ compile + + + de.minebench.tresor.providers + placeholderapi + ${project.version} + compile + + de.minebench.tresor.providers diff --git a/plugin/src/main/java/de/minebench/tresor/Tresor.java b/plugin/src/main/java/de/minebench/tresor/Tresor.java index f2a8090..89d0f10 100644 --- a/plugin/src/main/java/de/minebench/tresor/Tresor.java +++ b/plugin/src/main/java/de/minebench/tresor/Tresor.java @@ -23,6 +23,7 @@ import de.minebench.tresor.services.authentication.Authentication; import de.minebench.tresor.services.economy.ModernEconomy; import de.minebench.tresor.services.hologram.Holograms; +import de.minebench.tresor.services.placeholder.Placeholders; import de.themoep.hook.bukkit.HookManager; import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.economy.Economy; @@ -77,6 +78,7 @@ private void loadProviders() { new ProviderManager(ModernEconomy.class); new ProviderManager(Permission.class); new ProviderManager(Chat.class); + new ProviderManager(Placeholders.class); } @Override diff --git a/providers/placeholderapi/pom.xml b/providers/placeholderapi/pom.xml new file mode 100644 index 0000000..2947d7b --- /dev/null +++ b/providers/placeholderapi/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + de.minebench.tresor.providers + placeholderapi + + + de.minebench.tresor + tresor-providers + 1.0-SNAPSHOT + + + + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + + + + + + me.clip + placeholderapi + 2.11.6 + provided + + + + \ No newline at end of file diff --git a/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIExpansion.java b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIExpansion.java new file mode 100644 index 0000000..0c21863 --- /dev/null +++ b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIExpansion.java @@ -0,0 +1,35 @@ +package de.minebench.tresor.providers.placeholderapi; + +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class PlaceholderAPIExpansion extends PlaceholderExpansion { + + private final PlaceholderAPIPlaceholders provider; + + public PlaceholderAPIExpansion(final PlaceholderAPIPlaceholders provider) { + this.provider = provider; + } + + @Override + public @NotNull String getIdentifier() { + return "tresor"; + } + + @Override + public @NotNull String getAuthor() { + return "Minebench"; + } + + @Override + public @NotNull String getVersion() { + return "1.0.0"; + } + + @Override + public @Nullable String onRequest(final OfflinePlayer player, @NotNull final String params) { + return provider.request(player, params); + } +} diff --git a/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java new file mode 100644 index 0000000..f82ad03 --- /dev/null +++ b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java @@ -0,0 +1,86 @@ +package de.minebench.tresor.providers.placeholderapi; + +import de.minebench.tresor.Provider; +import de.minebench.tresor.services.placeholder.EmptyPlaceholder; +import de.minebench.tresor.services.placeholder.Placeholder; +import de.minebench.tresor.services.placeholder.Placeholders; +import me.clip.placeholderapi.PlaceholderAPI; +import me.clip.placeholderapi.PlaceholderAPIPlugin; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; + +public class PlaceholderAPIPlaceholders extends Provider implements Placeholders { + + private PlaceholderAPIPlugin hooked; + + private final Map placeholders = new HashMap<>(); + + public PlaceholderAPIPlaceholders() { + super(Placeholders.class); + } + + @Override + public PlaceholderAPIPlugin getHooked() { + if (hooked == null) + hooked = (PlaceholderAPIPlugin) Bukkit.getPluginManager().getPlugin(getName()); + + return hooked; + } + + @Override + public boolean isEnabled() { + return getHooked() != null && getHooked().isEnabled(); + } + + @Override + public String getName() { + return "PlaceholderAPI"; + } + + @Override + public Map getRegisteredPlaceholders() { + return this.placeholders; + } + + @Override + public Placeholder getPlaceholder(final String key) { + final Placeholder placeholder = this.placeholders.get(key); + + if (placeholder == null) + return new EmptyPlaceholder(); + + return placeholder; + } + + @Override + public void add(final Placeholder placeholder) { + this.placeholders.put(placeholder.getKey(), placeholder); + } + + @Override + public String replace(final Player player, final String text) { + return PlaceholderAPI.setPlaceholders(player, text); + } + + @Override + public void hook() { + if (!isEnabled()) + return; + + new PlaceholderAPIExpansion(this).register(); + } + + @Override + public String request(final OfflinePlayer player, final String params) { + final Placeholder placeholder = getPlaceholder(params); + + if (placeholder == null) + return new EmptyPlaceholder().request(player); + + return placeholder.request(player); + } +} diff --git a/providers/pom.xml b/providers/pom.xml index c065288..f81ddd6 100644 --- a/providers/pom.xml +++ b/providers/pom.xml @@ -22,6 +22,9 @@ openlogin librelogin + + placeholderapi + craftconomy3 From 8a96d189a2e9bfb0dd68879fe433b8800f6d43cd Mon Sep 17 00:00:00 2001 From: efe Date: Tue, 4 Jun 2024 15:07:06 +0300 Subject: [PATCH 2/2] removed hook method and empty placeholder --- .../placeholder/EmptyPlaceholder.java | 17 ---------------- .../services/placeholder/Placeholders.java | 5 ----- .../PlaceholderAPIPlaceholders.java | 20 ++++--------------- 3 files changed, 4 insertions(+), 38 deletions(-) delete mode 100644 api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java diff --git a/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java b/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java deleted file mode 100644 index 1f41b2c..0000000 --- a/api/src/main/java/de/minebench/tresor/services/placeholder/EmptyPlaceholder.java +++ /dev/null @@ -1,17 +0,0 @@ -package de.minebench.tresor.services.placeholder; - -import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; - -public class EmptyPlaceholder implements Placeholder { - - @Override - public String getKey() { - return ""; - } - - @Override - public String request(OfflinePlayer player) { - return "N/A"; - } -} diff --git a/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java index 7b8e78c..af91027 100644 --- a/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java +++ b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java @@ -45,11 +45,6 @@ default List replace(final Player player, final List text){ .collect(Collectors.toList()); } - /** - * Register placeholders into placeholder plugin - */ - void hook(); - /** * Request the value of the placeholder * @param player The player to request the value for diff --git a/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java index f82ad03..561b342 100644 --- a/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java +++ b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java @@ -1,7 +1,6 @@ package de.minebench.tresor.providers.placeholderapi; import de.minebench.tresor.Provider; -import de.minebench.tresor.services.placeholder.EmptyPlaceholder; import de.minebench.tresor.services.placeholder.Placeholder; import de.minebench.tresor.services.placeholder.Placeholders; import me.clip.placeholderapi.PlaceholderAPI; @@ -21,6 +20,8 @@ public class PlaceholderAPIPlaceholders extends Provider getRegisteredPlaceholders() { @Override public Placeholder getPlaceholder(final String key) { - final Placeholder placeholder = this.placeholders.get(key); - - if (placeholder == null) - return new EmptyPlaceholder(); - - return placeholder; + return this.placeholders.get(key); } @Override @@ -66,20 +62,12 @@ public String replace(final Player player, final String text) { return PlaceholderAPI.setPlaceholders(player, text); } - @Override - public void hook() { - if (!isEnabled()) - return; - - new PlaceholderAPIExpansion(this).register(); - } - @Override public String request(final OfflinePlayer player, final String params) { final Placeholder placeholder = getPlaceholder(params); if (placeholder == null) - return new EmptyPlaceholder().request(player); + return "N/A"; return placeholder.request(player); }