implement FeatureGenerationStage

This commit is contained in:
dfsek
2021-07-17 20:04:27 -07:00
parent 0f638b0317
commit 180aae6e34
3 changed files with 55 additions and 2 deletions

View File

@@ -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;
}
}

View File

@@ -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)
);
}
});
}
}
}

View File

@@ -5,5 +5,5 @@ import com.dfsek.terra.api.world.Column;
import java.util.List;
public interface Locator {
List<Integer> getSuitableCoordinates(Column column, int x, int z);
List<Integer> getSuitableCoordinates(Column column);
}