mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-16 13:23:07 +00:00
implement FeatureGenerationStage
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user