mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-08-30 13:50:46 +00:00
Actually gets to world gen now B)
This commit is contained in:
@@ -45,7 +45,7 @@ public class TerraWorld {
|
|||||||
Debug.info("Loaded single-biome grid " + partName);
|
Debug.info("Loaded single-biome grid " + partName);
|
||||||
} else {
|
} else {
|
||||||
BiomeGridBuilder g = config.getBiomeGrid(partName);
|
BiomeGridBuilder g = config.getBiomeGrid(partName);
|
||||||
definedGrids[i] = g.build(w);
|
definedGrids[i] = g.build(w, worldConfig);
|
||||||
}
|
}
|
||||||
} catch(NullPointerException e) {
|
} catch(NullPointerException e) {
|
||||||
safe = false;
|
safe = false;
|
||||||
@@ -66,7 +66,7 @@ public class TerraWorld {
|
|||||||
Debug.info("Loaded single-biome erosion grid " + erosionName);
|
Debug.info("Loaded single-biome erosion grid " + erosionName);
|
||||||
} else {
|
} else {
|
||||||
BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName));
|
BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName));
|
||||||
erosion = g.build(w);
|
erosion = g.build(w, worldConfig);
|
||||||
}
|
}
|
||||||
} catch(NullPointerException e) {
|
} catch(NullPointerException e) {
|
||||||
safe = false;
|
safe = false;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public class BiomeZone {
|
|||||||
this.noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
|
this.noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
|
||||||
this.noise.setFractalType(FastNoiseLite.FractalType.FBm);
|
this.noise.setFractalType(FastNoiseLite.FractalType.FBm);
|
||||||
this.noise.setFractalOctaves(4);
|
this.noise.setFractalOctaves(4);
|
||||||
this.noise.setFrequency(wc.getConfig().getTemplate().getZoneFreq());
|
this.noise.setFrequency(1D / wc.getConfig().getTemplate().getZoneFreq());
|
||||||
this.grids = grids;
|
this.grids = grids;
|
||||||
imageLoader = wc.imageLoader;
|
imageLoader = wc.imageLoader;
|
||||||
useImage = wc.fromImage;
|
useImage = wc.fromImage;
|
||||||
|
|||||||
@@ -4,13 +4,16 @@ import com.dfsek.terra.WorldObject;
|
|||||||
import com.dfsek.terra.config.builder.GeneratorBuilder;
|
import com.dfsek.terra.config.builder.GeneratorBuilder;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
import com.dfsek.terra.generation.UserDefinedDecorator;
|
import com.dfsek.terra.generation.UserDefinedDecorator;
|
||||||
|
import com.dfsek.terra.generation.config.WorldGenerator;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.polydev.gaea.biome.Biome;
|
import org.polydev.gaea.biome.Biome;
|
||||||
import org.polydev.gaea.biome.Decorator;
|
import org.polydev.gaea.biome.Decorator;
|
||||||
import org.polydev.gaea.biome.Generator;
|
import org.polydev.gaea.biome.Generator;
|
||||||
import org.polydev.gaea.structures.features.Feature;
|
import org.polydev.gaea.structures.features.Feature;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class representing a config-defined biome
|
* Class representing a config-defined biome
|
||||||
@@ -22,6 +25,7 @@ public class UserDefinedBiome implements Biome, WorldObject {
|
|||||||
private final String id;
|
private final String id;
|
||||||
private final BiomeTemplate config;
|
private final BiomeTemplate config;
|
||||||
private final boolean erode;
|
private final boolean erode;
|
||||||
|
private final Map<World, WorldGenerator> gens = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorBuilder gen, boolean erode, BiomeTemplate config) {
|
public UserDefinedBiome(org.bukkit.block.Biome vanilla, UserDefinedDecorator dec, GeneratorBuilder gen, boolean erode, BiomeTemplate config) {
|
||||||
@@ -87,6 +91,6 @@ public class UserDefinedBiome implements Biome, WorldObject {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Generator getGenerator(World w) {
|
public Generator getGenerator(World w) {
|
||||||
return gen.build(w.getSeed());
|
return gens.computeIfAbsent(w, world -> gen.build(world.getSeed()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.dfsek.terra.biome.palette;
|
package com.dfsek.terra.biome.palette;
|
||||||
|
|
||||||
import com.dfsek.terra.util.DataUtil;
|
import com.dfsek.terra.util.DataUtil;
|
||||||
|
import net.jafama.FastMath;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.polydev.gaea.world.palette.Palette;
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ public class PaletteHolderBuilder {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public PaletteHolder build() {
|
public PaletteHolder build() {
|
||||||
Palette<BlockData>[] palettes = new Palette[paletteMap.lastKey() + 1];
|
Palette<BlockData>[] palettes = new Palette[paletteMap.lastKey() + 1];
|
||||||
for(int y = 0; y <= paletteMap.lastKey(); y++) {
|
for(int y = 0; y <= FastMath.max(paletteMap.lastKey(), 255); y++) {
|
||||||
Palette<BlockData> d = DataUtil.BLANK_PALETTE;
|
Palette<BlockData> d = DataUtil.BLANK_PALETTE;
|
||||||
for(Map.Entry<Integer, Palette<BlockData>> e : paletteMap.entrySet()) {
|
for(Map.Entry<Integer, Palette<BlockData>> e : paletteMap.entrySet()) {
|
||||||
if(e.getKey() >= y) {
|
if(e.getKey() >= y) {
|
||||||
|
|||||||
@@ -1,17 +1,19 @@
|
|||||||
package com.dfsek.terra.biome.palette;
|
package com.dfsek.terra.biome.palette;
|
||||||
|
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.polydev.gaea.math.ProbabilityCollection;
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
|
|
||||||
public class PaletteLayer {
|
public class PaletteLayer {
|
||||||
private final ProbabilityCollection<BlockData> layer;
|
private final ProbabilityCollection<BlockData> layer;
|
||||||
private final int size;
|
private final int size;
|
||||||
|
|
||||||
public PaletteLayer(ProbabilityCollection<BlockData> layer, int size) {
|
public PaletteLayer(@NotNull ProbabilityCollection<BlockData> layer, int size) {
|
||||||
this.layer = layer;
|
this.layer = layer;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public ProbabilityCollection<BlockData> getLayer() {
|
public ProbabilityCollection<BlockData> getLayer() {
|
||||||
return layer;
|
return layer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.dfsek.terra.biome.palette;
|
||||||
|
|
||||||
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
|
||||||
|
public class SinglePalette<E> extends Palette<E> {
|
||||||
|
private final E item;
|
||||||
|
|
||||||
|
public SinglePalette(E item) {
|
||||||
|
this.item = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public E get(int i, int i1, int i2) {
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,11 @@
|
|||||||
package com.dfsek.terra.carving;
|
package com.dfsek.terra.carving;
|
||||||
|
|
||||||
import com.dfsek.terra.TerraWorld;
|
import com.dfsek.terra.TerraWorld;
|
||||||
import com.dfsek.terra.biome.UserDefinedBiome;
|
|
||||||
import com.dfsek.terra.config.base.ConfigPack;
|
import com.dfsek.terra.config.base.ConfigPack;
|
||||||
import com.dfsek.terra.config.templates.CarverTemplate;
|
import com.dfsek.terra.config.templates.CarverTemplate;
|
||||||
import net.jafama.FastMath;
|
import net.jafama.FastMath;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.polydev.gaea.generation.GenerationPhase;
|
|
||||||
import org.polydev.gaea.math.Range;
|
import org.polydev.gaea.math.Range;
|
||||||
import org.polydev.gaea.util.FastRandom;
|
import org.polydev.gaea.util.FastRandom;
|
||||||
import org.polydev.gaea.world.carving.Carver;
|
import org.polydev.gaea.world.carving.Carver;
|
||||||
@@ -63,7 +61,8 @@ public class UserDefinedCarver extends Carver {
|
|||||||
@Override
|
@Override
|
||||||
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
|
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
|
||||||
ConfigPack c = TerraWorld.getWorld(w).getConfig();
|
ConfigPack c = TerraWorld.getWorld(w).getConfig();
|
||||||
return new FastRandom(random.nextLong() + hash).nextInt(100) < ((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getConfig().getCarvers().get(this);
|
return false;
|
||||||
|
//return new FastRandom(random.nextLong() + hash).nextInt(100) < ((UserDefinedBiome) TerraWorld.getWorld(w).getGrid().getBiome(chunkX << 4, chunkZ << 4, GenerationPhase.POPULATE)).getConfig().getCarvers().get(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public CarverTemplate getConfig() {
|
public CarverTemplate getConfig() {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import com.dfsek.terra.registry.CarverRegistry;
|
|||||||
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.world.palette.Palette;
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@@ -65,7 +66,8 @@ public class ConfigPack {
|
|||||||
|
|
||||||
AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
|
AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
|
||||||
abstractConfigLoader
|
abstractConfigLoader
|
||||||
.registerLoader(Palette.class, paletteRegistry);
|
.registerLoader(Palette.class, paletteRegistry)
|
||||||
|
.registerLoader(Biome.class, biomeRegistry);
|
||||||
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);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.dfsek.terra.config.builder;
|
package com.dfsek.terra.config.builder;
|
||||||
|
|
||||||
import com.dfsek.terra.TerraWorld;
|
|
||||||
import com.dfsek.terra.biome.grid.UserDefinedGrid;
|
import com.dfsek.terra.biome.grid.UserDefinedGrid;
|
||||||
|
import com.dfsek.terra.config.base.WorldConfig;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.polydev.gaea.biome.Biome;
|
import org.polydev.gaea.biome.Biome;
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@ public class BiomeGridBuilder {
|
|||||||
|
|
||||||
private Biome[][] biomes;
|
private Biome[][] biomes;
|
||||||
|
|
||||||
public UserDefinedGrid build(World world) {
|
public UserDefinedGrid build(World world, WorldConfig config) {
|
||||||
return new UserDefinedGrid(world, xFreq, zFreq, biomes, TerraWorld.getWorld(world).getWorldConfig());
|
return new UserDefinedGrid(world, 1D / xFreq, 1D / zFreq, biomes, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getXFreq() {
|
public double getXFreq() {
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public class PaletteLayerLoader implements TypeLoader<PaletteLayer> {
|
|||||||
public PaletteLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
|
public PaletteLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
|
||||||
Map<String, Object> map = (Map<String, Object>) o;
|
Map<String, Object> map = (Map<String, Object>) o;
|
||||||
ProbabilityCollection<BlockData> collection = (ProbabilityCollection<BlockData>) configLoader.loadType(Types.BLOCK_DATA_PROBABILITY_COLLECTION_TYPE, map.get("materials"));
|
ProbabilityCollection<BlockData> collection = (ProbabilityCollection<BlockData>) configLoader.loadType(Types.BLOCK_DATA_PROBABILITY_COLLECTION_TYPE, map.get("materials"));
|
||||||
|
if(collection == null) throw new LoadException("Collection is null: " + map.get("materials"));
|
||||||
return new PaletteLayer(collection, (Integer) map.get("layers"));
|
return new PaletteLayer(collection, (Integer) map.get("layers"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,6 +37,6 @@ public class ProbabilityCollectionLoader implements TypeLoader<ProbabilityCollec
|
|||||||
} else throw new LoadException("Unable to load config! Could not retrieve parameterized type: " + type);
|
} else throw new LoadException("Unable to load config! Could not retrieve parameterized type: " + type);
|
||||||
|
|
||||||
|
|
||||||
return null;
|
return collection;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.dfsek.terra.Terra;
|
|||||||
import com.dfsek.terra.TerraProfiler;
|
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.palette.PaletteHolder;
|
||||||
import com.dfsek.terra.config.base.ConfigPack;
|
import com.dfsek.terra.config.base.ConfigPack;
|
||||||
import com.dfsek.terra.config.lang.LangUtil;
|
import com.dfsek.terra.config.lang.LangUtil;
|
||||||
import com.dfsek.terra.config.templates.BiomeTemplate;
|
import com.dfsek.terra.config.templates.BiomeTemplate;
|
||||||
@@ -78,7 +79,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static Palette<BlockData> getPalette(int x, int y, int z, BiomeTemplate c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) {
|
private static Palette<BlockData> getPalette(int x, int y, int z, BiomeTemplate c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) {
|
||||||
Palette<BlockData> slant = c.getSlantPalette().getPalette(y);
|
PaletteHolder slant = c.getSlantPalette();
|
||||||
if(slant != null) {
|
if(slant != null) {
|
||||||
double ySlantOffsetTop = c.getSlantOffsetTop();
|
double ySlantOffsetTop = c.getSlantOffsetTop();
|
||||||
double ySlantOffsetBottom = c.getSlantOffsetBottom();
|
double ySlantOffsetBottom = c.getSlantOffsetBottom();
|
||||||
@@ -91,7 +92,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
|
|||||||
boolean east = interpolator.getNoise(x + 1, y - elevationInterpolator.getElevation(x + 1, z), z) > 0;
|
boolean east = interpolator.getNoise(x + 1, y - elevationInterpolator.getElevation(x + 1, z), z) > 0;
|
||||||
boolean west = interpolator.getNoise(x - 1, y - elevationInterpolator.getElevation(x - 1, z), z) > 0;
|
boolean west = interpolator.getNoise(x - 1, y - elevationInterpolator.getElevation(x - 1, z), z) > 0;
|
||||||
|
|
||||||
if((north || south || east || west) && (!(north && south && east && west))) return slant;
|
if((north || south || east || west) && (!(north && south && east && west))) return slant.getPalette(y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return c.getPalette().getPalette(y);
|
return c.getPalette().getPalette(y);
|
||||||
@@ -180,7 +181,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
|
|||||||
}*/
|
}*/
|
||||||
paletteLevel++;
|
paletteLevel++;
|
||||||
} else if(y <= sea) {
|
} else if(y <= sea) {
|
||||||
chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, z + zOrig));
|
//chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, z + zOrig));
|
||||||
paletteLevel = 0;
|
paletteLevel = 0;
|
||||||
} else paletteLevel = 0;
|
} else paletteLevel = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
package com.dfsek.terra.registry;
|
package com.dfsek.terra.registry;
|
||||||
|
|
||||||
|
import com.dfsek.terra.biome.palette.SinglePalette;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.polydev.gaea.world.palette.Palette;
|
import org.polydev.gaea.world.palette.Palette;
|
||||||
|
|
||||||
public class PaletteRegistry extends TerraRegistry<Palette<BlockData>> {
|
public class PaletteRegistry extends TerraRegistry<Palette<BlockData>> {
|
||||||
|
@Override
|
||||||
|
public Palette<BlockData> get(String id) {
|
||||||
|
if(id.startsWith("BLOCK:"))
|
||||||
|
return new SinglePalette<>(Bukkit.createBlockData(id.substring(6))); // Return single palette for BLOCK: shortcut.
|
||||||
|
return super.get(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.dfsek.tectonic.loading.TypeRegistry;
|
|||||||
import com.dfsek.terra.biome.palette.PaletteHolder;
|
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.GridSpawnLoader;
|
import com.dfsek.terra.config.loaders.GridSpawnLoader;
|
||||||
import com.dfsek.terra.config.loaders.PaletteHolderLoader;
|
import com.dfsek.terra.config.loaders.PaletteHolderLoader;
|
||||||
import com.dfsek.terra.config.loaders.PaletteLayerLoader;
|
import com.dfsek.terra.config.loaders.PaletteLayerLoader;
|
||||||
@@ -13,6 +14,7 @@ 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.procgen.GridSpawn;
|
import com.dfsek.terra.procgen.GridSpawn;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.polydev.gaea.math.ProbabilityCollection;
|
import org.polydev.gaea.math.ProbabilityCollection;
|
||||||
import org.polydev.gaea.math.Range;
|
import org.polydev.gaea.math.Range;
|
||||||
|
|
||||||
@@ -57,6 +59,7 @@ public final class ConfigUtil {
|
|||||||
.registerLoader(GridSpawn.class, new GridSpawnLoader())
|
.registerLoader(GridSpawn.class, new GridSpawnLoader())
|
||||||
.registerLoader(PaletteHolder.class, new PaletteHolderLoader())
|
.registerLoader(PaletteHolder.class, new PaletteHolderLoader())
|
||||||
.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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user