From f3644200071addc266cc2ac65c87d762b717609d Mon Sep 17 00:00:00 2001 From: dfsek Date: Fri, 27 Nov 2020 02:08:25 -0700 Subject: [PATCH] Actually gets to world gen now B) --- src/main/java/com/dfsek/terra/TerraWorld.java | 4 ++-- .../java/com/dfsek/terra/biome/BiomeZone.java | 2 +- .../com/dfsek/terra/biome/UserDefinedBiome.java | 6 +++++- .../biome/palette/PaletteHolderBuilder.java | 3 ++- .../dfsek/terra/biome/palette/PaletteLayer.java | 4 +++- .../dfsek/terra/biome/palette/SinglePalette.java | 16 ++++++++++++++++ .../dfsek/terra/carving/UserDefinedCarver.java | 5 ++--- .../com/dfsek/terra/config/base/ConfigPack.java | 4 +++- .../terra/config/builder/BiomeGridBuilder.java | 6 +++--- .../terra/config/loaders/PaletteLayerLoader.java | 1 + .../loaders/ProbabilityCollectionLoader.java | 2 +- .../terra/generation/TerraChunkGenerator.java | 7 ++++--- .../dfsek/terra/registry/PaletteRegistry.java | 9 ++++++++- .../java/com/dfsek/terra/util/ConfigUtil.java | 5 ++++- 14 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/dfsek/terra/biome/palette/SinglePalette.java diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java index 72628e99f..aa24fe51c 100644 --- a/src/main/java/com/dfsek/terra/TerraWorld.java +++ b/src/main/java/com/dfsek/terra/TerraWorld.java @@ -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; diff --git a/src/main/java/com/dfsek/terra/biome/BiomeZone.java b/src/main/java/com/dfsek/terra/biome/BiomeZone.java index 3f0d4e20e..2631789da 100644 --- a/src/main/java/com/dfsek/terra/biome/BiomeZone.java +++ b/src/main/java/com/dfsek/terra/biome/BiomeZone.java @@ -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; diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java index 6701f769e..253160751 100644 --- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java +++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java @@ -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 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())); } } diff --git a/src/main/java/com/dfsek/terra/biome/palette/PaletteHolderBuilder.java b/src/main/java/com/dfsek/terra/biome/palette/PaletteHolderBuilder.java index 940226076..f97eb71ad 100644 --- a/src/main/java/com/dfsek/terra/biome/palette/PaletteHolderBuilder.java +++ b/src/main/java/com/dfsek/terra/biome/palette/PaletteHolderBuilder.java @@ -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[] 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 d = DataUtil.BLANK_PALETTE; for(Map.Entry> e : paletteMap.entrySet()) { if(e.getKey() >= y) { diff --git a/src/main/java/com/dfsek/terra/biome/palette/PaletteLayer.java b/src/main/java/com/dfsek/terra/biome/palette/PaletteLayer.java index aa086d707..21a57e049 100644 --- a/src/main/java/com/dfsek/terra/biome/palette/PaletteLayer.java +++ b/src/main/java/com/dfsek/terra/biome/palette/PaletteLayer.java @@ -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 layer; private final int size; - public PaletteLayer(ProbabilityCollection layer, int size) { + public PaletteLayer(@NotNull ProbabilityCollection layer, int size) { this.layer = layer; this.size = size; } + @NotNull public ProbabilityCollection getLayer() { return layer; } diff --git a/src/main/java/com/dfsek/terra/biome/palette/SinglePalette.java b/src/main/java/com/dfsek/terra/biome/palette/SinglePalette.java new file mode 100644 index 000000000..cb6ad3ca3 --- /dev/null +++ b/src/main/java/com/dfsek/terra/biome/palette/SinglePalette.java @@ -0,0 +1,16 @@ +package com.dfsek.terra.biome.palette; + +import org.polydev.gaea.world.palette.Palette; + +public class SinglePalette extends Palette { + private final E item; + + public SinglePalette(E item) { + this.item = item; + } + + @Override + public E get(int i, int i1, int i2) { + return item; + } +} diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java index e79d67a5b..fff49b990 100644 --- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java @@ -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() { diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java index 54a60c071..3c6c2a43d 100644 --- a/src/main/java/com/dfsek/terra/config/base/ConfigPack.java +++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java @@ -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 paletteTemplates = abstractConfigLoader.load(ConfigUtil.loadFromPath(new File(folder, "palettes").toPath()), PaletteTemplate::new); diff --git a/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java b/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java index 34b58f731..9700ed953 100644 --- a/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java +++ b/src/main/java/com/dfsek/terra/config/builder/BiomeGridBuilder.java @@ -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() { diff --git a/src/main/java/com/dfsek/terra/config/loaders/PaletteLayerLoader.java b/src/main/java/com/dfsek/terra/config/loaders/PaletteLayerLoader.java index 26593194d..1fad98b59 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/PaletteLayerLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/PaletteLayerLoader.java @@ -16,6 +16,7 @@ public class PaletteLayerLoader implements TypeLoader { public PaletteLayer load(Type type, Object o, ConfigLoader configLoader) throws LoadException { Map map = (Map) o; ProbabilityCollection collection = (ProbabilityCollection) 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")); } } diff --git a/src/main/java/com/dfsek/terra/config/loaders/ProbabilityCollectionLoader.java b/src/main/java/com/dfsek/terra/config/loaders/ProbabilityCollectionLoader.java index 12690e56c..5680d153c 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/ProbabilityCollectionLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/ProbabilityCollectionLoader.java @@ -37,6 +37,6 @@ public class ProbabilityCollectionLoader implements TypeLoader getPalette(int x, int y, int z, BiomeTemplate c, ChunkInterpolator interpolator, ElevationInterpolator elevationInterpolator) { - Palette 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; } diff --git a/src/main/java/com/dfsek/terra/registry/PaletteRegistry.java b/src/main/java/com/dfsek/terra/registry/PaletteRegistry.java index 13c380214..2e318533a 100644 --- a/src/main/java/com/dfsek/terra/registry/PaletteRegistry.java +++ b/src/main/java/com/dfsek/terra/registry/PaletteRegistry.java @@ -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> { - + @Override + public Palette 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); + } } diff --git a/src/main/java/com/dfsek/terra/util/ConfigUtil.java b/src/main/java/com/dfsek/terra/util/ConfigUtil.java index d5062caad..e5b4bf49d 100644 --- a/src/main/java/com/dfsek/terra/util/ConfigUtil.java +++ b/src/main/java/com/dfsek/terra/util/ConfigUtil.java @@ -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()); } }