From 245acde336263971c1b2f387954ecc653dfd1a2a Mon Sep 17 00:00:00 2001 From: dfsek Date: Wed, 8 Jun 2022 19:17:00 -0700 Subject: [PATCH] use 3d biomes in FeatureGenerationStage --- .../feature/FeatureGenerationStage.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java index c60ecc6aa..00b60fa6b 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/FeatureGenerationStage.java @@ -7,9 +7,6 @@ package com.dfsek.terra.addons.generation.feature; -import java.util.Collections; -import java.util.Random; - import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures; import com.dfsek.terra.api.Platform; import com.dfsek.terra.api.registry.key.StringIdentifiable; @@ -20,6 +17,9 @@ import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; import com.dfsek.terra.api.world.chunk.generation.util.Column; +import java.util.Collections; +import java.util.Random; + public class FeatureGenerationStage implements GenerationStage, StringIdentifiable { private final Platform platform; @@ -49,26 +49,26 @@ public class FeatureGenerationStage implements GenerationStage, StringIdentifiab long coordinateSeed = (seed * 31 + tx) * 31 + tz; world.getBiomeProvider() - .getBiome(tx, 0, tz, seed) - .getContext() - .get(BiomeFeatures.class) - .getFeatures() - .getOrDefault(this, Collections.emptyList()) - .forEach(feature -> { - platform.getProfiler().push(feature.getID()); - if(feature.getDistributor().matches(tx, tz, seed)) { - feature.getLocator() - .getSuitableCoordinates(column) - .forEach(y -> - feature.getStructure(world, tx, y, tz) - .generate(Vector3Int.of(tx, y, tz), - world, - new Random(coordinateSeed * 31 + y), - Rotation.NONE) - ); - } - platform.getProfiler().pop(feature.getID()); - }); + .getColumn(tx, tz, world) + .forRanges((min, max, biome) -> + biome.getContext() + .get(BiomeFeatures.class) + .getFeatures() + .getOrDefault(this, Collections.emptyList()) + .forEach(feature -> { + platform.getProfiler().push(feature.getID()); + if(feature.getDistributor().matches(tx, tz, seed)) { + feature.getLocator() + .getSuitableCoordinates(column.clamp(min, max)) + .forEach(y -> feature.getStructure(world, tx, y, tz) + .generate(Vector3Int.of(tx, y, tz), + world, + new Random(coordinateSeed * 31 + y), + Rotation.NONE) + ); + } + platform.getProfiler().pop(feature.getID()); + })); } } platform.getProfiler().pop(profile);