mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-12-17 22:57:52 +01:00
parent
4f7de44b67
commit
c5dc7fcfad
@ -7,11 +7,16 @@ import java.util.Map;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
|
import org.eclipse.jdt.annotation.NonNull;
|
||||||
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Poslovitch
|
||||||
|
*/
|
||||||
abstract class BasicPlaceholderExpansion extends PlaceholderExpansion {
|
abstract class BasicPlaceholderExpansion extends PlaceholderExpansion {
|
||||||
private Map<String, PlaceholderReplacer> placeholders;
|
@NonNull
|
||||||
|
private Map<@NonNull String, @NonNull PlaceholderReplacer> placeholders;
|
||||||
|
|
||||||
BasicPlaceholderExpansion() {
|
BasicPlaceholderExpansion() {
|
||||||
this.placeholders = new HashMap<>();
|
this.placeholders = new HashMap<>();
|
||||||
@ -22,10 +27,19 @@ abstract class BasicPlaceholderExpansion extends PlaceholderExpansion {
|
|||||||
return getName().toLowerCase(Locale.ENGLISH);
|
return getName().toLowerCase(Locale.ENGLISH);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
public void registerPlaceholder(@NonNull String placeholder, @NonNull PlaceholderReplacer replacer) {
|
||||||
placeholders.putIfAbsent(placeholder, replacer);
|
placeholders.putIfAbsent(placeholder, replacer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters a placeholder from the expansion.
|
||||||
|
* @param placeholder the placeholder to unregister.
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void unregisterPlaceholder(@NonNull String placeholder) {
|
||||||
|
placeholders.remove(placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String onPlaceholderRequest(Player p, String placeholder) {
|
public String onPlaceholderRequest(Player p, String placeholder) {
|
||||||
User user = User.getInstance(p);
|
User user = User.getInstance(p);
|
||||||
|
@ -3,6 +3,8 @@ package world.bentobox.bentobox.hooks;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.jdt.annotation.NonNull;
|
||||||
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
import world.bentobox.bentobox.BentoBox;
|
import world.bentobox.bentobox.BentoBox;
|
||||||
import world.bentobox.bentobox.api.addons.Addon;
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
import world.bentobox.bentobox.api.hooks.Hook;
|
import world.bentobox.bentobox.api.hooks.Hook;
|
||||||
@ -41,16 +43,33 @@ public class PlaceholderAPIHook extends Hook {
|
|||||||
return "could not register BentoBox's expansion";
|
return "could not register BentoBox's expansion";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 1.4.0, renamed to {@link #registerPlaceholder(String, PlaceholderReplacer)}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public void registerBentoBoxPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
public void registerBentoBoxPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
||||||
|
registerPlaceholder(placeholder, replacer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers this placeholder into BentoBox's PlaceholderAPI expansion.
|
||||||
|
* @param placeholder the placeholder to register, not null
|
||||||
|
* @param replacer its replacement, not null
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void registerPlaceholder(@NonNull String placeholder, @NonNull PlaceholderReplacer replacer) {
|
||||||
bentoboxExpansion.registerPlaceholder(placeholder, replacer);
|
bentoboxExpansion.registerPlaceholder(placeholder, replacer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAddonPlaceholder(Addon addon, String placeholder, PlaceholderReplacer replacer) {
|
/**
|
||||||
// If addon is null, then register the placeholder in BentoBox's expansion.
|
* Registers this placeholder into this addon's PlaceholderAPI expansion.
|
||||||
if (addon == null) {
|
* It will register the expansion if it previously did not exist.
|
||||||
registerBentoBoxPlaceholder(placeholder, replacer);
|
* @param addon the addon, not null
|
||||||
}
|
* @param placeholder the placeholder to register, not null
|
||||||
|
* @param replacer its replacement, not null
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void registerPlaceholder(@NonNull Addon addon, @NonNull String placeholder, @NonNull PlaceholderReplacer replacer) {
|
||||||
// Check if the addon expansion does not exist
|
// Check if the addon expansion does not exist
|
||||||
if (!addonsExpansions.containsKey(addon)) {
|
if (!addonsExpansions.containsKey(addon)) {
|
||||||
AddonPlaceholderExpansion addonPlaceholderExpansion = new AddonPlaceholderExpansion(addon);
|
AddonPlaceholderExpansion addonPlaceholderExpansion = new AddonPlaceholderExpansion(addon);
|
||||||
@ -60,4 +79,33 @@ public class PlaceholderAPIHook extends Hook {
|
|||||||
|
|
||||||
addonsExpansions.get(addon).registerPlaceholder(placeholder, replacer);
|
addonsExpansions.get(addon).registerPlaceholder(placeholder, replacer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters this placeholder from the BentoBox PlaceholderAPI expansion.
|
||||||
|
* @param placeholder the placeholder to unregister, not null
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void unregisterPlaceholder(@NonNull String placeholder) {
|
||||||
|
bentoboxExpansion.unregisterPlaceholder(placeholder);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregister this placeholder from this addon's PlaceholderAPI expansion.
|
||||||
|
* @param addon the addon, not null
|
||||||
|
* @param placeholder the placeholder to unregister, not null
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void unregisterPlaceholder(@NonNull Addon addon, @NonNull String placeholder) {
|
||||||
|
if (addonsExpansions.containsKey(addon)) {
|
||||||
|
addonsExpansions.get(addon).unregisterPlaceholder(placeholder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated As of 1.4.0, renamed to {@link #registerPlaceholder(Addon, String, PlaceholderReplacer)}.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public void registerAddonPlaceholder(Addon addon, String placeholder, PlaceholderReplacer replacer) {
|
||||||
|
registerPlaceholder(addon, placeholder, replacer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package world.bentobox.bentobox.managers;
|
package world.bentobox.bentobox.managers;
|
||||||
|
|
||||||
|
import com.mongodb.lang.NonNull;
|
||||||
|
import com.mongodb.lang.Nullable;
|
||||||
import world.bentobox.bentobox.BentoBox;
|
import world.bentobox.bentobox.BentoBox;
|
||||||
import world.bentobox.bentobox.api.addons.Addon;
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
||||||
import world.bentobox.bentobox.hooks.PlaceholderAPIHook;
|
import world.bentobox.bentobox.hooks.PlaceholderAPIHook;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages placeholder integration.
|
* Manages placeholder integration.
|
||||||
*
|
*
|
||||||
@ -19,26 +23,66 @@ public class PlaceholdersManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers the placeholder on the behalf on BentoBox.
|
* Registers this placeholder on the behalf of BentoBox.
|
||||||
* @param placeholder the placeholder to register. It will be appended with {@code "bentobox_"} by the placeholder plugin.
|
* @param placeholder the placeholder to register, not null.
|
||||||
* @param replacer the expression that will return a {@code String} when executed, which will replace the placeholder.
|
* It will be appended with {@code "bentobox_"} by the placeholder plugin.
|
||||||
|
* @param replacer the expression that will return a {@code String} when executed, which will be this placeholder's replacement.
|
||||||
*/
|
*/
|
||||||
public void registerPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
public void registerPlaceholder(@NonNull String placeholder, @NonNull PlaceholderReplacer replacer) {
|
||||||
// Register it in PlaceholderAPI
|
// Register it in PlaceholderAPI
|
||||||
plugin.getHooks().getHook("PlaceholderAPI").ifPresent(hook -> ((PlaceholderAPIHook) hook).registerBentoBoxPlaceholder(placeholder, replacer));
|
getPlaceholderAPIHook().ifPresent(hook -> hook.registerPlaceholder(placeholder, replacer));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers the placeholder on the behalf of the specified addon.
|
* Registers this placeholder on the behalf of the specified addon.
|
||||||
* @param placeholder the placeholder to register. It will be appended with the addon's name by the placeholder plugin.
|
* @param addon the addon to register this placeholder on its behalf.
|
||||||
|
* If null, the placeholder will be registered using {@link #registerPlaceholder(String, PlaceholderReplacer)}.
|
||||||
|
* @param placeholder the placeholder to register, not null.
|
||||||
|
* It will be appended with the addon's name by the placeholder plugin.
|
||||||
* @param replacer the expression that will return a {@code String} when executed, which will replace the placeholder.
|
* @param replacer the expression that will return a {@code String} when executed, which will replace the placeholder.
|
||||||
*/
|
*/
|
||||||
public void registerPlaceholder(Addon addon, String placeholder, PlaceholderReplacer replacer) {
|
public void registerPlaceholder(@Nullable Addon addon, @NonNull String placeholder, @NonNull PlaceholderReplacer replacer) {
|
||||||
if (addon == null) {
|
if (addon == null) {
|
||||||
registerPlaceholder(placeholder, replacer);
|
registerPlaceholder(placeholder, replacer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Register it in PlaceholderAPI
|
// Register it in PlaceholderAPI
|
||||||
plugin.getHooks().getHook("PlaceholderAPI").ifPresent(hook -> ((PlaceholderAPIHook) hook).registerAddonPlaceholder(addon, placeholder, replacer));
|
getPlaceholderAPIHook().ifPresent(hook -> hook.registerPlaceholder(addon, placeholder, replacer));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters this placeholder on the behalf of BentoBox.
|
||||||
|
* Note that if the placeholder you are trying to unregister has been registered by an addon, you should use {@link #unregisterPlaceholder(Addon, String)} instead.
|
||||||
|
* @param placeholder the placeholder to unregister, not null.
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void unregisterPlaceholder(@NonNull String placeholder) {
|
||||||
|
// Unregister it from PlaceholderAPI
|
||||||
|
getPlaceholderAPIHook().ifPresent(hook -> hook.unregisterPlaceholder(placeholder));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unregisters this placeholder on the behalf of the specified addon.
|
||||||
|
* @param addon the addon that originally registered this placeholder.
|
||||||
|
* If null, this placeholder will be unregistered using {@link #unregisterPlaceholder(String)}.
|
||||||
|
* @param placeholder the placeholder to unregister, not null.
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
public void unregisterPlaceholder(@Nullable Addon addon, @NonNull String placeholder) {
|
||||||
|
if (addon == null) {
|
||||||
|
unregisterPlaceholder(placeholder);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Unregister it from PlaceholderAPI
|
||||||
|
getPlaceholderAPIHook().ifPresent(hook -> hook.unregisterPlaceholder(addon, placeholder));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an Optional containing the PlaceholderAPIHook instance, or an empty Optional otherwise.
|
||||||
|
* @return Optional containing the PlaceholderAPIHook instance or an empty Optional otherwise.
|
||||||
|
* @since 1.4.0
|
||||||
|
*/
|
||||||
|
private Optional<PlaceholderAPIHook> getPlaceholderAPIHook() {
|
||||||
|
return plugin.getHooks().getHook("PlaceholderAPI").map(hook -> (PlaceholderAPIHook) hook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user