Skip to content

Commit

Permalink
Merge pull request #400 from HyKurtis/master
Browse files Browse the repository at this point in the history
Added addon request system to request data from an addon in spigot plugins
  • Loading branch information
tastybento committed Dec 18, 2018
2 parents 2d533ed + 4dcca3d commit 8da55b6
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/main/java/world/bentobox/bentobox/api/addons/Addon.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
Expand All @@ -15,6 +17,7 @@
import org.bukkit.event.Listener;

import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
import world.bentobox.bentobox.managers.IslandsManager;
import world.bentobox.bentobox.managers.PlayersManager;

Expand All @@ -32,6 +35,7 @@ public abstract class Addon {
private FileConfiguration config;
private File dataFolder;
private File file;
private Map<String, AddonRequestHandler> requestHandlers = new HashMap<>();

public Addon() {
state = State.DISABLED;
Expand Down Expand Up @@ -359,4 +363,28 @@ public void logError(String string) {
public String getPermissionPrefix() {
return this.getDescription().getName().toLowerCase() + ".";
}

/**
* Register request handler to answer requests from plugins.
* @param handler
*/
public void registerRequestHandler(AddonRequestHandler handler) {
requestHandlers.put(handler.getLabel(), handler);
}

/**
* Send request to addon.
* @param label
* @param metaData
* @return request response, null if no response.
*/
public Object request(String label, Map<String, Object> metaData) {
label = label.toLowerCase();
AddonRequestHandler handler = requestHandlers.get(label);
if(handler != null) {
return handler.handle(metaData);
} else {
return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package world.bentobox.bentobox.api.addons.exceptions;

import world.bentobox.bentobox.api.addons.request.AddonRequestBuilder;

import java.util.UUID;

public class AddonRequestException extends AddonException
{
private static final long serialVersionUID = -5698456013070166174L;

public AddonRequestException(String errorMessage) {
super(errorMessage);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package world.bentobox.bentobox.api.addons.request;

import org.apache.commons.lang.Validate;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.Addon;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class AddonRequestBuilder
{
private String addonName;
private String requestLabel;
private Map<String, Object> metaData = new HashMap<>();

/**
* Define the addon you wish to request.
*
* @param addonName
*/
public AddonRequestBuilder addon(String addonName) {
this.addonName = addonName;
return this;
}

/**
* Define label for addon request.
*
* @param requestLabel
*/
public AddonRequestBuilder label(String requestLabel) {
this.requestLabel = requestLabel;
return this;
}

/**
* Add meta data to addon request.
*
* @param key
* @param value
*/
public AddonRequestBuilder addMetaData(String key, Object value) {
metaData.put(key, value);
return this;
}

/**
* Send request to addon.
*
* @return request response, null if no response.
*/
public Object request() {
Validate.notNull(addonName);
Validate.notNull(requestLabel);

Optional<Addon> addonOptional = BentoBox.getInstance().getAddonsManager().getAddonByName(addonName);
if(addonOptional.isPresent()) {
Addon addon = addonOptional.get();
return addon.request(requestLabel, metaData);
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package world.bentobox.bentobox.api.addons.request;

import java.util.Map;

public abstract class AddonRequestHandler
{
private String label;

public AddonRequestHandler(String label) {
this.label = label.toLowerCase();
}

/**
* Get request handler label.
*
* @return label
*/
public String getLabel() {
return label;
}

/**
* Handle an addon request.
* This is used only for Addons to respond to addon requests from plugins.
* Example: request island level from Levels addon.
*
* @param metaData
* @return request response
*/
public abstract Object handle(Map<String, Object> metaData);
}

0 comments on commit 8da55b6

Please sign in to comment.