compile tree addon

This commit is contained in:
dfsek
2021-07-05 00:30:53 -07:00
parent 1777dc1aca
commit 1ad08a599d
5 changed files with 4 additions and 71 deletions

View File

@@ -1,34 +0,0 @@
package com.dfsek.terra.addons.tree;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.addons.tree.tree.TreeLayer;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.config.loaders.Types;
import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class TreeLayerLoader implements TypeLoader<TreeLayer> {
@Override
public TreeLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) o;
double density = ((Number) map.get("density")).doubleValue();
Range range = configLoader.loadClass(Range.class, map.get("y"));
if(range == null) throw new LoadException("Tree range unspecified");
ProbabilityCollection<Tree> items = (ProbabilityCollection<Tree>) configLoader.loadType(Types.TREE_PROBABILITY_COLLECTION_TYPE, map.get("items"));
if(map.containsKey("distribution")) {
NoiseSeeded noise = configLoader.loadClass(NoiseSeeded.class, map.get("distribution"));
return new TreeLayer(density, range, items, noise.apply(2403L));
}
return new TreeLayer(density, range, items, new WhiteNoiseSampler(2403));
}
}

View File

@@ -3,14 +3,11 @@ package com.dfsek.terra.addons.tree;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
import com.dfsek.terra.addons.tree.tree.TreeLayer;
import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull;
@@ -40,12 +37,14 @@ public class TreePopulator implements TerraBlockPopulator {
Random random = PopulationUtil.getRandom(chunk);
for(int x = 0; x < 16; x += 2) {
for(int z = 0; z < 16; z += 2) {
/*
UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z);
for(TreeLayer layer : biome.getConfig().getTrees()) {
if(layer.getDensity() >= random.nextDouble() * 100) {
layer.place(chunk, new Vector2(offset(random, x), offset(random, z)));
}
}
*/
}
}
}

View File

@@ -5,8 +5,8 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.config.AbstractableTemplate;
import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.util.MaterialSet;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.MaterialSet;
@SuppressWarnings({"unused", "FieldMayBeFinal"})
public class TreeTemplate implements AbstractableTemplate {

View File

@@ -2,8 +2,8 @@ package com.dfsek.terra.addons.tree.tree;
import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.structure.rotation.Rotation;
import com.dfsek.terra.api.util.MaterialSet;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.MaterialSet;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.api.world.World;

View File

@@ -1,32 +0,0 @@
package com.dfsek.terra.addons.tree.tree;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.PopulationUtil;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.vector.Vector2;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.Chunk;
import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.world.population.items.PlaceableLayer;
public class TreeLayer extends PlaceableLayer<Tree> {
public TreeLayer(double density, Range level, ProbabilityCollection<Tree> layer, NoiseSampler noise) {
super(density, level, layer, noise);
}
@Override
public void place(Chunk chunk, Vector2 coords) {
int cx = chunk.getX() << 4;
int cz = chunk.getZ() << 4;
Tree item = layer.get(noise, coords.getX() + cx, coords.getZ() + cz);
Vector3 running = coords.extrude(level.getMax());
for(int ignored : level) {
running.subtract(0, 1, 0);
if(item.getSpawnable().contains(chunk.getBlock(running.getBlockX(), running.getBlockY(), running.getBlockZ()).getBlockType())) {
item.plant(running.clone().add(cx, 1, cz), chunk.getWorld(), PopulationUtil.getRandom(chunk, coords.hashCode()));
}
}
}
}