mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-28 14:47:30 +02:00
Added PlaceholderAPI support 🎉
This commit is contained in:
parent
480d3f78d9
commit
856dcb8b3d
11
pom.xml
11
pom.xml
@ -60,6 +60,10 @@
|
||||
<id>vault-repo</id>
|
||||
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>placeholderapi</id>
|
||||
<url>http://repo.extendedclip.com/content/repositories/placeholderapi/</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<dependencies>
|
||||
@ -108,6 +112,13 @@
|
||||
<version>1.7</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- Placeholders -->
|
||||
<dependency>
|
||||
<groupId>me.clip</groupId>
|
||||
<artifactId>placeholderapi</artifactId>
|
||||
<version>2.9.2</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
@ -12,6 +12,7 @@ import world.bentobox.bentobox.api.configuration.WorldSettings;
|
||||
import world.bentobox.bentobox.api.events.BentoBoxReadyEvent;
|
||||
import world.bentobox.bentobox.api.user.Notifier;
|
||||
import world.bentobox.bentobox.commands.BentoBoxCommand;
|
||||
import world.bentobox.bentobox.hooks.PlaceholderAPIHook;
|
||||
import world.bentobox.bentobox.hooks.VaultHook;
|
||||
import world.bentobox.bentobox.listeners.BannedVisitorCommands;
|
||||
import world.bentobox.bentobox.listeners.BlockEndDragon;
|
||||
@ -27,6 +28,7 @@ import world.bentobox.bentobox.managers.HooksManager;
|
||||
import world.bentobox.bentobox.managers.IslandWorldManager;
|
||||
import world.bentobox.bentobox.managers.IslandsManager;
|
||||
import world.bentobox.bentobox.managers.LocalesManager;
|
||||
import world.bentobox.bentobox.managers.PlaceholdersManager;
|
||||
import world.bentobox.bentobox.managers.PlayersManager;
|
||||
import world.bentobox.bentobox.managers.RanksManager;
|
||||
import world.bentobox.bentobox.managers.SchemsManager;
|
||||
@ -52,6 +54,7 @@ public class BentoBox extends JavaPlugin {
|
||||
private RanksManager ranksManager;
|
||||
private SchemsManager schemsManager;
|
||||
private HooksManager hooksManager;
|
||||
private PlaceholdersManager placeholdersManager;
|
||||
|
||||
// Settings
|
||||
private Settings settings;
|
||||
@ -143,6 +146,10 @@ public class BentoBox extends JavaPlugin {
|
||||
// Load hooks
|
||||
hooksManager = new HooksManager(this);
|
||||
hooksManager.registerHook(new VaultHook());
|
||||
hooksManager.registerHook(new PlaceholderAPIHook());
|
||||
|
||||
// Setup the Placeholders manager
|
||||
placeholdersManager = new PlaceholdersManager(this);
|
||||
|
||||
// Fire plugin ready event
|
||||
isLoaded = true;
|
||||
|
@ -0,0 +1,8 @@
|
||||
package world.bentobox.bentobox.api.placeholders;
|
||||
|
||||
import world.bentobox.bentobox.api.user.User;
|
||||
|
||||
public interface PlaceholderReplacer {
|
||||
|
||||
String onReplace(User user);
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
package world.bentobox.bentobox.hooks;
|
||||
|
||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||
import org.bukkit.entity.Player;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.hooks.Hook;
|
||||
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
||||
import world.bentobox.bentobox.api.user.User;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Provides implementations and interfacing needed to register and get placeholders from PlaceholderAPI.
|
||||
*
|
||||
* @author Poslovitch
|
||||
*/
|
||||
public class PlaceholderAPIHook extends Hook {
|
||||
|
||||
private BentoBoxPlaceholderExpansion bentoboxExpansion;
|
||||
private Map<Addon, AddonPlaceholderExpansion> addonsExpansions;
|
||||
|
||||
public PlaceholderAPIHook() {
|
||||
super("PlaceholderAPI");
|
||||
this.bentoboxExpansion = new BentoBoxPlaceholderExpansion(BentoBox.getInstance());
|
||||
this.addonsExpansions = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hook() {
|
||||
return bentoboxExpansion.canRegister() && bentoboxExpansion.register();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFailureCause() {
|
||||
return "could not register BentoBox's expansion";
|
||||
}
|
||||
|
||||
public void registerBentoBoxPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
||||
bentoboxExpansion.registerPlaceholder(placeholder, replacer);
|
||||
}
|
||||
|
||||
public void registerAddonPlaceholder(Addon addon, String placeholder, PlaceholderReplacer replacer) {
|
||||
// Check if the addon expansion does not exist
|
||||
if (!addonsExpansions.containsKey(addon)) {
|
||||
AddonPlaceholderExpansion addonPlaceholderExpansion = new AddonPlaceholderExpansion(addon);
|
||||
addonPlaceholderExpansion.register();
|
||||
addonsExpansions.put(addon, addonPlaceholderExpansion);
|
||||
}
|
||||
|
||||
addonsExpansions.get(addon).registerPlaceholder(placeholder, replacer);
|
||||
}
|
||||
|
||||
abstract class BasicPlaceholderExpansion extends PlaceholderExpansion {
|
||||
private Map<String, PlaceholderReplacer> placeholders;
|
||||
|
||||
BasicPlaceholderExpansion() {
|
||||
this.placeholders = new HashMap<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return getName().toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
|
||||
void registerPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
||||
placeholders.putIfAbsent(placeholder, replacer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onPlaceholderRequest(Player p, String placeholder) {
|
||||
User user = User.getInstance(p);
|
||||
|
||||
if (placeholders.containsKey(placeholder)) {
|
||||
return placeholders.get(placeholder).onReplace(user);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class BentoBoxPlaceholderExpansion extends BasicPlaceholderExpansion {
|
||||
private BentoBox plugin;
|
||||
|
||||
BentoBoxPlaceholderExpansion(BentoBox plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return plugin.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return "Tastybento and Poslovitch";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return plugin.getDescription().getVersion();
|
||||
}
|
||||
}
|
||||
|
||||
class AddonPlaceholderExpansion extends BasicPlaceholderExpansion {
|
||||
private Addon addon;
|
||||
|
||||
AddonPlaceholderExpansion(Addon addon) {
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return addon.getDescription().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getAuthor() {
|
||||
return addon.getDescription().getAuthors().get(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getVersion() {
|
||||
return addon.getDescription().getVersion();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
package world.bentobox.bentobox.managers;
|
||||
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.addons.Addon;
|
||||
import world.bentobox.bentobox.api.placeholders.PlaceholderReplacer;
|
||||
import world.bentobox.bentobox.hooks.PlaceholderAPIHook;
|
||||
|
||||
public class PlaceholdersManager {
|
||||
|
||||
private BentoBox plugin;
|
||||
|
||||
public PlaceholdersManager(BentoBox plugin) {
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
public void registerPlaceholder(String placeholder, PlaceholderReplacer replacer) {
|
||||
// Register it in PlaceholderAPI
|
||||
plugin.getHooks().getHook("PlaceholderAPI").ifPresent(hook -> {
|
||||
PlaceholderAPIHook placeholderAPIHook = (PlaceholderAPIHook) hook;
|
||||
placeholderAPIHook.registerBentoBoxPlaceholder(placeholder, replacer);
|
||||
});
|
||||
}
|
||||
|
||||
public void registerPlaceholder(Addon addon, String placeholder, PlaceholderReplacer replacer) {
|
||||
if (addon == null) {
|
||||
registerPlaceholder(placeholder, replacer);
|
||||
return;
|
||||
}
|
||||
// Register it in PlaceholderAPI
|
||||
plugin.getHooks().getHook("PlaceholderAPI").ifPresent(hook -> {
|
||||
PlaceholderAPIHook placeholderAPIHook = (PlaceholderAPIHook) hook;
|
||||
placeholderAPIHook.registerAddonPlaceholder(addon, placeholder, replacer);
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user