191 lines
5.4 KiB
Java
191 lines
5.4 KiB
Java
package com.hypixel.hytale.server.npc.asset.builder;
|
|
|
|
import com.hypixel.hytale.server.npc.asset.builder.validators.Validator;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.function.Supplier;
|
|
import javax.annotation.Nonnull;
|
|
import javax.annotation.Nullable;
|
|
|
|
public class BuilderAttributeDescriptor {
|
|
private final String name;
|
|
private final String type;
|
|
private BuilderAttributeDescriptor.RequirementType required;
|
|
private boolean computable;
|
|
private final BuilderDescriptorState state;
|
|
private final String shortDescription;
|
|
private final String longDescription;
|
|
@Nullable
|
|
private String defaultValue;
|
|
@Nullable
|
|
private String domain;
|
|
private int minSize;
|
|
private int maxSize;
|
|
@Nullable
|
|
private Validator validator;
|
|
@Nullable
|
|
private Map<String, String> flagDescriptions;
|
|
|
|
public BuilderAttributeDescriptor(String name, String type, BuilderDescriptorState state, String shortDescription, String longDescription) {
|
|
this.name = name;
|
|
this.type = type;
|
|
this.state = state;
|
|
this.shortDescription = shortDescription;
|
|
this.longDescription = longDescription;
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.computable = false;
|
|
this.defaultValue = null;
|
|
this.domain = null;
|
|
this.validator = null;
|
|
this.flagDescriptions = null;
|
|
this.minSize = -1;
|
|
this.maxSize = -1;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor required() {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.REQUIRED;
|
|
this.defaultValue = null;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor requiredIfNotOverridden() {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.REQUIRED_IF_NOT_OVERRIDDEN;
|
|
this.defaultValue = null;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor optional(String defaultValue) {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.defaultValue = defaultValue;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor optional(double[] defaultValue) {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.defaultValue = Arrays.toString(defaultValue);
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor optional(int[] defaultValue) {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.defaultValue = Arrays.toString(defaultValue);
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor optional(String[] defaultValue) {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.defaultValue = Arrays.toString((Object[])defaultValue);
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor optional(boolean[] defaultValue) {
|
|
this.required = BuilderAttributeDescriptor.RequirementType.OPTIONAL;
|
|
this.defaultValue = Arrays.toString(defaultValue);
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor computable() {
|
|
this.computable = true;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public <E extends Enum<E>> BuilderAttributeDescriptor setBasicEnum(@Nonnull Class<E> clazz) {
|
|
E[] enumConstants = (E[])clazz.getEnumConstants();
|
|
this.domain = BuilderBase.getDomain(enumConstants);
|
|
HashMap<String, String> result = new HashMap<>();
|
|
|
|
for (E E : enumConstants) {
|
|
result.put(E.toString(), E.toString());
|
|
}
|
|
|
|
this.flagDescriptions = result;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public <E extends Enum<E> & Supplier<String>> BuilderAttributeDescriptor setEnum(@Nonnull Class<E> clazz) {
|
|
E[] enumConstants = (E[])clazz.getEnumConstants();
|
|
this.domain = BuilderBase.getDomain(enumConstants);
|
|
HashMap<String, String> result = new HashMap<>();
|
|
|
|
for (E E : enumConstants) {
|
|
result.put(E.toString(), (String)E.get());
|
|
}
|
|
|
|
this.flagDescriptions = result;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor domain(String domain) {
|
|
this.domain = domain;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor validator(Validator validator) {
|
|
this.validator = validator;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor length(int size) {
|
|
return this.length(size, size);
|
|
}
|
|
|
|
@Nonnull
|
|
public BuilderAttributeDescriptor length(int minSize, int maxSize) {
|
|
this.minSize = minSize;
|
|
this.maxSize = maxSize;
|
|
return this;
|
|
}
|
|
|
|
@Nonnull
|
|
@Override
|
|
public String toString() {
|
|
return "BuilderAttributeDescriptor{name='"
|
|
+ this.name
|
|
+ "', type='"
|
|
+ this.type
|
|
+ "', required="
|
|
+ this.required
|
|
+ ", computable="
|
|
+ this.computable
|
|
+ ", state="
|
|
+ this.state
|
|
+ ", shortDescription='"
|
|
+ this.shortDescription
|
|
+ "', longDescription='"
|
|
+ this.longDescription
|
|
+ "', defaultValue='"
|
|
+ this.defaultValue
|
|
+ "', domain='"
|
|
+ this.domain
|
|
+ "', minSize="
|
|
+ this.minSize
|
|
+ ", maxSize="
|
|
+ this.maxSize
|
|
+ ", validator="
|
|
+ this.validator
|
|
+ ", flagDescriptions="
|
|
+ this.flagDescriptions
|
|
+ "}";
|
|
}
|
|
|
|
private static enum RequirementType {
|
|
REQUIRED,
|
|
OPTIONAL,
|
|
REQUIRED_IF_NOT_OVERRIDDEN;
|
|
}
|
|
}
|