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

package com.hypixel.hytale.builtin.hytalegenerator.materialproviders.spaceanddepth.layers;

import com.hypixel.hytale.math.util.FastRandom;
import com.hypixel.hytale.builtin.hytalegenerator.seed.SeedBox;
import javax.annotation.Nullable;
import com.hypixel.hytale.builtin.hytalegenerator.materialproviders.MaterialProvider;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import com.hypixel.hytale.builtin.hytalegenerator.materialproviders.spaceanddepth.SpaceAndDepthMaterialProvider;

public class RangedThicknessLayer<V> extends SpaceAndDepthMaterialProvider.Layer<V>
{
    private final int min;
    private final int max;
    private final int delta;
    @Nonnull
    private final SeedGenerator seedGenerator;
    @Nullable
    private final MaterialProvider<V> materialProvider;
    
    public RangedThicknessLayer(final int minInclusive, final int maxInclusive, @Nonnull final SeedBox seedBox, @Nullable final MaterialProvider<V> materialProvider) {
        this.min = minInclusive;
        this.max = maxInclusive;
        this.delta = this.max - this.min;
        if (this.delta < 0) {
            throw new IllegalArgumentException("min greater than max");
        }
        this.seedGenerator = new SeedGenerator(seedBox.createSupplier().get());
        this.materialProvider = materialProvider;
    }
    
    @Override
    public int getThicknessAt(final int x, final int y, final int z, final int depthIntoFloor, final int depthIntoCeiling, final int spaceAboveFloor, final int spaceBelowCeiling, final double distanceTOBiomeEdge) {
        if (this.delta <= 0) {
            return this.min;
        }
        final FastRandom random = new FastRandom(this.seedGenerator.seedAt(x, z));
        return random.nextInt(this.delta + 1) + this.min;
    }
    
    @Override
    public MaterialProvider<V> getMaterialProvider() {
        return this.materialProvider;
    }
}
