classpublicPriority 3
FieldFunctionOccurrencePositionProvider
com.hypixel.hytale.builtin.hytalegenerator.positionproviders.FieldFunctionOccurrencePositionProvider
extends PositionProvider
1
Methods
1
Public Methods
3
Fields
1
Constructors
Constants
doubleFP_RESOLUTION= 100.0
Constructors
public
FieldFunctionOccurrencePositionProvider(Density field, PositionProvider positionProvider, int seed)Methods
Public Methods (1)
public
void positionsIn(PositionProvider.Context context)@Override
Fields
Private/Package Fields (3)
private
Density fieldprivate
PositionProvider positionProviderprivate
SeedGenerator seedGeneratorInheritance
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.positionproviders;
import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
import com.hypixel.hytale.builtin.hytalegenerator.framework.math.SeedGenerator;
import com.hypixel.hytale.math.util.FastRandom;
import javax.annotation.Nonnull;
public class FieldFunctionOccurrencePositionProvider extends PositionProvider {
public static final double FP_RESOLUTION = 100.0;
@Nonnull
private final Density field;
@Nonnull
private final PositionProvider positionProvider;
@Nonnull
private final SeedGenerator seedGenerator;
public FieldFunctionOccurrencePositionProvider(@Nonnull Density field, @Nonnull PositionProvider positionProvider, int seed) {
this.field = field;
this.positionProvider = positionProvider;
this.seedGenerator = new SeedGenerator((long)seed);
}
@Override
public void positionsIn(@Nonnull PositionProvider.Context context) {
PositionProvider.Context childContext = new PositionProvider.Context(context);
childContext.consumer = position -> {
Density.Context densityContext = new Density.Context();
densityContext.position = position;
densityContext.positionsAnchor = context.anchor;
densityContext.workerId = context.workerId;
double discardChance = 1.0 - this.field.process(densityContext);
FastRandom random = new FastRandom(this.seedGenerator.seedAt(position.x, position.y, position.z, 100.0));
if (!(discardChance > random.nextDouble())) {
context.consumer.accept(position);
}
};
this.positionProvider.positionsIn(childContext);
}
}