build chunk generator addon

This commit is contained in:
dfsek
2021-07-07 10:54:25 -07:00
parent 66a5cce399
commit 99d64fec36
20 changed files with 64 additions and 83 deletions

View File

@@ -0,0 +1,30 @@
package com.dfsek.terra.addons.chunkgenerator;
import com.dfsek.terra.addons.chunkgenerator.generation.generators.DefaultChunkGenerator3D;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.addon.annotations.Addon;
import com.dfsek.terra.api.addon.annotations.Author;
import com.dfsek.terra.api.addon.annotations.Version;
import com.dfsek.terra.api.event.EventListener;
import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.registry.exception.DuplicateEntryException;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
@Addon("noise-chunk-generator-3d")
@Author("Terra")
@Version("1.0.0")
public class NoiseChunkGenerator3DAddon extends TerraAddon implements EventListener {
@Inject
private TerraPlugin main;
@Override
public void initialize() {
main.getEventManager().registerListener(this, this);
}
public void onPackLoad(ConfigPackPreLoadEvent event) throws DuplicateEntryException {
event.getPack().getCheckedRegistry(ChunkGeneratorProvider.class).register("NOISE_3D", pack -> new DefaultChunkGenerator3D(pack, main));
}
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.api.util;
package com.dfsek.terra.addons.chunkgenerator;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.generator.Palette;

View File

@@ -1,15 +1,13 @@
package com.dfsek.terra.world.generation.generators;
package com.dfsek.terra.addons.chunkgenerator.generation.generators;
import com.dfsek.terra.addons.chunkgenerator.PaletteUtil;
import com.dfsek.terra.addons.chunkgenerator.generation.math.samplers.Sampler3D;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.block.BlockType;
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.block.state.properties.enums.Half;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.math.range.ConstantRange;
import com.dfsek.terra.api.profiler.ProfileFrame;
import com.dfsek.terra.api.util.PaletteUtil;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.BiomeGrid;
import com.dfsek.terra.api.world.TerraWorld;
@@ -18,18 +16,13 @@ import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkData;
import com.dfsek.terra.api.world.generator.Palette;
import com.dfsek.terra.api.world.generator.Sampler;
import com.dfsek.terra.api.world.generator.TerraBlockPopulator;
import com.dfsek.terra.api.world.generator.TerraChunkGenerator;
import com.dfsek.terra.world.Carver;
import com.dfsek.terra.world.carving.NoiseCarver;
import com.dfsek.terra.world.generation.math.samplers.Sampler3D;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class DefaultChunkGenerator3D implements TerraChunkGenerator {
@@ -37,13 +30,9 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
private final TerraPlugin main;
private final List<TerraBlockPopulator> blockPopulators = new ArrayList<>();
private final Carver carver;
public DefaultChunkGenerator3D(ConfigPack c, TerraPlugin main) {
this.configPack = c;
this.main = main;
carver = new NoiseCarver(new ConstantRange(0, 255), main.getWorldHandle().createBlockData("minecraft:air"), main);
}
@Override
@@ -104,9 +93,6 @@ public class DefaultChunkGenerator3D implements TerraChunkGenerator {
}
}
}
if(configPack.doBetaCarvers()) {
carver.carve(world, chunkX, chunkZ, chunk);
}
return chunk;
}
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world.generation.math;
package com.dfsek.terra.addons.chunkgenerator.generation.math;
import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.util.MathUtil;

View File

@@ -1,10 +1,11 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation;
import com.dfsek.terra.api.util.mutable.MutableInteger;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkInterpolator;
import net.jafama.FastMath;
import java.util.HashMap;

View File

@@ -1,10 +1,11 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation;
import com.dfsek.terra.api.util.mutable.MutableInteger;
import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.ChunkInterpolator;
import net.jafama.FastMath;
import java.util.HashMap;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Generator;

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation;
/**
* Class for bilinear interpolation of values arranged on a unit square.

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation;
/**
* Class for bilinear interpolation of values arranged on a unit square.

View File

@@ -1,10 +1,10 @@
package com.dfsek.terra.world.generation.math.samplers;
package com.dfsek.terra.addons.chunkgenerator.generation.math.samplers;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.Sampler;
import com.dfsek.terra.world.generation.math.interpolation.ChunkInterpolator3D;
import com.dfsek.terra.world.generation.math.interpolation.ElevationInterpolator;
import com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation.ChunkInterpolator3D;
import com.dfsek.terra.addons.chunkgenerator.generation.math.interpolation.ElevationInterpolator;
import net.jafama.FastMath;
public class Sampler3D implements Sampler {

View File

@@ -8,6 +8,7 @@ import com.dfsek.terra.api.addon.TerraAddon;
import com.dfsek.terra.api.registry.CheckedRegistry;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.util.seeded.BiomeProviderBuilder;
import com.dfsek.terra.api.world.generator.ChunkGeneratorProvider;
import java.util.Map;
import java.util.Set;
@@ -46,4 +47,6 @@ public interface ConfigPack extends LoaderRegistrar, LoaderHolder, RegistryHolde
boolean vanillaFlora();
RegistryFactory getRegistryFactory();
ChunkGeneratorProvider getGeneratorProvider();
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world;
package com.dfsek.terra.api.world;
import com.dfsek.terra.api.world.ChunkAccess;
import com.dfsek.terra.api.world.World;

View File

@@ -3,5 +3,5 @@ package com.dfsek.terra.api.world.generator;
import com.dfsek.terra.api.config.ConfigPack;
public interface ChunkGeneratorProvider {
ChunkGenerator newInstance(ConfigPack pack);
TerraChunkGenerator newInstance(ConfigPack pack);
}

View File

@@ -1,4 +1,4 @@
package com.dfsek.terra.world.generation.math.interpolation;
package com.dfsek.terra.api.world.generator;
import com.dfsek.terra.api.util.mutable.MutableInteger;
import com.dfsek.terra.api.world.biome.Generator;

View File

@@ -5,8 +5,8 @@ import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.world.ChunkAccess;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.world.Carver;
import com.dfsek.terra.world.generation.math.interpolation.ChunkInterpolator;
import com.dfsek.terra.api.world.Carver;
import com.dfsek.terra.api.world.generator.ChunkInterpolator;
import com.dfsek.terra.world.generation.math.interpolation.ChunkInterpolator3D;
public class NoiseCarver implements Carver {

View File

@@ -1,28 +0,0 @@
package com.dfsek.terra.world.generation.math.samplers;
import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.Sampler;
import com.dfsek.terra.world.generation.math.interpolation.ChunkInterpolator2D;
import com.dfsek.terra.world.generation.math.interpolation.ElevationInterpolator;
import net.jafama.FastMath;
public class Sampler2D implements Sampler {
private final ChunkInterpolator2D interpolator;
private final ElevationInterpolator elevationInterpolator;
public Sampler2D(int x, int z, BiomeProvider provider, World world, int elevationSmooth) {
this.interpolator = new ChunkInterpolator2D(world, x, z, provider, (generator, coord) -> generator.getBaseSampler().getNoise(coord));
this.elevationInterpolator = new ElevationInterpolator(world, x, z, provider, elevationSmooth);
}
@Override
public double sample(double x, double y, double z) {
return interpolator.getNoise(x, 0, z) + elevationInterpolator.getElevation(FastMath.roundToInt(x), FastMath.roundToInt(z));
}
@Override
public double sample(int x, int y, int z) {
return interpolator.getNoise(x, 0, z) + elevationInterpolator.getElevation(FastMath.roundToInt(x), FastMath.roundToInt(z));
}
}