package com.hypixel.hytale.server.npc.asset.builder.validators;
import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
import com.hypixel.hytale.server.npc.asset.builder.Feature;
import com.hypixel.hytale.server.npc.asset.builder.FeatureEvaluatorHelper;
import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.FeatureProviderEvaluator;
import com.hypixel.hytale.server.npc.asset.builder.providerevaluators.ProviderEvaluator;
import java.util.EnumSet;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class RequiresFeatureIfEnumValidator<E extends Enum<E> & Supplier<String>> extends RequiredFeatureValidator {
@Nonnull
private final String[] description;
private final String attribute;
private final E value;
private RequiresFeatureIfEnumValidator(String attribute, E value, @Nonnull EnumSet<Feature> feature) {
this.attribute = attribute;
this.description = BuilderBase.getDescriptionArray(feature);
this.value = value;
}
public boolean validate(FeatureEvaluatorHelper evaluatorHelper) {
return false;
}
@Nullable
public String getErrorMessage(String context) {
return null;
}
public static <E extends Enum<E> & Supplier<String>> boolean staticValidate(@Nonnull FeatureEvaluatorHelper evaluatorHelper, EnumSet<Feature> requiredFeature, E requiredValue, E value) {
if (requiredValue != value) {
return true;
} else {
for(ProviderEvaluator providedFeature : evaluatorHelper.getProviders()) {
if (providedFeature instanceof FeatureProviderEvaluator && ((FeatureProviderEvaluator)providedFeature).provides(requiredFeature)) {
return true;
}
}
return false;
}
}
@Nonnull
public static <E extends Enum<E> & Supplier<String>> RequiresFeatureIfEnumValidator withAttributes(String attribute, E value, @Nonnull EnumSet<Feature> feature) {
return new RequiresFeatureIfEnumValidator(attribute, value, feature);
}
}