use getUngeneratedBlock for trees

This commit is contained in:
dfsek
2021-01-13 20:02:34 -07:00
parent 627f1b75d6
commit ca8cc8bc66
10 changed files with 64 additions and 26 deletions
@@ -4,25 +4,24 @@ import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.samplers.NoiseSampler;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.world.Chunk;
public abstract class PlaceableLayer<T> {
protected final double density;
protected final Range level;
protected final ProbabilityCollection<T> layer;
protected final TerraPlugin main;
protected final NoiseSampler noise;
public PlaceableLayer(double density, Range level, ProbabilityCollection<T> layer, NoiseSampler noise) {
public PlaceableLayer(double density, Range level, ProbabilityCollection<T> layer, NoiseSampler noise, TerraPlugin main) {
this.density = density;
this.level = level;
this.layer = layer;
this.main = main;
this.noise = noise;
}
public NoiseSampler getNoise() {
return noise;
}
public double getDensity() {
return density;
}
@@ -4,14 +4,15 @@ import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.samplers.NoiseSampler;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.world.flora.Flora;
import com.dfsek.terra.population.items.PlaceableLayer;
public class FloraLayer extends PlaceableLayer<Flora> {
public FloraLayer(double density, Range level, ProbabilityCollection<Flora> layer, NoiseSampler noise) {
super(density, level, layer, noise);
public FloraLayer(double density, Range level, ProbabilityCollection<Flora> layer, NoiseSampler noise, TerraPlugin main) {
super(density, level, layer, noise, main);
}
public double getDensity() {
@@ -1,11 +1,12 @@
package com.dfsek.terra.population.items.tree;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.api.math.ProbabilityCollection;
import com.dfsek.terra.api.math.Range;
import com.dfsek.terra.api.math.noise.samplers.NoiseSampler;
import com.dfsek.terra.api.math.vector.Vector2;
import com.dfsek.terra.api.platform.block.Block;
import com.dfsek.terra.api.platform.block.BlockFace;
import com.dfsek.terra.api.platform.TerraPlugin;
import com.dfsek.terra.api.platform.block.BlockData;
import com.dfsek.terra.api.platform.world.Chunk;
import com.dfsek.terra.api.world.tree.Tree;
import com.dfsek.terra.population.items.PlaceableLayer;
@@ -13,18 +14,21 @@ import com.dfsek.terra.util.PopulationUtil;
public class TreeLayer extends PlaceableLayer<Tree> {
public TreeLayer(double density, Range level, ProbabilityCollection<Tree> layer, NoiseSampler noise) {
super(density, level, layer, noise);
public TreeLayer(double density, Range level, ProbabilityCollection<Tree> layer, NoiseSampler noise, TerraPlugin main) {
super(density, level, layer, noise, main);
}
@Override
public void place(Chunk chunk, Vector2 coords) {
Tree item = layer.get(noise, coords.getX(), coords.getZ());
Block current = chunk.getBlock((int) coords.getX(), level.getMax(), (int) coords.getZ());
for(int ignored : level) {
current = current.getRelative(BlockFace.DOWN);
if(item.getSpawnable().contains(current.getType())) {
item.plant(current.getLocation().add(0, 1, 0), PopulationUtil.getRandom(chunk));
TerraWorld terraWorld = main.getWorld(chunk.getWorld());
int cx = chunk.getX() << 4;
int cz = chunk.getZ() << 4;
BlockData current;
for(int y : level) {
current = terraWorld.getUngeneratedBlock(coords.getBlockX() + cx, y, coords.getBlockZ() + cz);
if(item.getSpawnable().contains(current.getMaterial())) {
item.plant(coords.toVector3(y).add(cx, 1, cz).toLocation(chunk.getWorld()), PopulationUtil.getRandom(chunk));
}
}
}