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

package com.hypixel.hytale.math.shape;

import com.hypixel.hytale.function.predicate.TriIntObjPredicate;
import com.hypixel.hytale.function.predicate.TriIntPredicate;
import javax.annotation.Nonnull;
import com.hypixel.hytale.math.vector.Vector3d;

public interface Shape
{
    default Box getBox(@Nonnull final Vector3d position) {
        return this.getBox(position.getX(), position.getY(), position.getZ());
    }
    
    Box getBox(final double p0, final double p1, final double p2);
    
    default boolean containsPosition(@Nonnull final Vector3d origin, @Nonnull final Vector3d position) {
        return this.containsPosition(position.getX() - origin.getX(), position.getY() - origin.getY(), position.getZ() - origin.getZ());
    }
    
    default boolean containsPosition(@Nonnull final Vector3d position) {
        return this.containsPosition(position.getX(), position.getY(), position.getZ());
    }
    
    boolean containsPosition(final double p0, final double p1, final double p2);
    
    void expand(final double p0);
    
    default boolean forEachBlock(@Nonnull final Vector3d origin, final TriIntPredicate consumer) {
        return this.forEachBlock(origin.getX(), origin.getY(), origin.getZ(), consumer);
    }
    
    default boolean forEachBlock(@Nonnull final Vector3d origin, final double epsilon, final TriIntPredicate consumer) {
        return this.forEachBlock(origin.getX(), origin.getY(), origin.getZ(), epsilon, consumer);
    }
    
    default boolean forEachBlock(final double x, final double y, final double z, final TriIntPredicate consumer) {
        return this.forEachBlock(x, y, z, 0.0, consumer);
    }
    
    boolean forEachBlock(final double p0, final double p1, final double p2, final double p3, final TriIntPredicate p4);
    
    default <T> boolean forEachBlock(@Nonnull final Vector3d origin, final T t, final TriIntObjPredicate<T> consumer) {
        return this.forEachBlock(origin.getX(), origin.getY(), origin.getZ(), t, consumer);
    }
    
    default <T> boolean forEachBlock(@Nonnull final Vector3d origin, final double epsilon, final T t, final TriIntObjPredicate<T> consumer) {
        return this.forEachBlock(origin.getX(), origin.getY(), origin.getZ(), epsilon, t, consumer);
    }
    
    default <T> boolean forEachBlock(final double x, final double y, final double z, final T t, final TriIntObjPredicate<T> consumer) {
        return this.forEachBlock(x, y, z, 0.0, t, consumer);
    }
    
     <T> boolean forEachBlock(final double p0, final double p1, final double p2, final double p3, final T p4, final TriIntObjPredicate<T> p5);
}
