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

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

import javax.annotation.Nullable;
import java.util.Random;
import com.hypixel.hytale.math.util.FastRandom;
import com.hypixel.hytale.builtin.hytalegenerator.seed.SeedBox;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import javax.annotation.Nonnull;
import com.hypixel.hytale.builtin.hytalegenerator.datastructures.WeightedMap;

public class WeightedMaterialProvider<V> extends MaterialProvider<V>
{
    @Nonnull
    private final WeightedMap<MaterialProvider<V>> weightedMap;
    @Nonnull
    private final SeedGenerator seedGenerator;
    private final double noneProbability;
    
    public WeightedMaterialProvider(@Nonnull final WeightedMap<MaterialProvider<V>> weightedMap, @Nonnull final SeedBox seedBox, final double noneProbability) {
        this.weightedMap = weightedMap;
        this.seedGenerator = new SeedGenerator(seedBox.createSupplier().get());
        this.noneProbability = noneProbability;
    }
    
    @Nullable
    @Override
    public V getVoxelTypeAt(@Nonnull final Context context) {
        final long seed = this.seedGenerator.seedAt(context.position.x, context.position.y, context.position.z);
        final FastRandom random = new FastRandom(seed);
        if (this.weightedMap.size() == 0 || random.nextDouble() < this.noneProbability) {
            return null;
        }
        final MaterialProvider<V> pick = this.weightedMap.pick(random);
        return pick.getVoxelTypeAt(context);
    }
}
