294 lines
8.1 KiB
Java
294 lines
8.1 KiB
Java
package world.bentobox.bentobox.api.addons;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import org.bukkit.Material;
|
|
import org.bukkit.configuration.ConfigurationSection;
|
|
import org.eclipse.jdt.annotation.NonNull;
|
|
import org.eclipse.jdt.annotation.Nullable;
|
|
|
|
/**
|
|
* @author tastybento, Poslovitch
|
|
*/
|
|
public final class AddonDescription {
|
|
|
|
private final @NonNull String main;
|
|
private final @NonNull String name;
|
|
private final @NonNull String version;
|
|
private final @NonNull String description;
|
|
private final @NonNull List<String> authors;
|
|
private final @NonNull List<String> dependencies;
|
|
private final @NonNull List<String> softDependencies;
|
|
private final @Nullable ConfigurationSection permissions;
|
|
/**
|
|
* Whether the addon should be included in Metrics or not.
|
|
* @since 1.1
|
|
*/
|
|
private final boolean metrics;
|
|
/**
|
|
* Name of the GitHub repository of the addon or an empty String.
|
|
* It follows a {@code Owner/Name} format.
|
|
* @since 1.3.0
|
|
*/
|
|
private final @NonNull String repository;
|
|
/**
|
|
* Icon representing the addon in various menus.
|
|
* @since 1.5.0
|
|
*/
|
|
private final @NonNull Material icon;
|
|
/**
|
|
* Minimum BentoBox version this addon requires in order to work properly.
|
|
* Defaults to {@code "1"}.
|
|
* @since 1.11.0
|
|
*/
|
|
private final @NonNull String apiVersion;
|
|
|
|
private AddonDescription(@NonNull Builder builder) {
|
|
this.main = builder.main;
|
|
this.name = builder.name;
|
|
this.version = builder.version;
|
|
this.description = builder.description;
|
|
this.authors = builder.authors;
|
|
this.dependencies = builder.dependencies;
|
|
this.softDependencies = builder.softDependencies;
|
|
this.metrics = builder.metrics;
|
|
this.repository = builder.repository;
|
|
this.icon = builder.icon;
|
|
this.apiVersion = builder.apiVersion;
|
|
this.permissions = builder.permissions;
|
|
}
|
|
|
|
@NonNull
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
@NonNull
|
|
public String getMain() {
|
|
return main;
|
|
}
|
|
|
|
@NonNull
|
|
public String getVersion() {
|
|
return version;
|
|
}
|
|
|
|
@NonNull
|
|
public String getDescription() {
|
|
return description;
|
|
}
|
|
|
|
@NonNull
|
|
public List<String> getAuthors() {
|
|
return authors;
|
|
}
|
|
|
|
/**
|
|
* @return the dependencies
|
|
*/
|
|
@NonNull
|
|
public List<String> getDependencies() {
|
|
return dependencies;
|
|
}
|
|
|
|
/**
|
|
* @return the softDependencies
|
|
*/
|
|
@NonNull
|
|
public List<String> getSoftDependencies() {
|
|
return softDependencies;
|
|
}
|
|
|
|
/**
|
|
* Returns whether the addon should be included in Metrics or not.
|
|
* @return {@code true} if the addon should be included in Metrics reports, {@code false} otherwise.
|
|
* @since 1.1
|
|
*/
|
|
public boolean isMetrics() {
|
|
return metrics;
|
|
}
|
|
|
|
/**
|
|
* Returns the name of the GitHub repository of the addon.
|
|
* It follows a {@code Owner/Name} format.
|
|
* @return the name of the GitHub repository of the addon or an empty String.
|
|
* @since 1.3.0
|
|
*/
|
|
@NonNull
|
|
public String getRepository() {
|
|
return repository;
|
|
}
|
|
|
|
/**
|
|
* Returns the material representing the addon as an icon.
|
|
* @return the material representing the addon as an icon.
|
|
* @since 1.5.0
|
|
*/
|
|
@NonNull
|
|
public Material getIcon() {
|
|
return icon;
|
|
}
|
|
|
|
/**
|
|
* Returns the minimum BentoBox version this addon requires in order to work properly.
|
|
* <br/>
|
|
* Examples:
|
|
* <ul>
|
|
* <li>{@code "1"} means that the addon relies on BentoBox {@code 1.0.0} or higher.</li>
|
|
* <li>Similarly, {@code "2"} sets the requirement to BentoBox {@code 2.0.0} or higher.</li>
|
|
* <li>
|
|
* More specific versions can be provided:
|
|
* <ul>
|
|
* <li>{@code "1.10"} -> BentoBox {@code 1.10.0} or higher.</li>
|
|
* <li>{@code "1.9.2"} -> BentoBox {@code 1.9.2} or higher.</li>
|
|
* </ul>
|
|
* </li>
|
|
* </ul>
|
|
* Defaults to {@code "1"}.
|
|
* @return the minimum BentoBox version this addon requires in order to work properly.
|
|
*/
|
|
@NonNull
|
|
public String getApiVersion() {
|
|
return apiVersion;
|
|
}
|
|
|
|
/**
|
|
* @return the permissions
|
|
* @since 1.13.0
|
|
*/
|
|
@Nullable
|
|
public ConfigurationSection getPermissions() {
|
|
return permissions;
|
|
}
|
|
|
|
public static class Builder {
|
|
@NonNull
|
|
private final String main;
|
|
@NonNull
|
|
private final String name;
|
|
@NonNull
|
|
private final String version;
|
|
@NonNull
|
|
private String description = "";
|
|
@NonNull
|
|
private List<String> authors = new ArrayList<>();
|
|
@NonNull
|
|
private List<String> dependencies = new ArrayList<>();
|
|
@NonNull
|
|
private List<String> softDependencies = new ArrayList<>();
|
|
private boolean metrics = true;
|
|
@NonNull
|
|
private String repository = "";
|
|
@NonNull
|
|
private Material icon = Material.PAPER;
|
|
@NonNull
|
|
private String apiVersion = "1";
|
|
@Nullable
|
|
private ConfigurationSection permissions;
|
|
|
|
/**
|
|
* @since 1.1
|
|
*/
|
|
public Builder(@NonNull String main, @NonNull String name, @NonNull String version) {
|
|
this.main = main;
|
|
this.name = name;
|
|
this.version = version;
|
|
}
|
|
|
|
@NonNull
|
|
public Builder description(@NonNull String description) {
|
|
this.description = description;
|
|
return this;
|
|
}
|
|
|
|
@NonNull
|
|
public Builder authors(@NonNull String... authors) {
|
|
this.authors = Arrays.asList(authors);
|
|
return this;
|
|
}
|
|
|
|
@NonNull
|
|
public Builder dependencies(@NonNull List<String> dependencies) {
|
|
this.dependencies = dependencies;
|
|
return this;
|
|
}
|
|
|
|
@NonNull
|
|
public Builder softDependencies(@NonNull List<String> softDependencies) {
|
|
this.softDependencies = softDependencies;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* @since 1.1
|
|
*/
|
|
@NonNull
|
|
public Builder metrics(boolean metrics) {
|
|
this.metrics = metrics;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the name of the GitHub repository.
|
|
* Must follow the {@code Owner/Name} format.
|
|
* @since 1.3.0
|
|
*/
|
|
@NonNull
|
|
public Builder repository(@NonNull String repository) {
|
|
this.repository = repository;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the icon representing the addon.
|
|
* @param icon Material to set as the icon. Default is {@link Material#PAPER}.
|
|
* @since 1.5.0
|
|
*/
|
|
@NonNull
|
|
public Builder icon(@NonNull Material icon) {
|
|
this.icon = icon;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the minimum BentoBox version this addon requires in order to work properly.
|
|
* @param apiVersion the minimum BentoBox version this addon requires in order to work properly.
|
|
* @since 1.11.0
|
|
* @see AddonDescription#getApiVersion()
|
|
*/
|
|
@NonNull
|
|
public Builder apiVersion(@NonNull String apiVersion) {
|
|
this.apiVersion = apiVersion;
|
|
return this;
|
|
}
|
|
|
|
@NonNull
|
|
public AddonDescription build() {
|
|
return new AddonDescription(this);
|
|
}
|
|
|
|
/**
|
|
* Sets the permission config section. Taken from the addon.yml
|
|
* @param permissions - YAML configuration section
|
|
* @return Builder
|
|
* @since 1.13.0
|
|
*/
|
|
@NonNull
|
|
public Builder permissions(ConfigurationSection permissions) {
|
|
this.permissions = permissions;
|
|
return this;
|
|
}
|
|
}
|
|
|
|
/* (non-Javadoc)
|
|
* @see java.lang.Object#toString()
|
|
*/
|
|
@Override
|
|
public String toString() {
|
|
return "AddonDescription [" + (name != null ? "name=" + name + ", " : "")
|
|
+ "version=" + version + "]";
|
|
}
|
|
}
|