package com.hypixel.hytale.builtin.hytalegenerator.materialproviders; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class TerrainDensityMaterialProvider extends MaterialProvider { @Nonnull private final TerrainDensityMaterialProvider.FieldDelimiter[] fieldDelimiters; public TerrainDensityMaterialProvider(@Nonnull List> delimiters) { this.fieldDelimiters = new TerrainDensityMaterialProvider.FieldDelimiter[delimiters.size()]; for (TerrainDensityMaterialProvider.FieldDelimiter 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) { for (TerrainDensityMaterialProvider.FieldDelimiter delimiter : this.fieldDelimiters) { if (delimiter.isInside(context.density)) { return delimiter.materialProvider.getVoxelTypeAt(context); } } return null; } public static class FieldDelimiter { double top; double bottom; MaterialProvider materialProvider; public FieldDelimiter(@Nonnull MaterialProvider 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; } } }