diff --git a/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java new file mode 100644 index 000000000..ed18a9b96 --- /dev/null +++ b/common/addons/generation-stage-feature/src/main/java/com/dfsek/terra/addons/generation/feature/ColumnImpl.java @@ -0,0 +1,37 @@ +package com.dfsek.terra.addons.generation.feature; + +import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.world.Column; +import com.dfsek.terra.api.world.World; + +public class ColumnImpl implements Column { + private final int x; + private final int z; + private final World world; + + public ColumnImpl(int x, int z, World world) { + this.x = x; + this.z = z; + this.world = world; + } + + @Override + public int getX() { + return x; + } + + @Override + public int getZ() { + return z; + } + + @Override + public BlockState getBlock(int y) { + return world.getBlockData(x, y, z); + } + + @Override + public World getWorld() { + return world; + } +} 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 f680fad4f..348190530 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 @@ -1,7 +1,11 @@ package com.dfsek.terra.addons.generation.feature; +import com.dfsek.terra.addons.generation.feature.config.BiomeFeatures; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.profiler.ProfileFrame; +import com.dfsek.terra.api.structure.rotation.Rotation; +import com.dfsek.terra.api.util.PopulationUtil; +import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.world.Chunk; import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.World; @@ -22,7 +26,19 @@ public class FeatureGenerationStage implements TerraGenerationStage { int cz = chunk.getZ() << 4; for(int x = 0; x < 16; x++) { for(int z = 0; z < 16; z++) { - + int tx = cx + x; + int tz = cz + z; + ColumnImpl column = new ColumnImpl(tx, tz, world); + terraWorld.getBiomeProvider().getBiome(tx, tz).getContext().get(BiomeFeatures.class).getFeatures().forEach(feature -> { + if(feature.getDistributor().matches(tx, tz)) { + feature.getLocator() + .getSuitableCoordinates(column) + .forEach(y -> + feature.getStructure(world, tx, y, tz) + .generateDirect(new Vector3(tx, y, tz), world, PopulationUtil.getRandom(chunk), Rotation.NONE) + ); + } + }); } } } diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java index 1f73a5643..c49ebd2f5 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/feature/Locator.java @@ -5,5 +5,5 @@ import com.dfsek.terra.api.world.Column; import java.util.List; public interface Locator { - List getSuitableCoordinates(Column column, int x, int z); + List getSuitableCoordinates(Column column); }