24package com.dreamfirestudios.dreamcore.DreamPlaceholder;
26import me.clip.placeholderapi.expansion.PlaceholderExpansion;
27import org.bukkit.Bukkit;
28import org.bukkit.OfflinePlayer;
29import org.bukkit.entity.Player;
30import org.jetbrains.annotations.NotNull;
31import org.jetbrains.annotations.Nullable;
33import java.util.Arrays;
35import java.util.Objects;
36import java.util.concurrent.ConcurrentHashMap;
59 private final String identifier;
60 private final String author;
61 private final String version;
64 private final Map<String, IDreamPlaceholder> placeholders =
new ConcurrentHashMap<>();
73 @NotNull String author,
74 @NotNull String version) {
75 this.identifier = Objects.requireNonNull(identifier,
"identifier").toLowerCase();
76 this.author = Objects.requireNonNull(author,
"author");
77 this.version = Objects.requireNonNull(version,
"version");
85 @Override
public @NotNull String
getAuthor() {
return author; }
87 @Override
public @NotNull String
getVersion() {
return version; }
91 @Override
public boolean persist() {
return true; }
106 Objects.requireNonNull(provider,
"provider");
107 final String key = provider.key().toLowerCase();
108 return placeholders.putIfAbsent(key, provider) ==
null;
117 Objects.requireNonNull(key,
"key");
118 return placeholders.remove(key.toLowerCase()) !=
null;
125 placeholders.clear();
137 public @Nullable String
onRequest(OfflinePlayer offlinePlayer, @NotNull String params) {
138 return resolve(offlinePlayer, params);
149 return resolve(player, params);
159 private @NotNull String resolve(@Nullable OfflinePlayer offlinePlayer, @NotNull String rawParams) {
160 final String params = rawParams.trim();
161 if (params.isEmpty())
return "";
164 final String[] colonSplit = params.split(
":");
165 final String[] parts = (colonSplit.length > 1) ? colonSplit : params.split(
"_");
167 final String key = parts[0].toLowerCase();
168 final String[] args = (parts.length > 1) ? Arrays.copyOfRange(parts, 1, parts.length) :
new String[0];
171 if (provider ==
null) {
177 return provider.
resolve(offlinePlayer, args);
178 }
catch (Exception ex) {
179 Bukkit.getLogger().warning(
"[DreamPlaceholder] Error resolving key '" + key +
"' with args " +
180 Arrays.toString(args) +
": " + ex.getMessage());
Central registry/dispatcher for DreamCore PlaceholderAPI placeholders.
DreamPlaceholderManager(@NotNull String identifier, @NotNull String author, @NotNull String version)
Constructs a new placeholder manager/expansion.
String onPlaceholderRequest(Player player, @NotNull String params)
PlaceholderAPI (legacy) hook for Player.
boolean register(@NotNull IDreamPlaceholder provider)
Registers a placeholder provider.
void clear()
Removes all registered providers.
String onRequest(OfflinePlayer offlinePlayer, @NotNull String params)
PlaceholderAPI (modern) hook.
boolean unregister(@NotNull String key)
Unregisters a provider by key (case-insensitive).
Contract for a single DreamCore PlaceholderAPI provider.
String resolve(@Nullable OfflinePlayer player, @NotNull String[] args)
Resolves a placeholder value.