Actually gets to world gen now B)

This commit is contained in:
dfsek
2020-11-27 02:08:25 -07:00
parent 96ff875d2b
commit f364420007
14 changed files with 55 additions and 19 deletions

View File

@@ -45,7 +45,7 @@ public class TerraWorld {
Debug.info("Loaded single-biome grid " + partName);
} else {
BiomeGridBuilder g = config.getBiomeGrid(partName);
definedGrids[i] = g.build(w);
definedGrids[i] = g.build(w, worldConfig);
}
} catch(NullPointerException e) {
safe = false;
@@ -66,7 +66,7 @@ public class TerraWorld {
Debug.info("Loaded single-biome erosion grid " + erosionName);
} else {
BiomeGridBuilder g = Objects.requireNonNull(config.getBiomeGrid(erosionName));
erosion = g.build(w);
erosion = g.build(w, worldConfig);
}
} catch(NullPointerException e) {
safe = false;

View File

@@ -26,7 +26,7 @@ public class BiomeZone {
this.noise.setNoiseType(FastNoiseLite.NoiseType.OpenSimplex2);
this.noise.setFractalType(FastNoiseLite.FractalType.FBm);
this.noise.setFractalOctaves(4);
this.noise.setFrequency(wc.getConfig().getTemplate().getZoneFreq());
this.noise.setFrequency(1D / wc.getConfig().getTemplate().getZoneFreq());
this.grids = grids;
imageLoader = wc.imageLoader;
useImage = wc.fromImage;

View File

@@ -4,13 +4,16 @@ import com.dfsek.terra.WorldObject;
import com.dfsek.terra.config.builder.GeneratorBuilder;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.generation.UserDefinedDecorator;
import com.dfsek.terra.generation.config.WorldGenerator;
import org.bukkit.World;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.biome.Decorator;
import org.polydev.gaea.biome.Generator;
import org.polydev.gaea.structures.features.Feature;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Class representing a config-defined biome
@@ -22,6 +25,7 @@ public class UserDefinedBiome implements Biome, WorldObject {
private final String id;
private final BiomeTemplate config;
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) {
@@ -87,6 +91,6 @@ public class UserDefinedBiome implements Biome, WorldObject {
@Override
public Generator getGenerator(World w) {
return gen.build(w.getSeed());
return gens.computeIfAbsent(w, world -> gen.build(world.getSeed()));
}
}

View File

@@ -1,6 +1,7 @@
package com.dfsek.terra.biome.palette;
import com.dfsek.terra.util.DataUtil;
import net.jafama.FastMath;
import org.bukkit.block.data.BlockData;
import org.polydev.gaea.world.palette.Palette;
@@ -18,7 +19,7 @@ public class PaletteHolderBuilder {
@SuppressWarnings("unchecked")
public PaletteHolder build() {
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;
for(Map.Entry<Integer, Palette<BlockData>> e : paletteMap.entrySet()) {
if(e.getKey() >= y) {

View File

@@ -1,17 +1,19 @@
package com.dfsek.terra.biome.palette;
import org.bukkit.block.data.BlockData;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.math.ProbabilityCollection;
public class PaletteLayer {
private final ProbabilityCollection<BlockData> layer;
private final int size;
public PaletteLayer(ProbabilityCollection<BlockData> layer, int size) {
public PaletteLayer(@NotNull ProbabilityCollection<BlockData> layer, int size) {
this.layer = layer;
this.size = size;
}
@NotNull
public ProbabilityCollection<BlockData> getLayer() {
return layer;
}

View File

@@ -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;
}
}

View File

@@ -1,13 +1,11 @@
package com.dfsek.terra.carving;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.templates.CarverTemplate;
import net.jafama.FastMath;
import org.bukkit.World;
import org.bukkit.util.Vector;
import org.polydev.gaea.generation.GenerationPhase;
import org.polydev.gaea.math.Range;
import org.polydev.gaea.util.FastRandom;
import org.polydev.gaea.world.carving.Carver;
@@ -63,7 +61,8 @@ public class UserDefinedCarver extends Carver {
@Override
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
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() {

View File

@@ -26,6 +26,7 @@ import com.dfsek.terra.registry.CarverRegistry;
import com.dfsek.terra.registry.PaletteRegistry;
import com.dfsek.terra.registry.StructureRegistry;
import com.dfsek.terra.util.ConfigUtil;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.world.palette.Palette;
import java.io.File;
@@ -65,7 +66,8 @@ public class ConfigPack {
AbstractConfigLoader abstractConfigLoader = new AbstractConfigLoader();
abstractConfigLoader
.registerLoader(Palette.class, paletteRegistry);
.registerLoader(Palette.class, paletteRegistry)
.registerLoader(Biome.class, biomeRegistry);
ConfigUtil.registerAllLoaders(abstractConfigLoader);
List<PaletteTemplate> paletteTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "palettes").toPath()), PaletteTemplate::new);

View File

@@ -1,7 +1,7 @@
package com.dfsek.terra.config.builder;
import com.dfsek.terra.TerraWorld;
import com.dfsek.terra.biome.grid.UserDefinedGrid;
import com.dfsek.terra.config.base.WorldConfig;
import org.bukkit.World;
import org.polydev.gaea.biome.Biome;
@@ -11,8 +11,8 @@ public class BiomeGridBuilder {
private Biome[][] biomes;
public UserDefinedGrid build(World world) {
return new UserDefinedGrid(world, xFreq, zFreq, biomes, TerraWorld.getWorld(world).getWorldConfig());
public UserDefinedGrid build(World world, WorldConfig config) {
return new UserDefinedGrid(world, 1D / xFreq, 1D / zFreq, biomes, config);
}
public double getXFreq() {

View File

@@ -16,6 +16,7 @@ public class PaletteLayerLoader implements TypeLoader<PaletteLayer> {
public PaletteLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
Map<String, Object> map = (Map<String, Object>) o;
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"));
}
}

View File

@@ -37,6 +37,6 @@ public class ProbabilityCollectionLoader implements TypeLoader<ProbabilityCollec
} else throw new LoadException("Unable to load config! Could not retrieve parameterized type: " + type);
return null;
return collection;
}
}

View File

@@ -5,6 +5,7 @@ import com.dfsek.terra.Terra;
import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.TerraWorld;
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.lang.LangUtil;
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) {
Palette<BlockData> slant = c.getSlantPalette().getPalette(y);
PaletteHolder slant = c.getSlantPalette();
if(slant != null) {
double ySlantOffsetTop = c.getSlantOffsetTop();
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 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);
@@ -180,7 +181,7 @@ public class TerraChunkGenerator extends GaeaChunkGenerator {
}*/
paletteLevel++;
} 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;
} else paletteLevel = 0;
}

View File

@@ -1,8 +1,15 @@
package com.dfsek.terra.registry;
import com.dfsek.terra.biome.palette.SinglePalette;
import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
import org.polydev.gaea.world.palette.Palette;
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);
}
}

View File

@@ -4,6 +4,7 @@ import com.dfsek.tectonic.loading.TypeRegistry;
import com.dfsek.terra.biome.palette.PaletteHolder;
import com.dfsek.terra.biome.palette.PaletteLayer;
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.PaletteHolderLoader;
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.procgen.GridSpawn;
import org.bukkit.block.Biome;
import org.bukkit.block.data.BlockData;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range;
@@ -57,6 +59,7 @@ public final class ConfigUtil {
.registerLoader(GridSpawn.class, new GridSpawnLoader())
.registerLoader(PaletteHolder.class, new PaletteHolderLoader())
.registerLoader(PaletteLayer.class, new PaletteLayerLoader())
.registerLoader(Biome.class, new VanillaBiomeLoader());
.registerLoader(Biome.class, new VanillaBiomeLoader())
.registerLoader(BlockData.class, new BlockDataLoader());
}
}