HyCodeYourTale
classpublicPriority 3

WeightedMaterialProvider

com.hypixel.hytale.builtin.hytalegenerator.materialproviders.WeightedMaterialProvider

extends MaterialProvider

1

Methods

1

Public Methods

3

Fields

1

Constructors

Constructors

public
WeightedMaterialProvider(WeightedMap<MaterialProvider<V>> weightedMap, SeedBox seedBox, double noneProbability)

Methods

Public Methods (1)

public
V getVoxelTypeAt(MaterialProvider.Context context)
@Nullable@Override

Fields

Private/Package Fields (3)

privatedouble noneProbability
privateSeedGenerator seedGenerator
privateWeightedMap<MaterialProvider<V>> weightedMap

Inheritance

Parent
Current
Interface
Child

Use mouse wheel to zoom, drag to pan. Click nodes to navigate.

Related Classes

Source Code

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

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

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 WeightedMap<MaterialProvider<V>> weightedMap, @Nonnull SeedBox seedBox, double noneProbability) {
      this.weightedMap = weightedMap;
      this.seedGenerator = new SeedGenerator((long)seedBox.createSupplier().get().intValue());
      this.noneProbability = noneProbability;
   }

   @Nullable
   @Override
   public V getVoxelTypeAt(@Nonnull MaterialProvider.Context context) {
      long seed = this.seedGenerator.seedAt((long)context.position.x, (long)context.position.y, (long)context.position.z);
      FastRandom random = new FastRandom(seed);
      if (this.weightedMap.size() != 0 && !(random.nextDouble() < this.noneProbability)) {
         MaterialProvider<V> pick = this.weightedMap.pick(random);
         return pick.getVoxelTypeAt(context);
      } else {
         return null;
      }
   }
}