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

package com.hypixel.hytale.server.npc.corecomponents.builders;

import java.util.List;
import com.hypixel.hytale.server.npc.util.expression.Scope;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.npc.validators.NPCLoadTimeValidationHelper;
import com.hypixel.hytale.server.npc.util.expression.ExecutionContext;
import com.hypixel.hytale.server.npc.asset.builder.InstructionType;
import com.hypixel.hytale.server.npc.asset.builder.Builder;
import com.google.gson.JsonElement;
import com.hypixel.hytale.server.npc.asset.builder.BuilderBase;
import com.hypixel.hytale.server.npc.instructions.Motion;

public abstract class BuilderMotionBase<T extends Motion> extends BuilderBase<T>
{
    @Override
    public boolean canRequireFeature() {
        return true;
    }
    
    @Override
    public Builder<T> readCommonConfig(final JsonElement data) {
        this.requireInstructionType(InstructionType.MotionAllowedInstructions);
        return super.readCommonConfig(data);
    }
    
    @Override
    public final boolean isEnabled(final ExecutionContext context) {
        return true;
    }
    
    @Override
    public boolean validate(final String configName, @Nonnull final NPCLoadTimeValidationHelper validationHelper, final ExecutionContext context, final Scope globalScope, @Nonnull final List<String> errors) {
        final boolean result = super.validate(configName, validationHelper, context, globalScope, errors);
        if (validationHelper.isParentSensorOnce()) {
            errors.add(String.format("%s: Once is set on a sensor controlling a step with a motion at: %s", configName, this.getBreadCrumbs()));
            return false;
        }
        return result;
    }
}
