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

package com.hypixel.hytale.component.query;

import com.hypixel.hytale.component.ComponentRegistry;
import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.component.Archetype;
import javax.annotation.Nonnull;

public interface Query<ECS_TYPE>
{
    @Nonnull
    default <ECS_TYPE> AnyQuery<ECS_TYPE> any() {
        return (AnyQuery<ECS_TYPE>)AnyQuery.INSTANCE;
    }
    
    @Nonnull
    default <ECS_TYPE> NotQuery<ECS_TYPE> not(@Nonnull final Query<ECS_TYPE> query) {
        return new NotQuery<ECS_TYPE>(query);
    }
    
    @Nonnull
    @SafeVarargs
    default <ECS_TYPE> AndQuery<ECS_TYPE> and(@Nonnull final Query<ECS_TYPE>... queries) {
        return new AndQuery<ECS_TYPE>(queries);
    }
    
    @Nonnull
    @SafeVarargs
    default <ECS_TYPE> OrQuery<ECS_TYPE> or(@Nonnull final Query<ECS_TYPE>... queries) {
        return new OrQuery<ECS_TYPE>(queries);
    }
    
    boolean test(final Archetype<ECS_TYPE> p0);
    
    boolean requiresComponentType(final ComponentType<ECS_TYPE, ?> p0);
    
    void validateRegistry(@Nonnull final ComponentRegistry<ECS_TYPE> p0);
    
    void validate();
}
