From 56214bf03f8166ce0afc3881b0bc9cdac020b083 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 12 Dec 2021 21:42:25 -0700 Subject: [PATCH] finish feature stage impl --- .../feature/FeatureGenerationStage.java | 46 +++++++++++-------- .../feature/config/BiomeFeatures.java | 7 +-- .../feature/config/BiomeFeaturesTemplate.java | 4 +- 3 files changed, 35 insertions(+), 22 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 955452c3f..d2d55b855 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,18 +7,19 @@ 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.profiler.ProfileFrame; -import com.dfsek.terra.api.util.Rotation; import com.dfsek.terra.api.util.PopulationUtil; +import com.dfsek.terra.api.util.Rotation; import com.dfsek.terra.api.util.StringIdentifiable; import com.dfsek.terra.api.util.vector.Vector3; import com.dfsek.terra.api.world.chunk.generation.ProtoWorld; import com.dfsek.terra.api.world.chunk.generation.stage.GenerationStage; -import java.util.Random; - public class FeatureGenerationStage implements GenerationStage, StringIdentifiable { private final Platform platform; @@ -42,21 +43,30 @@ public class FeatureGenerationStage implements GenerationStage, StringIdentifiab int tx = cx + x; int tz = cz + z; ColumnImpl column = new ColumnImpl<>(tx, tz, world); - world.getBiomeProvider().getBiome(tx, tz, seed).getContext().get(BiomeFeatures.class).getFeatures().forEach(feature -> { - try(ProfileFrame ignored = platform.getProfiler().profile(feature.getID())) { - if(feature.getDistributor().matches(tx, tz, seed)) { - feature.getLocator() - .getSuitableCoordinates(column) - .forEach(y -> - feature.getStructure(world, tx, y, tz) - .generate(new Vector3(tx, y, tz), world, new Random( - PopulationUtil.getCarverChunkSeed(world.centerChunkX(), - world.centerChunkZ(), seed)), - Rotation.NONE) - ); - } - } - }); + world.getBiomeProvider() + .getBiome(tx, tz, seed) + .getContext() + .get(BiomeFeatures.class) + .getFeatures() + .getOrDefault(id, Collections.emptyList()) + .forEach(feature -> { + try(ProfileFrame ignored = platform.getProfiler().profile(feature.getID())) { + if(feature.getDistributor().matches(tx, tz, seed)) { + feature.getLocator() + .getSuitableCoordinates(column) + .forEach(y -> + feature.getStructure(world, tx, y, tz) + .generate(new Vector3(tx, y, tz), + world, + new Random(PopulationUtil.getCarverChunkSeed( + world.centerChunkX(), + world.centerChunkZ(), + seed)), + Rotation.NONE) + ); + } + } + }); } } } diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeatures.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeatures.java index c6c4a27e7..1f66d23af 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeatures.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeatures.java @@ -8,19 +8,20 @@ package com.dfsek.terra.addons.generation.feature.config; import java.util.List; +import java.util.Map; import com.dfsek.terra.api.properties.Properties; import com.dfsek.terra.api.structure.feature.Feature; public class BiomeFeatures implements Properties { - private final List features; + private final Map> features; - public BiomeFeatures(List features) { + public BiomeFeatures(Map> features) { this.features = features; } - public List getFeatures() { + public Map> getFeatures() { return features; } } diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeaturesTemplate.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeaturesTemplate.java index 9f1f56efb..622d98d51 100644 --- a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeaturesTemplate.java +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/config/BiomeFeaturesTemplate.java @@ -13,6 +13,8 @@ import com.dfsek.tectonic.loading.object.ObjectTemplate; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Set; import com.dfsek.terra.api.config.meta.Meta; import com.dfsek.terra.api.structure.feature.Feature; @@ -22,7 +24,7 @@ import com.dfsek.terra.api.structure.feature.Feature; public class BiomeFeaturesTemplate implements ObjectTemplate { @Value("features") @Default - private @Meta List<@Meta Feature> features = Collections.emptyList(); + private @Meta Map<@Meta String, @Meta List<@Meta Feature>> features = Collections.emptyMap(); @Override public BiomeFeatures get() {