// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.npc.asset.builder;

import it.unimi.dsi.fastutil.ints.IntSet;
import com.hypixel.hytale.codec.schema.config.Schema;
import javax.annotation.Nonnull;
import com.hypixel.hytale.codec.schema.SchemaContext;
import com.google.gson.JsonElement;
import java.util.List;
import com.hypixel.hytale.server.npc.util.expression.Scope;
import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
import javax.annotation.Nullable;
import com.hypixel.hytale.codec.schema.NamedSchema;
import com.hypixel.hytale.codec.schema.SchemaConvertable;

public interface Builder<T> extends BuilderContext, SchemaConvertable<Void>, NamedSchema
{
    @Nullable
    T build(final BuilderSupport p0);
    
    boolean validate(final String p0, final NPCLoadTimeValidationHelper p1, final ExecutionContext p2, final Scope p3, final List<String> p4);
    
    void readConfig(final BuilderContext p0, final JsonElement p1, final BuilderManager p2, final BuilderParameters p3, final BuilderValidationHelper p4);
    
    void ignoreAttribute(final String p0);
    
    Class<T> category();
    
    void setTypeName(final String p0);
    
    String getTypeName();
    
    void setLabel(final String p0);
    
    @Nonnull
    Schema toSchema(@Nonnull final SchemaContext p0);
    
    BuilderDescriptor getDescriptor(final String p0, final String p1, final BuilderManager p2);
    
    default boolean isDeprecated() {
        return this.getBuilderDescriptorState() == BuilderDescriptorState.Deprecated;
    }
    
    @Nullable
    BuilderDescriptorState getBuilderDescriptorState();
    
    IntSet getDependencies();
    
    default boolean hasDynamicDependencies() {
        return false;
    }
    
    default void addDynamicDependency(final int builderIndex) {
        throw new IllegalStateException("Builder: Adding dynamic dependencies is not supported");
    }
    
    @Nullable
    default IntSet getDynamicDependencies() {
        return null;
    }
    
    default void clearDynamicDependencies() {
    }
    
    BuilderParameters getBuilderParameters();
    
    FeatureEvaluatorHelper getEvaluatorHelper();
    
    StateMappingHelper getStateMappingHelper();
    
    InstructionContextHelper getInstructionContextHelper();
    
    boolean canRequireFeature();
    
    void validateReferencedProvidedFeatures(final BuilderManager p0, final ExecutionContext p1);
    
    boolean excludeFromRegularBuilding();
    
    boolean isEnabled(final ExecutionContext p0);
    
    default boolean isSpawnable() {
        return false;
    }
}
