classpublicPriority 3
FieldFunctionMaterialProvider
com.hypixel.hytale.builtin.hytalegenerator.materialproviders.FieldFunctionMaterialProvider
extends MaterialProvider
1
Methods
1
Public Methods
2
Fields
1
Constructors
Constructors
public
FieldFunctionMaterialProvider(Density density, List<FieldFunctionMaterialProvider.FieldDelimiter<V>> delimiters)Methods
Public Methods (1)
public
V getVoxelTypeAt(MaterialProvider.Context context)@Nullable@Override
Fields
Private/Package Fields (2)
private
Density densityprivate
FieldFunctionMaterialProvider.FieldDelimiter<V>[] fieldDelimitersInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Used By
Source Code
package com.hypixel.hytale.builtin.hytalegenerator.materialproviders;
import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
import java.util.List;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class FieldFunctionMaterialProvider<V> extends MaterialProvider<V> {
@Nonnull
private final Density density;
@Nonnull
private final FieldFunctionMaterialProvider.FieldDelimiter<V>[] fieldDelimiters;
public FieldFunctionMaterialProvider(@Nonnull Density density, @Nonnull List<FieldFunctionMaterialProvider.FieldDelimiter<V>> delimiters) {
this.density = density;
this.fieldDelimiters = new FieldFunctionMaterialProvider.FieldDelimiter[delimiters.size()];
for (FieldFunctionMaterialProvider.FieldDelimiter<V> field : delimiters) {
if (field == null) {
throw new IllegalArgumentException("delimiters contain null value");
}
}
for (int i = 0; i < delimiters.size(); i++) {
this.fieldDelimiters[i] = delimiters.get(i);
}
}
@Nullable
@Override
public V getVoxelTypeAt(@Nonnull MaterialProvider.Context context) {
Density.Context childContext = new Density.Context(context);
double densityValue = this.density.process(childContext);
for (FieldFunctionMaterialProvider.FieldDelimiter<V> delimiter : this.fieldDelimiters) {
if (delimiter.isInside(densityValue)) {
return delimiter.materialProvider.getVoxelTypeAt(context);
}
}
return null;
}
public static class FieldDelimiter<V> {
double top;
double bottom;
MaterialProvider<V> materialProvider;
public FieldDelimiter(@Nonnull MaterialProvider<V> materialProvider, double bottom, double top) {
this.bottom = bottom;
this.top = top;
this.materialProvider = materialProvider;
}
boolean isInside(double fieldValue) {
return fieldValue < this.top && fieldValue >= this.bottom;
}
}
}