mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-10-25 13:30:10 +00:00
Flora
This commit is contained in:
1 parent
4b7b0ee7e9
commit
4ddace2a92
11 files changed
+147
-35
No files matched your search
Binary file not shown.
@@ -11,22 +11,26 @@ import com.dfsek.terra.config.exception.FileMissingException;
|
|||||||
import com.dfsek.terra.config.factories.BiomeFactory;
|
import com.dfsek.terra.config.factories.BiomeFactory;
|
||||||
import com.dfsek.terra.config.factories.BiomeGridFactory;
|
import com.dfsek.terra.config.factories.BiomeGridFactory;
|
||||||
import com.dfsek.terra.config.factories.CarverFactory;
|
import com.dfsek.terra.config.factories.CarverFactory;
|
||||||
|
import com.dfsek.terra.config.factories.FloraFactory;
|
||||||
import com.dfsek.terra.config.factories.PaletteFactory;
|
import com.dfsek.terra.config.factories.PaletteFactory;
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
import com.dfsek.terra.config.loaders.NoiseBuilderLoader;
|
import com.dfsek.terra.config.loaders.NoiseBuilderLoader;
|
||||||
import com.dfsek.terra.config.templates.BiomeGridTemplate;
|
import com.dfsek.terra.config.templates.BiomeGridTemplate;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.config.templates.CarverTemplate;
|
import com.dfsek.terra.config.templates.CarverTemplate;
|
||||||
|
import com.dfsek.terra.config.templates.FloraTemplate;
|
||||||
import com.dfsek.terra.config.templates.PaletteTemplate;
|
import com.dfsek.terra.config.templates.PaletteTemplate;
|
||||||
import com.dfsek.terra.config.templates.StructureTemplate;
|
import com.dfsek.terra.config.templates.StructureTemplate;
|
||||||
import com.dfsek.terra.generation.config.NoiseBuilder;
|
import com.dfsek.terra.generation.config.NoiseBuilder;
|
||||||
import com.dfsek.terra.registry.BiomeGridRegistry;
|
import com.dfsek.terra.registry.BiomeGridRegistry;
|
||||||
import com.dfsek.terra.registry.BiomeRegistry;
|
import com.dfsek.terra.registry.BiomeRegistry;
|
||||||
import com.dfsek.terra.registry.CarverRegistry;
|
import com.dfsek.terra.registry.CarverRegistry;
|
||||||
|
import com.dfsek.terra.registry.FloraRegistry;
|
||||||
import com.dfsek.terra.registry.PaletteRegistry;
|
import com.dfsek.terra.registry.PaletteRegistry;
|
||||||
import com.dfsek.terra.registry.StructureRegistry;
|
import com.dfsek.terra.registry.StructureRegistry;
|
||||||
import com.dfsek.terra.util.ConfigUtil;
|
import com.dfsek.terra.util.ConfigUtil;
|
||||||
import org.polydev.gaea.biome.Biome;
|
import org.polydev.gaea.biome.Biome;
|
||||||
|
import org.polydev.gaea.world.Flora;
|
||||||
import org.polydev.gaea.world.palette.Palette;
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
import parsii.eval.Scope;
|
import parsii.eval.Scope;
|
||||||
|
|
||||||
@@ -50,6 +54,7 @@ public class ConfigPack {
|
|||||||
private final StructureRegistry structureRegistry = new StructureRegistry();
|
private final StructureRegistry structureRegistry = new StructureRegistry();
|
||||||
private final CarverRegistry carverRegistry = new CarverRegistry();
|
private final CarverRegistry carverRegistry = new CarverRegistry();
|
||||||
private final PaletteRegistry paletteRegistry = new PaletteRegistry();
|
private final PaletteRegistry paletteRegistry = new PaletteRegistry();
|
||||||
|
private final FloraRegistry floraRegistry = new FloraRegistry();
|
||||||
|
|
||||||
private final Scope varScope;
|
private final Scope varScope;
|
||||||
|
|
||||||
@@ -77,7 +82,8 @@ public class ConfigPack {
|
|||||||
abstractConfigLoader
|
abstractConfigLoader
|
||||||
.registerLoader(Palette.class, paletteRegistry)
|
.registerLoader(Palette.class, paletteRegistry)
|
||||||
.registerLoader(Biome.class, biomeRegistry)
|
.registerLoader(Biome.class, biomeRegistry)
|
||||||
.registerLoader(UserDefinedCarver.class, carverRegistry);
|
.registerLoader(UserDefinedCarver.class, carverRegistry)
|
||||||
|
.registerLoader(Flora.class, floraRegistry);
|
||||||
ConfigUtil.registerAllLoaders(abstractConfigLoader);
|
ConfigUtil.registerAllLoaders(abstractConfigLoader);
|
||||||
|
|
||||||
List<PaletteTemplate> paletteTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "palettes").toPath()), PaletteTemplate::new);
|
List<PaletteTemplate> paletteTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "palettes").toPath()), PaletteTemplate::new);
|
||||||
@@ -87,6 +93,13 @@ public class ConfigPack {
|
|||||||
Debug.info("Loaded palette " + palette.getID());
|
Debug.info("Loaded palette " + palette.getID());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
List<FloraTemplate> floraTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "flora").toPath()), FloraTemplate::new);
|
||||||
|
FloraFactory floraFactory = new FloraFactory();
|
||||||
|
floraTemplates.forEach(flora -> {
|
||||||
|
floraRegistry.add(flora.getID(), floraFactory.build(flora));
|
||||||
|
Debug.info("Loaded flora " + flora.getID());
|
||||||
|
});
|
||||||
|
|
||||||
List<StructureTemplate> structureTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "structures/single").toPath()), StructureTemplate::new);
|
List<StructureTemplate> structureTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "structures/single").toPath()), StructureTemplate::new);
|
||||||
structureTemplates.forEach(structure -> {
|
structureTemplates.forEach(structure -> {
|
||||||
structureRegistry.add(structure.getID(), structure);
|
structureRegistry.add(structure.getID(), structure);
|
||||||
@@ -105,6 +118,8 @@ public class ConfigPack {
|
|||||||
biomeTemplates.forEach(biome -> {
|
biomeTemplates.forEach(biome -> {
|
||||||
biomeRegistry.add(biome.getID(), biomeFactory.build(biome));
|
biomeRegistry.add(biome.getID(), biomeFactory.build(biome));
|
||||||
Debug.info("Loaded biome " + biome.getID());
|
Debug.info("Loaded biome " + biome.getID());
|
||||||
|
Debug.info("Flora: " + biome.getFlora());
|
||||||
|
Debug.info("Carvers: " + biome.getCarvers());
|
||||||
});
|
});
|
||||||
|
|
||||||
List<BiomeGridTemplate> biomeGridTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "grids").toPath()), BiomeGridTemplate::new);
|
List<BiomeGridTemplate> biomeGridTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "grids").toPath()), BiomeGridTemplate::new);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.dfsek.terra.config.factories;
|
||||||
|
|
||||||
|
import com.dfsek.terra.biome.palette.PaletteLayer;
|
||||||
|
import com.dfsek.terra.config.templates.FloraTemplate;
|
||||||
|
import com.dfsek.terra.generation.items.flora.TerraFlora;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.polydev.gaea.util.FastRandom;
|
||||||
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
import org.polydev.gaea.world.palette.RandomPalette;
|
||||||
|
|
||||||
|
public class FloraFactory implements TerraFactory<FloraTemplate, TerraFlora> {
|
||||||
|
@Override
|
||||||
|
public TerraFlora build(FloraTemplate config) {
|
||||||
|
Palette<BlockData> palette = new RandomPalette<>(new FastRandom(2403));
|
||||||
|
for(PaletteLayer layer : config.getFloraPalette()) {
|
||||||
|
palette.add(layer.getLayer(), layer.getSize());
|
||||||
|
}
|
||||||
|
return new TerraFlora(palette, config.doPhysics(), config.isCeiling(), config.getIrrigable(), config.getSpawnable(), config.getReplaceable());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.dfsek.terra.config.loaders;
|
||||||
|
|
||||||
|
import com.dfsek.tectonic.exception.LoadException;
|
||||||
|
import com.dfsek.tectonic.loading.ConfigLoader;
|
||||||
|
import com.dfsek.tectonic.loading.TypeLoader;
|
||||||
|
import com.dfsek.terra.generation.items.flora.FloraLayer;
|
||||||
|
import org.polydev.gaea.math.FastNoiseLite;
|
||||||
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
|
import org.polydev.gaea.math.Range;
|
||||||
|
import org.polydev.gaea.world.Flora;
|
||||||
|
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public class FloraLayerLoader implements TypeLoader<FloraLayer> {
|
||||||
|
@Override
|
||||||
|
public FloraLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
|
||||||
|
Map<String, Object> map = (Map<String, Object>) o;
|
||||||
|
int density = (Integer) map.get("density");
|
||||||
|
Range range = (Range) configLoader.loadType(Range.class, map.get("y"));
|
||||||
|
if(range == null) throw new LoadException("Flora range unspecified");
|
||||||
|
ProbabilityCollection<Flora> items = (ProbabilityCollection<Flora>) configLoader.loadType(Types.FLORA_PROBABILITY_COLLECTION_TYPE, map.get("items"));
|
||||||
|
|
||||||
|
if(map.containsKey("simplex-frequency")) {
|
||||||
|
FastNoiseLite noiseLite = new FastNoiseLite();
|
||||||
|
noiseLite.setFrequency((Double) map.get("simplex-frequency"));
|
||||||
|
return new FloraLayer(density, range, items, noiseLite);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FloraLayer(density, range, items, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package com.dfsek.terra.config.loaders;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.polydev.gaea.math.ProbabilityCollection;
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
|
import org.polydev.gaea.world.Flora;
|
||||||
import org.polydev.gaea.world.palette.Palette;
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
@@ -17,18 +18,21 @@ public final class Types {
|
|||||||
public static final Type MATERIAL_PROBABILITY_COLLECTION_TYPE;
|
public static final Type MATERIAL_PROBABILITY_COLLECTION_TYPE;
|
||||||
public static final Type BLOCK_DATA_PALETTE_TYPE;
|
public static final Type BLOCK_DATA_PALETTE_TYPE;
|
||||||
public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
|
public static final Type BLOCK_DATA_PROBABILITY_COLLECTION_TYPE;
|
||||||
|
public static final Type FLORA_PROBABILITY_COLLECTION_TYPE;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
MATERIAL_SET_TYPE = getType("materialSet");
|
MATERIAL_SET_TYPE = getType("materialSet");
|
||||||
MATERIAL_PROBABILITY_COLLECTION_TYPE = getType("materialProbabilityCollection");
|
MATERIAL_PROBABILITY_COLLECTION_TYPE = getType("materialProbabilityCollection");
|
||||||
BLOCK_DATA_PALETTE_TYPE = getType("blockDataPalette");
|
BLOCK_DATA_PALETTE_TYPE = getType("blockDataPalette");
|
||||||
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockDataProbabilityCollection");
|
BLOCK_DATA_PROBABILITY_COLLECTION_TYPE = getType("blockDataProbabilityCollection");
|
||||||
|
FLORA_PROBABILITY_COLLECTION_TYPE = getType("floraProbabilityCollection");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Set<Material> materialSet;
|
private Set<Material> materialSet;
|
||||||
private Palette<BlockData> blockDataPalette;
|
private Palette<BlockData> blockDataPalette;
|
||||||
private ProbabilityCollection<Material> materialProbabilityCollection;
|
private ProbabilityCollection<Material> materialProbabilityCollection;
|
||||||
private ProbabilityCollection<BlockData> blockDataProbabilityCollection;
|
private ProbabilityCollection<BlockData> blockDataProbabilityCollection;
|
||||||
|
private ProbabilityCollection<Flora> floraProbabilityCollection;
|
||||||
|
|
||||||
private static Type getType(String dummyFieldName) {
|
private static Type getType(String dummyFieldName) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import com.dfsek.terra.biome.palette.PaletteHolder;
|
|||||||
import com.dfsek.terra.biome.palette.SinglePalette;
|
import com.dfsek.terra.biome.palette.SinglePalette;
|
||||||
import com.dfsek.terra.carving.UserDefinedCarver;
|
import com.dfsek.terra.carving.UserDefinedCarver;
|
||||||
import com.dfsek.terra.config.base.ConfigPack;
|
import com.dfsek.terra.config.base.ConfigPack;
|
||||||
|
import com.dfsek.terra.generation.items.flora.FloraLayer;
|
||||||
import com.dfsek.terra.generation.items.ores.Ore;
|
import com.dfsek.terra.generation.items.ores.Ore;
|
||||||
import com.dfsek.terra.structure.TerraStructure;
|
import com.dfsek.terra.structure.TerraStructure;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@@ -51,9 +52,9 @@ public class BiomeTemplate implements ConfigTemplate {
|
|||||||
@Value("noise-equation")
|
@Value("noise-equation")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
private String noiseEquation;
|
private String noiseEquation;
|
||||||
@Value("ores")
|
//@Value("ores")
|
||||||
@Abstractable
|
//@Abstractable
|
||||||
@Default
|
//@Default
|
||||||
private List<Ore> ores = new GlueList<>();
|
private List<Ore> ores = new GlueList<>();
|
||||||
@Value("ocean.level")
|
@Value("ocean.level")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@@ -76,6 +77,11 @@ public class BiomeTemplate implements ConfigTemplate {
|
|||||||
@Abstractable
|
@Abstractable
|
||||||
private String elevationEquation = null;
|
private String elevationEquation = null;
|
||||||
|
|
||||||
|
@Value("flora")
|
||||||
|
@Abstractable
|
||||||
|
@Default
|
||||||
|
private List<FloraLayer> flora = new GlueList<>();
|
||||||
|
|
||||||
@Value("slabs.enable")
|
@Value("slabs.enable")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
@@ -100,6 +106,10 @@ public class BiomeTemplate implements ConfigTemplate {
|
|||||||
return slabThreshold;
|
return slabThreshold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<FloraLayer> getFlora() {
|
||||||
|
return flora;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean doSlabs() {
|
public boolean doSlabs() {
|
||||||
return doSlabs;
|
return doSlabs;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ import com.dfsek.tectonic.annotations.Abstractable;
|
|||||||
import com.dfsek.tectonic.annotations.Default;
|
import com.dfsek.tectonic.annotations.Default;
|
||||||
import com.dfsek.tectonic.annotations.Value;
|
import com.dfsek.tectonic.annotations.Value;
|
||||||
import com.dfsek.tectonic.config.ConfigTemplate;
|
import com.dfsek.tectonic.config.ConfigTemplate;
|
||||||
import com.dfsek.terra.biome.palette.PaletteHolder;
|
import com.dfsek.terra.biome.palette.PaletteLayer;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@SuppressWarnings({"FieldMayBeFinal", "unused"})
|
@SuppressWarnings({"FieldMayBeFinal", "unused"})
|
||||||
@@ -18,16 +18,21 @@ public class FloraTemplate implements ConfigTemplate {
|
|||||||
|
|
||||||
@Value("spawnable")
|
@Value("spawnable")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
private Set<BlockData> spawnable;
|
private Set<Material> spawnable;
|
||||||
|
|
||||||
@Value("replaceable")
|
@Value("replaceable")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@Default
|
@Default
|
||||||
private Set<BlockData> replaceable = Sets.newHashSet(Material.AIR.createBlockData());
|
private Set<Material> replaceable = Sets.newHashSet(Material.AIR);
|
||||||
|
|
||||||
|
@Value("irrigable")
|
||||||
|
@Abstractable
|
||||||
|
@Default
|
||||||
|
private Set<Material> irrigable = null;
|
||||||
|
|
||||||
@Value("layers")
|
@Value("layers")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
private PaletteHolder floraPalette;
|
private List<PaletteLayer> palette;
|
||||||
|
|
||||||
@Value("physics")
|
@Value("physics")
|
||||||
@Abstractable
|
@Abstractable
|
||||||
@@ -39,20 +44,24 @@ public class FloraTemplate implements ConfigTemplate {
|
|||||||
@Default
|
@Default
|
||||||
private boolean ceiling = false;
|
private boolean ceiling = false;
|
||||||
|
|
||||||
public Set<BlockData> getReplaceable() {
|
public Set<Material> getReplaceable() {
|
||||||
return replaceable;
|
return replaceable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<BlockData> getSpawnable() {
|
public Set<Material> getSpawnable() {
|
||||||
return spawnable;
|
return spawnable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Material> getIrrigable() {
|
||||||
|
return irrigable;
|
||||||
|
}
|
||||||
|
|
||||||
public String getID() {
|
public String getID() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PaletteHolder getFloraPalette() {
|
public List<PaletteLayer> getFloraPalette() {
|
||||||
return floraPalette;
|
return palette;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean doPhysics() {
|
public boolean doPhysics() {
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package com.dfsek.terra.generation.items.flora;
|
||||||
|
|
||||||
|
import com.dfsek.terra.procgen.math.Vector2;
|
||||||
|
import org.bukkit.Chunk;
|
||||||
|
import org.polydev.gaea.math.FastNoiseLite;
|
||||||
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
|
import org.polydev.gaea.math.Range;
|
||||||
|
import org.polydev.gaea.world.Flora;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class FloraLayer {
|
||||||
|
private final double density;
|
||||||
|
private final Range level;
|
||||||
|
private final ProbabilityCollection<Flora> layer;
|
||||||
|
private final FastNoiseLite noise;
|
||||||
|
|
||||||
|
public FloraLayer(double density, Range level, ProbabilityCollection<Flora> layer, FastNoiseLite noise) {
|
||||||
|
this.density = density;
|
||||||
|
this.level = level;
|
||||||
|
this.layer = layer;
|
||||||
|
this.noise = noise;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getDensity() {
|
||||||
|
return density;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void plant(Chunk chunk, Vector2 coords, Random random) {
|
||||||
|
Flora item = noise == null ? layer.get(random) : layer.get(noise, (chunk.getX() << 4) + coords.getX(), (chunk.getZ() << 4) + coords.getZ());
|
||||||
|
item.getValidSpawnsAt(chunk, (int) coords.getX(), (int) coords.getZ(), level).forEach(block -> item.plant(block.getLocation()));
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
package com.dfsek.terra.generation.items;
|
package com.dfsek.terra.generation.items.flora;
|
||||||
|
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
@@ -4,7 +4,7 @@ import com.dfsek.terra.TerraProfiler;
|
|||||||
import com.dfsek.terra.TerraWorld;
|
import com.dfsek.terra.TerraWorld;
|
||||||
import com.dfsek.terra.biome.UserDefinedBiome;
|
import com.dfsek.terra.biome.UserDefinedBiome;
|
||||||
import com.dfsek.terra.biome.grid.TerraBiomeGrid;
|
import com.dfsek.terra.biome.grid.TerraBiomeGrid;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.procgen.math.Vector2;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@@ -24,29 +24,14 @@ public class FloraPopulator extends GaeaBlockPopulator {
|
|||||||
try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) {
|
try(ProfileFuture ignored = TerraProfiler.fromWorld(world).measure("FloraTime")) {
|
||||||
TerraWorld tw = TerraWorld.getWorld(world);
|
TerraWorld tw = TerraWorld.getWorld(world);
|
||||||
if(!tw.isSafe()) return;
|
if(!tw.isSafe()) return;
|
||||||
int originX = chunk.getX() << 4;
|
|
||||||
int originZ = chunk.getZ() << 4;
|
|
||||||
TerraBiomeGrid grid = tw.getGrid();
|
TerraBiomeGrid grid = tw.getGrid();
|
||||||
for(int x = 0; x < 16; x++) {
|
for(int x = 0; x < 16; x++) {
|
||||||
for(int z = 0; z < 16; z++) {
|
for(int z = 0; z < 16; z++) {
|
||||||
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE);
|
UserDefinedBiome biome = (UserDefinedBiome) grid.getBiome((chunk.getX() << 4) + x, (chunk.getZ() << 4) + z, GenerationPhase.POPULATE);
|
||||||
if(biome.getDecorator().getFloraChance() <= 0) continue;
|
Vector2 l = new Vector2(x, z);
|
||||||
try {
|
biome.getConfig().getFlora().forEach(layer -> {
|
||||||
BiomeTemplate c = biome.getConfig();
|
if(layer.getDensity() >= random.nextDouble() * 100D) layer.plant(chunk, l, random);
|
||||||
/*
|
});
|
||||||
for(int i = 0; i < 0; i++) {
|
|
||||||
Flora item;
|
|
||||||
if(f.isFloraSimplex())
|
|
||||||
item = biome.getDecorator().getFlora().get(f.getFloraNoise(), originX + x, originZ + z);
|
|
||||||
else item = biome.getDecorator().getFlora().get(random);
|
|
||||||
for(Block highest : item.getValidSpawnsAt(chunk, x, z, c.getFloraHeights(item))) {
|
|
||||||
if(random.nextInt(100) < biome.getDecorator().getFloraChance())
|
|
||||||
item.plant(highest.getLocation());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
} catch(NullPointerException ignore) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.dfsek.terra.biome.palette.PaletteHolder;
|
|||||||
import com.dfsek.terra.biome.palette.PaletteLayer;
|
import com.dfsek.terra.biome.palette.PaletteLayer;
|
||||||
import com.dfsek.terra.carving.CarverPalette;
|
import com.dfsek.terra.carving.CarverPalette;
|
||||||
import com.dfsek.terra.config.loaders.BlockDataLoader;
|
import com.dfsek.terra.config.loaders.BlockDataLoader;
|
||||||
|
import com.dfsek.terra.config.loaders.FloraLayerLoader;
|
||||||
import com.dfsek.terra.config.loaders.GridSpawnLoader;
|
import com.dfsek.terra.config.loaders.GridSpawnLoader;
|
||||||
import com.dfsek.terra.config.loaders.MaterialLoader;
|
import com.dfsek.terra.config.loaders.MaterialLoader;
|
||||||
import com.dfsek.terra.config.loaders.PaletteHolderLoader;
|
import com.dfsek.terra.config.loaders.PaletteHolderLoader;
|
||||||
@@ -13,6 +14,7 @@ import com.dfsek.terra.config.loaders.ProbabilityCollectionLoader;
|
|||||||
import com.dfsek.terra.config.loaders.RangeLoader;
|
import com.dfsek.terra.config.loaders.RangeLoader;
|
||||||
import com.dfsek.terra.config.loaders.VanillaBiomeLoader;
|
import com.dfsek.terra.config.loaders.VanillaBiomeLoader;
|
||||||
import com.dfsek.terra.config.loaders.base.CarverPaletteLoader;
|
import com.dfsek.terra.config.loaders.base.CarverPaletteLoader;
|
||||||
|
import com.dfsek.terra.generation.items.flora.FloraLayer;
|
||||||
import com.dfsek.terra.procgen.GridSpawn;
|
import com.dfsek.terra.procgen.GridSpawn;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
@@ -63,6 +65,7 @@ public final class ConfigUtil {
|
|||||||
.registerLoader(PaletteLayer.class, new PaletteLayerLoader())
|
.registerLoader(PaletteLayer.class, new PaletteLayerLoader())
|
||||||
.registerLoader(Biome.class, new VanillaBiomeLoader())
|
.registerLoader(Biome.class, new VanillaBiomeLoader())
|
||||||
.registerLoader(BlockData.class, new BlockDataLoader())
|
.registerLoader(BlockData.class, new BlockDataLoader())
|
||||||
.registerLoader(Material.class, new MaterialLoader());
|
.registerLoader(Material.class, new MaterialLoader())
|
||||||
|
.registerLoader(FloraLayer.class, new FloraLayerLoader());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user