package net.aufdemrand.denizen.scripts.requirements; import net.aufdemrand.denizen.Denizen; import net.aufdemrand.denizen.exceptions.RequirementCheckException; import net.aufdemrand.denizencore.interfaces.RegistrationableInstance; import org.bukkit.Bukkit; import java.util.List; public abstract class AbstractRequirement implements RegistrationableInstance { /** * Contains required options for a Requirement in a single class for the * ability to add optional options in the future. */ public class RequirementOptions { public String USAGE_HINT = ""; public int REQUIRED_ARGS = -1; public RequirementOptions(String usageHint, int numberOfRequiredArgs) { this.USAGE_HINT = usageHint; this.REQUIRED_ARGS = numberOfRequiredArgs; } } protected Denizen plugin; protected String name; public RequirementOptions requirementOptions; @Override public AbstractRequirement activate() { plugin = (Denizen) Bukkit.getPluginManager().getPlugin("Denizen"); return this; } @Override public AbstractRequirement as(String requirementName) { this.name = requirementName; // Register command with Registry plugin.getRequirementRegistry().register(requirementName, this); onEnable(); return this; } public abstract boolean check(RequirementsContext context, List<String> args) throws RequirementCheckException; @Override public String getName() { return name; } public RequirementOptions getOptions() { return requirementOptions; } public String getUsageHint() { return !requirementOptions.USAGE_HINT.equals("") ? requirementOptions.USAGE_HINT : "No usage defined! See documentation for more information!"; } /** * Part of the Plugin disable sequence. * <p/> * Can be '@Override'n by a Requirement which requires a method when bukkit sends a * onDisable() to Denizen. (ie. Server shuts down or restarts) */ public void onDisable() { } /** * Part of the Plugin enable sequence. This is called when the requirement is * instanced by the RequirementRegistry, which is generally on a server startup. * <p/> * Can be '@Override'n by a Requirement which requires a method when starting, such * as registering as a Bukkit Listener. */ public void onEnable() { } public AbstractRequirement withOptions(String usageHint, int numberOfRequiredArgs) { this.requirementOptions = new RequirementOptions(usageHint, numberOfRequiredArgs); return this; } }