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..af91027 --- /dev/null +++ b/api/src/main/java/de/minebench/tresor/services/placeholder/Placeholders.java @@ -0,0 +1,56 @@ +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()); + } + + /** + * 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..561b342 --- /dev/null +++ b/providers/placeholderapi/src/main/java/de/minebench/tresor/providers/placeholderapi/PlaceholderAPIPlaceholders.java @@ -0,0 +1,74 @@ +package de.minebench.tresor.providers.placeholderapi; + +import de.minebench.tresor.Provider; +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); + + new PlaceholderAPIExpansion(this).register(); + } + + @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) { + return this.placeholders.get(key); + } + + @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 String request(final OfflinePlayer player, final String params) { + final Placeholder placeholder = getPlaceholder(params); + + if (placeholder == null) + return "N/A"; + + 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