mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-10 09:46:24 +00:00
implement ExtrusionColumn
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package com.dfsek.terra.addons.biome.extrusion;
|
||||
|
||||
import com.dfsek.terra.addons.biome.extrusion.api.Extrusion;
|
||||
import com.dfsek.terra.api.util.Column;
|
||||
import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
|
||||
import com.dfsek.terra.api.world.info.WorldProperties;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -37,4 +39,13 @@ public class BiomeExtrusionProvider implements BiomeProvider {
|
||||
public Iterable<Biome> getBiomes() {
|
||||
return biomes;
|
||||
}
|
||||
|
||||
public int getResolution() {
|
||||
return resolution;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Column<Biome> getColumn(int x, int z, WorldProperties properties) {
|
||||
return new ExtrusionColumn(properties, this, x, z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.dfsek.terra.addons.biome.extrusion;
|
||||
|
||||
import com.dfsek.terra.api.util.Column;
|
||||
import com.dfsek.terra.api.util.function.IntIntObjConsumer;
|
||||
import com.dfsek.terra.api.world.biome.Biome;
|
||||
import com.dfsek.terra.api.world.info.WorldProperties;
|
||||
|
||||
|
||||
public class ExtrusionColumn implements Column<Biome> {
|
||||
private final int min;
|
||||
private final int max;
|
||||
private final BiomeExtrusionProvider provider;
|
||||
private final int x, z;
|
||||
private final long seed;
|
||||
|
||||
public ExtrusionColumn(WorldProperties worldProperties, BiomeExtrusionProvider provider, int x, int z) {
|
||||
this.min = worldProperties.getMinHeight();
|
||||
this.max = worldProperties.getMaxHeight();
|
||||
this.provider = provider;
|
||||
this.x = x;
|
||||
this.z = z;
|
||||
this.seed = worldProperties.getSeed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMinY() {
|
||||
return min;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxY() {
|
||||
return max;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getX() {
|
||||
return x;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getZ() {
|
||||
return z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome get(int y) {
|
||||
return provider.getBiome(x, y, z, seed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forRanges(IntIntObjConsumer<Biome> consumer) {
|
||||
int min = getMinY();
|
||||
|
||||
int y = min;
|
||||
|
||||
Biome runningObj = get(y);
|
||||
|
||||
int runningMin = min;
|
||||
|
||||
int max = getMaxY() - 1;
|
||||
|
||||
while(y < max) {
|
||||
y += provider.getResolution();
|
||||
Biome current = get(y);
|
||||
|
||||
if(!current.equals(runningObj)) {
|
||||
consumer.accept(runningMin, y, runningObj);
|
||||
runningMin = y;
|
||||
runningObj = current;
|
||||
}
|
||||
}
|
||||
consumer.accept(runningMin, ++y, runningObj);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user