diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java index 99fa8292d..86ca44180 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/BiomePaletteTemplate.java @@ -2,7 +2,6 @@ package com.dfsek.terra.addons.chunkgenerator; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; -import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo; diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java index 53bd71e23..1f7c0910b 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/NoiseChunkGenerator3DAddon.java @@ -2,6 +2,7 @@ package com.dfsek.terra.addons.chunkgenerator; import com.dfsek.terra.addons.chunkgenerator.generation.generators.NoiseChunkGenerator3D; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolder; +import com.dfsek.terra.addons.chunkgenerator.palette.PaletteHolderLoader; import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo; import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolderLoader; @@ -15,6 +16,7 @@ import com.dfsek.terra.api.event.events.config.ConfigurationLoadEvent; import com.dfsek.terra.api.event.events.config.pack.ConfigPackPreLoadEvent; import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.registry.exception.DuplicateEntryException; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider; @@ -28,7 +30,7 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe @Inject private TerraPlugin main; - private final Map palettes = new HashMap<>(); + private final Map palettes = new HashMap<>(); @Override public void initialize() { @@ -36,14 +38,18 @@ public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListe } public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException { - event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main)); - event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader()); + event.getPack().getOrCreateRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new NoiseChunkGenerator3D(pack, main, this)); + event.getPack().applyLoader(SlantHolder.class, new SlantHolderLoader()) + .applyLoader(PaletteHolder.class, new PaletteHolderLoader()); } public void onBiomeLoad(ConfigurationLoadEvent event) { - if(event.is(TerraBiome.class)) { - TerraBiome biome = event.getLoadedObject(); - palettes.put(biome, event.load(new BiomePaletteTemplate()).get()); + if(event.is(BiomeBuilder.class)) { + palettes.put(event.getConfiguration().getID(), event.load(new BiomePaletteTemplate()).get()); } } + + public PaletteInfo getPalette(TerraBiome biome) { + return palettes.get(biome.getID()); + } } diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/PaletteUtil.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/PaletteUtil.java index 140ce2d18..d6e08e5b1 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/PaletteUtil.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/PaletteUtil.java @@ -1,14 +1,15 @@ package com.dfsek.terra.addons.chunkgenerator; +import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo; +import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; +import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.generator.Palette; import com.dfsek.terra.api.world.generator.Sampler; public final class PaletteUtil { - public static Palette getPalette(int x, int y, int z, Generator c, Sampler sampler) { - - /* - SlantHolder slant = c.getSlant(); + public static Palette getPalette(int x, int y, int z, Generator c, Sampler sampler, PaletteInfo paletteInfo) { + SlantHolder slant = paletteInfo.getSlantHolder(); if(slant != null) { double slope = MathUtil.derivative(sampler, x, y, z); if(slope > slant.getMinSlope()) { @@ -16,8 +17,6 @@ public final class PaletteUtil { } } - */ - return c.getPaletteSettings().getPalette(y); } } \ No newline at end of file diff --git a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java index 9a41a67ae..df703888d 100644 --- a/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java +++ b/common/addons/chunk-generator-noise-3d/src/main/java/com/dfsek/terra/addons/chunkgenerator/generation/generators/NoiseChunkGenerator3D.java @@ -1,13 +1,17 @@ package com.dfsek.terra.addons.chunkgenerator.generation.generators; +import com.dfsek.terra.addons.chunkgenerator.NoiseChunkGenerator3DAddon; import com.dfsek.terra.addons.chunkgenerator.PaletteUtil; import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.Sampler3D; +import com.dfsek.terra.addons.chunkgenerator.palette.PaletteInfo; +import com.dfsek.terra.addons.chunkgenerator.palette.SlantHolder; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.properties.base.Properties; import com.dfsek.terra.api.block.state.properties.enums.Direction; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.profiler.ProfileFrame; +import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.world.BiomeGrid; import com.dfsek.terra.api.world.TerraWorld; @@ -30,14 +34,17 @@ import java.util.Random; public class NoiseChunkGenerator3D implements TerraChunkGenerator { private final ConfigPack configPack; private final TerraPlugin main; + + private final NoiseChunkGenerator3DAddon addon; private final List blockPopulators = new ArrayList<>(); private final BlockState air; - public NoiseChunkGenerator3D(ConfigPack c, TerraPlugin main) { + public NoiseChunkGenerator3D(ConfigPack c, TerraPlugin main, NoiseChunkGenerator3DAddon addon) { this.configPack = c; this.main = main; this.air = main.getWorldHandle().air(); + this.addon = addon; c.getStages().forEach(stage -> blockPopulators.add(stage.newInstance(c))); } @@ -88,27 +95,35 @@ public class NoiseChunkGenerator3D implements TerraChunkGenerator { int cx = xOrig + x; int cz = zOrig + z; - TerraBiome b = grid.getBiome(cx, cz); - Generator g = b.getGenerator(world); + TerraBiome biome = grid.getBiome(cx, cz); - //int sea = c.getSeaLevel(); - //Palette seaPalette = c.getOceanPalette(); + PaletteInfo paletteInfo = addon.getPalette(biome); + + if(paletteInfo == null) { + main.logger().info("null palette: " + biome.getID()); + } + + Generator generator = biome.getGenerator(world); + + int sea = paletteInfo.getSeaLevel(); + Palette seaPalette = paletteInfo.getOcean(); boolean justSet = false; BlockState data = null; for(int y = world.getMaxHeight() - 1; y >= world.getMinHeight(); y--) { if(sampler.sample(x, y, z) > 0) { justSet = true; - data = PaletteUtil.getPalette(x, y, z, g, sampler).get(paletteLevel, cx, y, cz); + + data = PaletteUtil.getPalette(x, y, z, generator, sampler, paletteInfo).get(paletteLevel, cx, y, cz); chunk.setBlock(x, y, z, data); paletteLevel++; - } /*else if(y <= sea) { + } else if(y <= sea) { chunk.setBlock(x, y, z, seaPalette.get(sea - y, x + xOrig, y, z + zOrig)); justSet = false; paletteLevel = 0; - } */ else { + } else { justSet = false; paletteLevel = 0;