diff --git a/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java new file mode 100644 index 000000000..952ffc7d8 --- /dev/null +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeFactory.java @@ -0,0 +1,19 @@ +package com.dfsek.terra.addons.biome; + +import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; +import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; + +public class BiomeFactory implements ConfigFactory { + private final ConfigPack pack; + + public BiomeFactory(ConfigPack pack) { + this.pack = pack; + } + + @Override + public BiomeBuilder build(BiomeTemplate template, TerraPlugin main) { + return new UserDefinedBiomeBuilder(template, pack); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java similarity index 76% rename from common/implementation/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java index 705026c69..e4a08b528 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/BiomeTemplate.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.config.templates; +package com.dfsek.terra.addons.biome; import com.dfsek.paralithic.eval.parser.Parser; import com.dfsek.paralithic.eval.parser.Scope; @@ -8,39 +8,36 @@ import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ValidatedConfigTemplate; import com.dfsek.tectonic.exception.ValidationException; +import com.dfsek.terra.addons.biome.holder.PaletteHolder; +import com.dfsek.terra.addons.biome.slant.SlantHolder; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.BlockType; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.math.paralithic.BlankFunction; -import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction; -import com.dfsek.terra.api.noise.NoiseSampler; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.generator.Palette; -import com.dfsek.terra.api.world.palette.PaletteImpl; -import com.dfsek.terra.api.world.palette.holder.PaletteHolder; -import com.dfsek.terra.api.world.palette.slant.SlantHolder; import com.dfsek.terra.carving.UserDefinedCarver; -import com.dfsek.terra.config.loaders.config.function.FunctionTemplate; -import com.dfsek.terra.config.pack.ConfigPackImpl; import com.dfsek.terra.world.population.items.TerraStructure; import com.dfsek.terra.world.population.items.flora.FloraLayer; import com.dfsek.terra.world.population.items.ores.OreHolder; import com.dfsek.terra.world.population.items.tree.TreeLayer; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @SuppressWarnings({"FieldMayBeFinal", "unused"}) -public class BiomeTemplate extends AbstractableTemplate implements ValidatedConfigTemplate { - private final ConfigPackImpl pack; +public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTemplate { + private final ConfigPack pack; @Value("id") private String id; @@ -54,15 +51,10 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Default private Map variables = new HashMap<>(); - @Value("functions") - @Default - @Abstractable - private LinkedHashMap functions = new LinkedHashMap<>(); - @Value("beta.carving.equation") @Abstractable @Default - private String carvingEquation = "0"; + private NoiseSeeded carvingEquation = NoiseSeeded.zero(2); @Value("palette") @Abstractable @@ -80,7 +72,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Value("biome-noise") @Default @Abstractable - private NoiseSeeded biomeNoise; + private NoiseSeeded biomeNoise = NoiseSeeded.zero(2); @Value("blend.distance") @Abstractable @@ -97,19 +89,14 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Default private int blendStep = 4; - @Value("erode") - @Abstractable - @Default - private String erode = null; - @Value("structures") @Abstractable @Default - private List structures = new GlueList<>(); + private List structures = new ArrayList<>(); - @Value("noise-equation") + @Value("noise") @Abstractable - private String noiseEquation; + private NoiseSeeded noiseEquation; @Value("ores") @Abstractable @@ -123,7 +110,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf @Value("ocean.palette") @Abstractable - @Default private Palette oceanPalette; @Value("elevation.equation") @@ -206,10 +192,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return carvers; } - public Map getFunctions() { - return functions; - } - public double getBlendWeight() { return blendWeight; } @@ -242,20 +224,8 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return doSlabs; } - public BiomeTemplate(ConfigPackImpl pack, TerraPlugin main) { + public BiomeTemplate(ConfigPack pack, TerraPlugin main) { this.pack = pack; - biomeNoise = new NoiseSeeded() { - @Override - public NoiseSampler apply(Long seed) { - return NoiseSampler.zero(); - } - - @Override - public int getDimensions() { - return 2; - } - }; - oceanPalette = new PaletteImpl.Singleton(main.getWorldHandle().createBlockData("minecraft:water")); } public Map getSlabPalettes() { @@ -306,15 +276,11 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf return vanilla; } - public String getErode() { - return erode; - } - - public List getStructures() { + public List getStructures() { return structures; } - public String getNoiseEquation() { + public NoiseSeeded getNoiseEquation() { return noiseEquation; } @@ -349,16 +315,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf pack.getTemplate().getNoiseBuilderMap().forEach((id, builder) -> tester.registerFunction(id, new BlankFunction(builder.getDimensions()))); // Register dummy functions - Map testFunctions = new LinkedHashMap<>(pack.getTemplate().getFunctions()); - testFunctions.putAll(functions); - for(Map.Entry entry : testFunctions.entrySet()) { - try { - tester.registerFunction(entry.getKey(), UserDefinedFunction.newInstance(entry.getValue(), tester, testScope)); - } catch(ParseException e) { - throw new ValidationException("Invalid function: ", e); - } - } - try { tester.parse(noiseEquation, testScope); } catch(ParseException e) { diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/UserDefinedBiome.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java similarity index 89% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/UserDefinedBiome.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java index 12b63a405..ec568c676 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/UserDefinedBiome.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiome.java @@ -1,7 +1,10 @@ -package com.dfsek.terra.api.world.biome; +package com.dfsek.terra.addons.biome; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.World; +import com.dfsek.terra.api.world.biome.Biome; +import com.dfsek.terra.api.world.biome.Generator; +import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.world.generation.WorldGenerator; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/builder/UserDefinedBiomeBuilder.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java similarity index 80% rename from common/implementation/src/main/java/com/dfsek/terra/config/builder/UserDefinedBiomeBuilder.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java index 3b5b4ffe4..4c585e300 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/builder/UserDefinedBiomeBuilder.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/UserDefinedBiomeBuilder.java @@ -1,9 +1,11 @@ -package com.dfsek.terra.config.builder; +package com.dfsek.terra.addons.biome; import com.dfsek.paralithic.eval.parser.Scope; import com.dfsek.paralithic.eval.tokenizer.ParseException; +import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.UserDefinedBiome; @@ -19,11 +21,11 @@ import java.util.concurrent.ConcurrentHashMap; public class UserDefinedBiomeBuilder implements BiomeBuilder { private final BiomeTemplate template; - private final ConfigPackImpl pack; + private final ConfigPack pack; private final Map biomeMap = new ConcurrentHashMap<>(); - public UserDefinedBiomeBuilder(BiomeTemplate template, ConfigPackImpl pack) { + public UserDefinedBiomeBuilder(BiomeTemplate template, ConfigPack pack) { this.template = template; this.pack = pack; } @@ -41,14 +43,12 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder { template.getVariables().forEach(varScope::create); Map noiseBuilderMap = pack.getTemplate().getNoiseBuilderMap(); - Map functionTemplateMap = new LinkedHashMap<>(pack.getTemplate().getFunctions()); - functionTemplateMap.putAll(template.getFunctions()); try { - noise = new ExpressionSampler(template.getNoiseEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap); - elevation = template.getElevationEquation() == null ? NoiseSampler.zero() : new ExpressionSampler(template.getElevationEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap); - carving = new ExpressionSampler(template.getCarvingEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap); + noise = new ExpressionSampler(template.getNoiseEquation(), varScope, seed, noiseBuilderMap); + elevation = template.getElevationEquation() == null ? NoiseSampler.zero() : new ExpressionSampler(template.getElevationEquation(), varScope, seed, noiseBuilderMap); + carving = new ExpressionSampler(template.getCarvingEquation(), varScope, seed, noiseBuilderMap); } catch(ParseException e) { throw new RuntimeException(e); } @@ -65,9 +65,4 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder { public ProbabilityCollection getVanillaBiomes() { return template.getVanilla(); } - - @Override - public BiomeTemplate getTemplate() { - return template; - } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/WorldGenerator.java similarity index 93% rename from common/implementation/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/WorldGenerator.java index e6ec7c402..7240c24d1 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/world/generation/WorldGenerator.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/WorldGenerator.java @@ -1,10 +1,10 @@ -package com.dfsek.terra.world.generation; +package com.dfsek.terra.addons.biome; +import com.dfsek.terra.addons.biome.holder.PaletteHolder; +import com.dfsek.terra.addons.biome.slant.SlantHolder; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.generator.Palette; -import com.dfsek.terra.api.world.palette.holder.PaletteHolder; -import com.dfsek.terra.api.world.palette.slant.SlantHolder; public class WorldGenerator implements Generator { @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolder.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolder.java index 64231d6d3..7b0a76b01 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolder.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolder.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.palette.holder; +package com.dfsek.terra.addons.biome.holder; import com.dfsek.terra.api.world.generator.Palette; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolderBuilder.java similarity index 96% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolderBuilder.java index b00c74e77..c98622318 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteHolderBuilder.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteHolderBuilder.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.palette.holder; +package com.dfsek.terra.addons.biome.holder; import com.dfsek.terra.api.world.generator.Palette; import net.jafama.FastMath; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteLayerHolder.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteLayerHolder.java similarity index 94% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteLayerHolder.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteLayerHolder.java index a5b698b1b..4c7d068df 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/holder/PaletteLayerHolder.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/holder/PaletteLayerHolder.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.palette.holder; +package com.dfsek.terra.addons.biome.holder; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.noise.NoiseSampler; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/slant/SlantHolder.java b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/slant/SlantHolder.java similarity index 81% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/palette/slant/SlantHolder.java rename to common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/slant/SlantHolder.java index 8adec8761..f893b76e9 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/palette/slant/SlantHolder.java +++ b/common/addons/biome/config/src/main/java/com/dfsek/terra/addons/biome/slant/SlantHolder.java @@ -1,6 +1,6 @@ -package com.dfsek.terra.api.world.palette.slant; +package com.dfsek.terra.addons.biome.slant; -import com.dfsek.terra.api.world.palette.holder.PaletteHolder; +import com.dfsek.terra.addons.biome.holder.PaletteHolder; import java.util.TreeMap; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/ImageBiomeProvider.java b/common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java similarity index 97% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/ImageBiomeProvider.java rename to common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java index f5e56e978..cde1bebd9 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/ImageBiomeProvider.java +++ b/common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageBiomeProvider.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.provider; +package com.dfsek.terra.addons.biome.image; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/ImageProviderTemplate.java b/common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java similarity index 80% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/ImageProviderTemplate.java rename to common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java index 0b957b2c6..878e74bb7 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/ImageProviderTemplate.java +++ b/common/addons/biome/provider/image/src/main/java/com/dfsek/terra/addons/biome/image/ImageProviderTemplate.java @@ -1,10 +1,9 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.provider; +package com.dfsek.terra.addons.biome.image; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import java.awt.image.BufferedImage; import java.util.stream.Collectors; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomeHolderImpl.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomeHolderImpl.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java index 28a099807..7c2ba34ac 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomeHolderImpl.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomeHolderImpl.java @@ -1,10 +1,10 @@ -package com.dfsek.terra.api.world.biome.pipeline; +package com.dfsek.terra.addons.biome.pipeline; import com.dfsek.terra.api.vector.Vector2; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeExpander; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeHolder; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource; public class BiomeHolderImpl implements BiomeHolder { diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomePipelineImpl.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineImpl.java similarity index 88% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomePipelineImpl.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineImpl.java index a33c5e70b..ae9203a22 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/BiomePipelineImpl.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/BiomePipelineImpl.java @@ -1,12 +1,13 @@ -package com.dfsek.terra.api.world.biome.pipeline; +package com.dfsek.terra.addons.biome.pipeline; import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.seeded.StageSeeded; import com.dfsek.terra.api.vector.Vector2; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeHolder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource; -import com.dfsek.terra.api.world.biome.generation.pipeline.Stage; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -43,7 +44,7 @@ public class BiomePipelineImpl { public static final class BiomePipelineBuilder { private final int init; - List stages = new GlueList<>(); + List stages = new ArrayList<>(); private int expand; public BiomePipelineBuilder(int init) { diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/StandardBiomeProvider.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/StandardBiomeProvider.java similarity index 97% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/StandardBiomeProvider.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/StandardBiomeProvider.java index 221ec6910..aae21832e 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/StandardBiomeProvider.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/StandardBiomeProvider.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.provider; +package com.dfsek.terra.addons.biome.pipeline; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.noise.NoiseSampler; diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeExpander.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java similarity index 72% rename from common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeExpander.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java index 6a4297f27..3a00706ab 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeExpander.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeExpander.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.generation.pipeline; +package com.dfsek.terra.addons.biome.pipeline.api; import com.dfsek.terra.api.world.biome.TerraBiome; diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeHolder.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java similarity index 70% rename from common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeHolder.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java index 2e3887747..8c9d9711a 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeHolder.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeHolder.java @@ -1,6 +1,7 @@ -package com.dfsek.terra.api.world.biome.generation.pipeline; +package com.dfsek.terra.addons.biome.pipeline.api; import com.dfsek.terra.api.world.biome.TerraBiome; +import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource; public interface BiomeHolder { BiomeHolder expand(BiomeExpander expander); diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java similarity index 90% rename from common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java index d474ddb08..abb8d2258 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/BiomeMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/BiomeMutator.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.generation.pipeline; +package com.dfsek.terra.addons.biome.pipeline.api; import com.dfsek.terra.api.world.biome.TerraBiome; diff --git a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/Stage.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java similarity index 61% rename from common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/Stage.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java index 5d5c44aa4..64d069c11 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/world/biome/generation/pipeline/Stage.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/api/Stage.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.generation.pipeline; +package com.dfsek.terra.addons.biome.pipeline.api; public interface Stage { boolean isExpansion(); diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomePipelineTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomePipelineTemplate.java similarity index 90% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomePipelineTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomePipelineTemplate.java index 31a5f704c..0667e1914 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomePipelineTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/BiomePipelineTemplate.java @@ -1,12 +1,12 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.provider; +package com.dfsek.terra.addons.biome.pipeline.config; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.addons.biome.pipeline.BiomePipelineImpl; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.util.seeded.SourceSeeded; import com.dfsek.terra.api.util.seeded.StageSeeded; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.biome.pipeline.BiomePipelineImpl; import com.dfsek.terra.api.world.biome.provider.StandardBiomeProvider; import java.util.List; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/StageTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java similarity index 78% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/StageTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java index d588e736f..4c4eb9d09 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/StageTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/StageTemplate.java @@ -1,11 +1,11 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.stage; +package com.dfsek.terra.addons.biome.pipeline.config.stage; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.SeededBuilder; import com.dfsek.terra.api.util.seeded.StageSeeded; -import com.dfsek.terra.api.world.biome.generation.pipeline.Stage; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; public abstract class StageTemplate implements ObjectTemplate>, StageSeeded { @Value("noise") diff --git a/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/expander/ExpanderStageTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/expander/ExpanderStageTemplate.java new file mode 100644 index 000000000..a99eed4cd --- /dev/null +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/expander/ExpanderStageTemplate.java @@ -0,0 +1,13 @@ +package com.dfsek.terra.addons.biome.pipeline.config.stage.expander; + +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.expand.FractalExpander; +import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; + +public class ExpanderStageTemplate extends StageTemplate { + @Override + public Stage apply(Long seed) { + return new ExpanderStage(new FractalExpander(noise.apply(seed))); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderListMutatorTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java similarity index 79% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderListMutatorTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java index d2f0445ae..7e3393dee 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderListMutatorTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderListMutatorTemplate.java @@ -1,11 +1,11 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator; +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; -import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderListMutator; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import java.util.HashMap; import java.util.Map; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderMutatorTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java similarity index 66% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderMutatorTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java index 1aed5dee0..651fff705 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/BorderMutatorTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/BorderMutatorTemplate.java @@ -1,10 +1,10 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator; +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.util.ProbabilityCollection; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; -import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderMutator; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; @SuppressWarnings("unused") public class BorderMutatorTemplate extends MutatorStageTemplate { diff --git a/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java new file mode 100644 index 000000000..3ddd46923 --- /dev/null +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/MutatorStageTemplate.java @@ -0,0 +1,15 @@ +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; + +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.StageTemplate; + +public abstract class MutatorStageTemplate extends StageTemplate { + public abstract BiomeMutator build(long seed); + + @Override + public Stage apply(Long seed) { + return new MutatorStage(build(seed)); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceListMutatorTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java similarity index 78% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceListMutatorTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java index 7758c70ec..7b8bced8d 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceListMutatorTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceListMutatorTemplate.java @@ -1,11 +1,11 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator; +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; -import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceListMutator; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import java.util.HashMap; import java.util.Map; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceMutatorTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java similarity index 64% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceMutatorTemplate.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java index 52fe113d1..a1ea49704 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/stage/mutator/ReplaceMutatorTemplate.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/ReplaceMutatorTemplate.java @@ -1,10 +1,10 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator; +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.util.ProbabilityCollection; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; -import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceMutator; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; @SuppressWarnings("unused") public class ReplaceMutatorTemplate extends MutatorStageTemplate { diff --git a/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java new file mode 100644 index 000000000..722d0ca03 --- /dev/null +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/config/stage/mutator/SmoothMutatorTemplate.java @@ -0,0 +1,11 @@ +package com.dfsek.terra.addons.biome.pipeline.config.stage.mutator; + +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.mutator.SmoothMutator; + +public class SmoothMutatorTemplate extends MutatorStageTemplate { + @Override + public BiomeMutator build(long seed) { + return new SmoothMutator(noise.apply(seed)); + } +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/expand/FractalExpander.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java similarity index 79% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/expand/FractalExpander.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java index 8677cb37d..394c7cc87 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/expand/FractalExpander.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/expand/FractalExpander.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.expand; +package com.dfsek.terra.addons.biome.pipeline.expand; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeExpander; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; public class FractalExpander implements BiomeExpander { private final NoiseSampler sampler; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderListMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java similarity index 93% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderListMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java index 410b9cf85..dbba58b25 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderListMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderListMutator.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.mutator; +package com.dfsek.terra.addons.biome.pipeline.mutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import java.util.Map; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java index 48b56c877..442f4627f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/BorderMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/BorderMutator.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.mutator; +package com.dfsek.terra.addons.biome.pipeline.mutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; public class BorderMutator implements BiomeMutator { private final String border; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceListMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceListMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java index 912abf252..6cb8405bc 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceListMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceListMutator.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.mutator; +package com.dfsek.terra.addons.biome.pipeline.mutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import java.util.Map; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java similarity index 87% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java index c7ef22630..55db194d8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/ReplaceMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/ReplaceMutator.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.mutator; +package com.dfsek.terra.addons.biome.pipeline.mutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; public class ReplaceMutator implements BiomeMutator { private final String replaceableTag; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/SmoothMutator.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java similarity index 88% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/SmoothMutator.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java index 529efdfd4..be88ddf41 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/mutator/SmoothMutator.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/mutator/SmoothMutator.java @@ -1,9 +1,9 @@ -package com.dfsek.terra.api.world.biome.pipeline.mutator; +package com.dfsek.terra.addons.biome.pipeline.mutator; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; import java.util.Objects; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/source/RandomSource.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/RandomSource.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/source/RandomSource.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/RandomSource.java index 85e7776c9..7127dc09f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/source/RandomSource.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/source/RandomSource.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.pipeline.source; +package com.dfsek.terra.addons.biome.pipeline.source; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.ProbabilityCollection; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/ExpanderStage.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java similarity index 60% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/ExpanderStage.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java index 8d195be5e..d73726634 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/ExpanderStage.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/ExpanderStage.java @@ -1,8 +1,8 @@ -package com.dfsek.terra.api.world.biome.pipeline.stages; +package com.dfsek.terra.addons.biome.pipeline.stages; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeExpander; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeHolder; -import com.dfsek.terra.api.world.biome.generation.pipeline.Stage; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeExpander; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; public class ExpanderStage implements Stage { private final BiomeExpander expander; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/MutatorStage.java b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java similarity index 63% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/MutatorStage.java rename to common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java index 083e865f7..fc6a18003 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/pipeline/stages/MutatorStage.java +++ b/common/addons/biome/provider/pipeline/src/main/java/com/dfsek/terra/addons/biome/pipeline/stages/MutatorStage.java @@ -1,8 +1,8 @@ -package com.dfsek.terra.api.world.biome.pipeline.stages; +package com.dfsek.terra.addons.biome.pipeline.stages; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeHolder; -import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; -import com.dfsek.terra.api.world.biome.generation.pipeline.Stage; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeHolder; +import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator; +import com.dfsek.terra.addons.biome.pipeline.api.Stage; public class MutatorStage implements Stage { private final BiomeMutator mutator; diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/SingleBiomeProvider.java b/common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/SingleBiomeProvider.java rename to common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java index 3de31fb34..136a4555c 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/biome/provider/SingleBiomeProvider.java +++ b/common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProvider.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.api.world.biome.provider; +package com.dfsek.terra.addons.biome.single; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/SingleBiomeProviderTemplate.java b/common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderTemplate.java similarity index 68% rename from common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/SingleBiomeProviderTemplate.java rename to common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderTemplate.java index 7538dba0b..e66ce857a 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/SingleBiomeProviderTemplate.java +++ b/common/addons/biome/provider/single/src/main/java/com/dfsek/terra/addons/biome/single/SingleBiomeProviderTemplate.java @@ -1,9 +1,8 @@ -package com.dfsek.terra.config.loaders.config.biome.templates.provider; +package com.dfsek.terra.addons.biome.single; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.api.world.biome.provider.SingleBiomeProvider; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; public class SingleBiomeProviderTemplate extends BiomeProviderTemplate { @Value("biome") diff --git a/common/implementation/src/main/java/com/dfsek/terra/carving/CarverCache.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverCache.java similarity index 98% rename from common/implementation/src/main/java/com/dfsek/terra/carving/CarverCache.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverCache.java index 4ea8dce4e..662c3491b 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/carving/CarverCache.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverCache.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.carving; +package com.dfsek.terra.addons.carver; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.util.FastRandom; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverFactory.java similarity index 91% rename from common/implementation/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverFactory.java index 9a66fe2ff..a57ecbba5 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/CarverFactory.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverFactory.java @@ -1,12 +1,11 @@ -package com.dfsek.terra.config.factories; +package com.dfsek.terra.addons.carver; import com.dfsek.paralithic.eval.tokenizer.ParseException; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.util.MathUtil; -import com.dfsek.terra.carving.UserDefinedCarver; import com.dfsek.terra.config.pack.ConfigPackImpl; -import com.dfsek.terra.config.templates.CarverTemplate; import java.util.Arrays; import java.util.List; diff --git a/common/implementation/src/main/java/com/dfsek/terra/carving/CarverPalette.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverPalette.java similarity index 98% rename from common/implementation/src/main/java/com/dfsek/terra/carving/CarverPalette.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverPalette.java index aadfeb2f2..8cffecd1e 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/carving/CarverPalette.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverPalette.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.carving; +package com.dfsek.terra.addons.carver; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.BlockType; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/CarverTemplate.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverTemplate.java similarity index 95% rename from common/implementation/src/main/java/com/dfsek/terra/config/templates/CarverTemplate.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverTemplate.java index 0c3b53475..bfe68724c 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/CarverTemplate.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CarverTemplate.java @@ -1,19 +1,19 @@ -package com.dfsek.terra.config.templates; +package com.dfsek.terra.addons.carver; import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.block.BlockType; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.math.range.ConstantRange; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.collections.MaterialSet; -import com.dfsek.terra.carving.CarverPalette; import java.util.HashMap; import java.util.Map; @SuppressWarnings({"unused", "FieldMayBeFinal"}) -public class CarverTemplate extends AbstractableTemplate { +public class CarverTemplate implements AbstractableTemplate { @Value("id") private String id; diff --git a/common/implementation/src/main/java/com/dfsek/terra/world/population/CavePopulator.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CavePopulator.java similarity index 97% rename from common/implementation/src/main/java/com/dfsek/terra/world/population/CavePopulator.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CavePopulator.java index fe767eb7e..69f954529 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/world/population/CavePopulator.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/CavePopulator.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.world.population; +package com.dfsek.terra.addons.carver; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.state.BlockState; @@ -34,7 +34,6 @@ public class CavePopulator implements TerraBlockPopulator, Chunkified { public void populate(@NotNull World world, @NotNull Chunk chunk) { TerraWorld tw = main.getWorld(world); WorldHandle handle = main.getWorldHandle(); - BlockState AIR = handle.createBlockData("minecraft:air"); try(ProfileFrame ignore = main.getProfiler().profile("carving")) { Random random = PopulationUtil.getRandom(chunk); if(!tw.isSafe()) return; diff --git a/common/implementation/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/UserDefinedCarver.java similarity index 98% rename from common/implementation/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java rename to common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/UserDefinedCarver.java index ddc2199fc..5cdab774f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java +++ b/common/addons/carver/src/main/java/com/dfsek/terra/addons/carver/UserDefinedCarver.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.carving; +package com.dfsek.terra.addons.carver; import com.dfsek.paralithic.Expression; import com.dfsek.paralithic.eval.parser.Parser; @@ -19,7 +19,6 @@ import com.dfsek.terra.api.world.carving.Carver; import com.dfsek.terra.api.world.carving.Worm; import com.dfsek.terra.config.loaders.config.function.FunctionTemplate; import com.dfsek.terra.config.templates.BiomeTemplate; -import com.dfsek.terra.config.templates.CarverTemplate; import net.jafama.FastMath; import java.util.List; diff --git a/common/addons/noise/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java b/common/addons/noise/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java index e861d5814..848626b39 100644 --- a/common/addons/noise/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java +++ b/common/addons/noise/src/main/java/com/dfsek/terra/addons/noise/NoiseAddon.java @@ -37,8 +37,6 @@ import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.util.seeded.NoiseProvider; import com.dfsek.terra.api.util.seeded.NoiseSeeded; -import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate; - @Addon("noise") @Author("Terra") @Version("1.0.0") @@ -56,8 +54,7 @@ public class NoiseAddon extends TerraAddon { .applyLoader(ClampNormalizerTemplate.class, ClampNormalizerTemplate::new) .applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new) .applyLoader(CellularSampler.ReturnType.class, (t, object, cf) -> CellularSampler.ReturnType.valueOf((String) object)) - .applyLoader(CellularSampler.DistanceFunction.class, (t, object, cf) -> CellularSampler.DistanceFunction.valueOf((String) object)) - ; + .applyLoader(CellularSampler.DistanceFunction.class, (t, object, cf) -> CellularSampler.DistanceFunction.valueOf((String) object)); } @SuppressWarnings("deprecation") diff --git a/common/api/src/main/java/com/dfsek/terra/api/config/AbstractableTemplate.java b/common/api/src/main/java/com/dfsek/terra/api/config/AbstractableTemplate.java new file mode 100644 index 000000000..ae0986ab8 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/config/AbstractableTemplate.java @@ -0,0 +1,7 @@ +package com.dfsek.terra.api.config; + +import com.dfsek.tectonic.config.ConfigTemplate; + +public interface AbstractableTemplate extends ConfigTemplate { + String getID(); +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/ConfigFactory.java b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigFactory.java similarity index 86% rename from common/implementation/src/main/java/com/dfsek/terra/config/factories/ConfigFactory.java rename to common/api/src/main/java/com/dfsek/terra/api/config/ConfigFactory.java index cf676a8d6..33baf21d4 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/ConfigFactory.java +++ b/common/api/src/main/java/com/dfsek/terra/api/config/ConfigFactory.java @@ -1,4 +1,4 @@ -package com.dfsek.terra.config.factories; +package com.dfsek.terra.api.config; import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.exception.LoadException; diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/ConfiguredStructure.java b/common/api/src/main/java/com/dfsek/terra/api/structure/ConfiguredStructure.java new file mode 100644 index 000000000..d03d2c90d --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/ConfiguredStructure.java @@ -0,0 +1,12 @@ +package com.dfsek.terra.api.structure; + +import com.dfsek.terra.api.util.ProbabilityCollection; +import com.dfsek.terra.api.util.Range; + +public interface ConfiguredStructure { + ProbabilityCollection getStructure(); + + Range getSpawnStart(); + + StructureSpawn getSpawn(); +} diff --git a/common/api/src/main/java/com/dfsek/terra/api/structure/StructureSpawn.java b/common/api/src/main/java/com/dfsek/terra/api/structure/StructureSpawn.java new file mode 100644 index 000000000..3270bd0a7 --- /dev/null +++ b/common/api/src/main/java/com/dfsek/terra/api/structure/StructureSpawn.java @@ -0,0 +1,15 @@ +package com.dfsek.terra.api.structure; + +import com.dfsek.terra.api.vector.Vector3; + +public interface StructureSpawn { + /** + * Get nearest spawn point + * + * @param x X coordinate + * @param z Z coordinate + * @param seed Seed for RNG + * @return Vector representing nearest spawnpoint + */ + Vector3 getNearestSpawn(int x, int z, long seed); +} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/builder/BiomeBuilder.java b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java similarity index 60% rename from common/implementation/src/main/java/com/dfsek/terra/config/builder/BiomeBuilder.java rename to common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java index 369ce1f68..143af4bb2 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/builder/BiomeBuilder.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/BiomeBuilder.java @@ -1,13 +1,9 @@ -package com.dfsek.terra.config.builder; +package com.dfsek.terra.api.util.seeded; import com.dfsek.terra.api.util.ProbabilityCollection; -import com.dfsek.terra.api.util.seeded.SeededBuilder; import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.TerraBiome; -import com.dfsek.terra.config.templates.BiomeTemplate; public interface BiomeBuilder extends SeededBuilder { ProbabilityCollection getVanillaBiomes(); - - BiomeTemplate getTemplate(); } diff --git a/common/api/src/main/java/com/dfsek/terra/api/util/seeded/NoiseSeeded.java b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/NoiseSeeded.java index 23fedb47a..56fb983f9 100644 --- a/common/api/src/main/java/com/dfsek/terra/api/util/seeded/NoiseSeeded.java +++ b/common/api/src/main/java/com/dfsek/terra/api/util/seeded/NoiseSeeded.java @@ -7,4 +7,18 @@ public interface NoiseSeeded extends SeededBuilder { NoiseSampler apply(Long seed); int getDimensions(); + + static NoiseSeeded zero(int dimensions) { + return new NoiseSeeded() { + @Override + public NoiseSampler apply(Long seed) { + return NoiseSampler.zero(); + } + + @Override + public int getDimensions() { + return dimensions; + } + }; + } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/math/GridSpawn.java b/common/implementation/src/main/java/com/dfsek/terra/api/math/GridSpawn.java index bb8b8d148..110330c2c 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/math/GridSpawn.java +++ b/common/implementation/src/main/java/com/dfsek/terra/api/math/GridSpawn.java @@ -11,7 +11,7 @@ import java.util.Random; /** * Class to procedurally determine the spawn point of an object based on a grid with padding between cells. */ -public class GridSpawn { +public class GridSpawn implements com.dfsek.terra.api.structure.StructureSpawn { private final int separation; private final int width; private final int salt; @@ -22,14 +22,7 @@ public class GridSpawn { this.salt = salt; } - /** - * Get nearest spawn point - * - * @param x X coordinate - * @param z Z coordinate - * @param seed Seed for RNG - * @return Vector representing nearest spawnpoint - */ + @Override public Vector3 getNearestSpawn(int x, int z, long seed) { int structureChunkX = x / (width + 2 * separation); int structureChunkZ = z / (width + 2 * separation); diff --git a/common/implementation/src/main/java/com/dfsek/terra/api/world/locate/AsyncStructureFinder.java b/common/implementation/src/main/java/com/dfsek/terra/api/world/locate/AsyncStructureFinder.java index 770808a7d..325c9d681 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/api/world/locate/AsyncStructureFinder.java +++ b/common/implementation/src/main/java/com/dfsek/terra/api/world/locate/AsyncStructureFinder.java @@ -1,6 +1,7 @@ package com.dfsek.terra.api.world.locate; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.structure.rotation.Rotation; import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.PopulationUtil; @@ -8,15 +9,14 @@ import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.world.World; import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; -import com.dfsek.terra.world.population.items.TerraStructure; import net.jafama.FastMath; import org.jetbrains.annotations.NotNull; import java.util.Random; import java.util.function.Consumer; -public class AsyncStructureFinder extends AsyncFeatureFinder { - public AsyncStructureFinder(BiomeProvider provider, TerraStructure target, @NotNull Vector3 origin, World world, int startRadius, int maxRadius, Consumer callback, TerraPlugin main) { +public class AsyncStructureFinder extends AsyncFeatureFinder { + public AsyncStructureFinder(BiomeProvider provider, ConfiguredStructure target, @NotNull Vector3 origin, World world, int startRadius, int maxRadius, Consumer callback, TerraPlugin main) { super(provider, target, origin, world, startRadius, maxRadius, callback, main); setSearchSize(target.getSpawn().getWidth() + 2 * target.getSpawn().getSeparation()); } @@ -27,7 +27,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder { } @Override - public boolean isValid(int x, int z, TerraStructure target) { + public boolean isValid(int x, int z, ConfiguredStructure target) { Vector3 spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed()); if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(target)) return false; Random random = new FastRandom(PopulationUtil.getCarverChunkSeed(FastMath.floorDiv(spawn.getBlockX(), 16), FastMath.floorDiv(spawn.getBlockZ(), 16), world.getSeed())); diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/biome/BiomeInfoCommand.java b/common/implementation/src/main/java/com/dfsek/terra/commands/biome/BiomeInfoCommand.java index 307cebccc..205376de8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/biome/BiomeInfoCommand.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/biome/BiomeInfoCommand.java @@ -5,6 +5,7 @@ import com.dfsek.terra.api.command.annotation.Argument; import com.dfsek.terra.api.command.annotation.Command; import com.dfsek.terra.api.command.annotation.inject.ArgumentTarget; import com.dfsek.terra.api.entity.CommandSender; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser; @@ -42,7 +43,7 @@ public class BiomeInfoCommand implements CommandTemplate { bio.getExtended().forEach(id -> sender.sendMessage(" - " + id)); } - List structureConfigs = bio.getStructures(); + List structureConfigs = bio.getStructures(); if(structureConfigs.size() == 0) { sender.sendMessage("No Structures"); diff --git a/common/implementation/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java b/common/implementation/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java index 1216f6e05..84fb271f8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java +++ b/common/implementation/src/main/java/com/dfsek/terra/commands/structure/argument/StructureArgumentParser.java @@ -5,14 +5,15 @@ import com.dfsek.terra.api.command.arg.ArgumentParser; import com.dfsek.terra.api.entity.CommandSender; import com.dfsek.terra.api.entity.Player; import com.dfsek.terra.api.injection.annotations.Inject; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.world.population.items.TerraStructure; -public class StructureArgumentParser implements ArgumentParser { +public class StructureArgumentParser implements ArgumentParser { @Inject private TerraPlugin main; @Override - public TerraStructure parse(CommandSender sender, String arg) { + public ConfiguredStructure parse(CommandSender sender, String arg) { return main.getWorld(((Player) sender).world()).getConfig().getRegistry(TerraStructure.class).get(arg); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java b/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java index 3cd000874..d676ccc70 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/GenericLoaders.java @@ -13,8 +13,8 @@ import com.dfsek.terra.api.util.seeded.SourceSeeded; import com.dfsek.terra.api.util.seeded.StageSeeded; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource; -import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage; -import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage; +import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider; import com.dfsek.terra.api.world.palette.holder.PaletteHolder; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; @@ -33,12 +33,12 @@ import com.dfsek.terra.config.loaders.config.biome.BiomeProviderBuilderLoader; import com.dfsek.terra.config.loaders.config.biome.SourceBuilderLoader; import com.dfsek.terra.config.loaders.config.biome.StageBuilderLoader; import com.dfsek.terra.config.loaders.config.biome.templates.source.NoiseSourceTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.expander.ExpanderStageTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderListMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceListMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.SmoothMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate; import com.dfsek.terra.config.loaders.config.function.FunctionTemplate; import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader; import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java b/common/implementation/src/main/java/com/dfsek/terra/config/builder/GeneratorBuilder.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java deleted file mode 100644 index 267ec8bf4..000000000 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/BiomeFactory.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.dfsek.terra.config.factories; - -import com.dfsek.terra.api.TerraPlugin; -import com.dfsek.terra.config.builder.BiomeBuilder; -import com.dfsek.terra.config.builder.UserDefinedBiomeBuilder; -import com.dfsek.terra.config.pack.ConfigPackImpl; -import com.dfsek.terra.config.templates.BiomeTemplate; - -public class BiomeFactory implements ConfigFactory { - private final ConfigPackImpl pack; - - public BiomeFactory(ConfigPackImpl pack) { - this.pack = pack; - } - - @Override - public BiomeBuilder build(BiomeTemplate template, TerraPlugin main) { - return new UserDefinedBiomeBuilder(template, pack); - } -} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java index 4e4860122..62460a8ef 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/factories/FloraFactory.java @@ -1,6 +1,7 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.world.Flora; import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.PaletteImpl; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/OreFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/OreFactory.java index f5ba312dd..38ab2f742 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/OreFactory.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/factories/OreFactory.java @@ -2,6 +2,7 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.block.state.BlockState; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.config.templates.OreTemplate; import com.dfsek.terra.world.population.items.ores.Ore; import com.dfsek.terra.world.population.items.ores.VanillaOre; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java index 1e97f368e..78101ee76 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/factories/PaletteFactory.java @@ -1,6 +1,7 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.world.generator.Palette; import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/StructureFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/StructureFactory.java index 0fa25315d..d4043aff8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/StructureFactory.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/factories/StructureFactory.java @@ -1,12 +1,14 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.world.population.items.TerraStructure; -public class StructureFactory implements ConfigFactory { +public class StructureFactory implements ConfigFactory { @Override - public TerraStructure build(StructureTemplate config, TerraPlugin main) { + public ConfiguredStructure build(StructureTemplate config, TerraPlugin main) { return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn(), config); } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/factories/TreeFactory.java b/common/implementation/src/main/java/com/dfsek/terra/config/factories/TreeFactory.java index f03c86d16..d14bc62a8 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/factories/TreeFactory.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/factories/TreeFactory.java @@ -1,6 +1,7 @@ package com.dfsek.terra.config.factories; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.config.templates.TreeTemplate; import com.dfsek.terra.world.population.items.tree.TerraTree; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java index 493d0b0eb..a990459ff 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java @@ -3,14 +3,15 @@ package com.dfsek.terra.config.loaders.config; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.terra.api.math.GridSpawn; +import com.dfsek.terra.api.structure.StructureSpawn; import java.lang.reflect.Type; import java.util.Map; @SuppressWarnings("unchecked") -public class GridSpawnLoader implements TypeLoader { +public class GridSpawnLoader implements TypeLoader { @Override - public GridSpawn load(Type type, Object o, ConfigLoader configLoader) { + public StructureSpawn load(Type type, Object o, ConfigLoader configLoader) { Map map = (Map) o; return new GridSpawn(map.get("width"), map.get("padding"), map.getOrDefault("salt", 0)); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/StageBuilderLoader.java b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/StageBuilderLoader.java index 58c464fde..7eec745bc 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/StageBuilderLoader.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/StageBuilderLoader.java @@ -4,14 +4,14 @@ import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.terra.api.util.seeded.StageSeeded; -import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage; -import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.expander.ExpanderStageTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderListMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceListMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceMutatorTemplate; -import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.SmoothMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage; +import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage; +import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate; +import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate; import java.lang.reflect.Type; import java.util.Map; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomeProviderTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomeProviderTemplate.java index 20c094196..ae8b69314 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomeProviderTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/loaders/config/biome/templates/provider/BiomeProviderTemplate.java @@ -14,17 +14,7 @@ public abstract class BiomeProviderTemplate implements ObjectTemplate getStructures() { + public Set getStructures() { return new HashSet<>(getRegistry(TerraStructure.class).entries()); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java b/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java index 8512efb2e..e8bc0fe7a 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/pack/WorldConfigImpl.java @@ -4,11 +4,12 @@ import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.registry.OpenRegistry; import com.dfsek.terra.api.registry.Registry; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.generator.SamplerCache; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.registry.LockedRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.world.generation.math.SamplerCacheImpl; @@ -119,7 +120,7 @@ public class WorldConfigImpl implements WorldConfig { return getTemplate().isDisableSaplings(); } - public Set getStructures() { + public Set getStructures() { return new HashSet<>(getRegistry(TerraStructure.class).entries()); } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/AbstractableTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/AbstractableTemplate.java deleted file mode 100644 index e243fc3ad..000000000 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/AbstractableTemplate.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.dfsek.terra.config.templates; - -import com.dfsek.tectonic.config.ConfigTemplate; - -public abstract class AbstractableTemplate implements ConfigTemplate { - public abstract String getID(); -} diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/FloraTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/FloraTemplate.java index 8e1564e4a..be5358206 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/FloraTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/templates/FloraTemplate.java @@ -3,6 +3,7 @@ package com.dfsek.terra.config.templates; import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; import com.dfsek.terra.world.population.items.flora.TerraFlora; @@ -10,7 +11,7 @@ import com.dfsek.terra.world.population.items.flora.TerraFlora; import java.util.List; @SuppressWarnings({"FieldMayBeFinal", "unused"}) -public class FloraTemplate extends AbstractableTemplate { +public class FloraTemplate implements AbstractableTemplate { @Value("id") private String id; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java index e91f73357..a6c38265f 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/templates/OreTemplate.java @@ -5,6 +5,7 @@ import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.BlockType; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.collections.MaterialSet; @@ -12,7 +13,7 @@ import java.util.HashMap; import java.util.Map; @SuppressWarnings({"unused", "FieldMayBeFinal"}) -public class OreTemplate extends AbstractableTemplate { +public class OreTemplate implements AbstractableTemplate { @Value("id") private String id; diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/PaletteTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/PaletteTemplate.java index b92cbc12a..59ca3c46e 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/PaletteTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/templates/PaletteTemplate.java @@ -3,6 +3,7 @@ package com.dfsek.terra.config.templates; import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; @@ -11,7 +12,7 @@ import com.dfsek.terra.noise.samplers.noise.random.WhiteNoiseSampler; import java.util.List; @SuppressWarnings({"FieldMayBeFinal", "unused"}) -public class PaletteTemplate extends AbstractableTemplate { +public class PaletteTemplate implements AbstractableTemplate { @Value("noise") @Abstractable @Default diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java index 198723453..7cd31340b 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java @@ -4,8 +4,9 @@ import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ConfigTemplate; -import com.dfsek.terra.api.math.GridSpawn; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.structure.StructureSpawn; import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.Range; @@ -13,7 +14,7 @@ import com.dfsek.terra.api.util.Range; import java.util.List; @SuppressWarnings({"unused", "FieldMayBeFinal"}) -public class StructureTemplate extends AbstractableTemplate implements ConfigTemplate { +public class StructureTemplate implements AbstractableTemplate, ConfigTemplate { @Value("id") private String id; @@ -27,7 +28,7 @@ public class StructureTemplate extends AbstractableTemplate implements ConfigTem @Value("spawn") @Abstractable - private GridSpawn spawn; + private StructureSpawn spawn; @Value("features") @Abstractable @@ -50,7 +51,7 @@ public class StructureTemplate extends AbstractableTemplate implements ConfigTem return features; } - public GridSpawn getSpawn() { + public StructureSpawn getSpawn() { return spawn; } } diff --git a/common/implementation/src/main/java/com/dfsek/terra/config/templates/TreeTemplate.java b/common/implementation/src/main/java/com/dfsek/terra/config/templates/TreeTemplate.java index 66837b818..fb3c1f4a9 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/config/templates/TreeTemplate.java +++ b/common/implementation/src/main/java/com/dfsek/terra/config/templates/TreeTemplate.java @@ -3,12 +3,13 @@ package com.dfsek.terra.config.templates; import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.terra.api.config.AbstractableTemplate; import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.collections.MaterialSet; @SuppressWarnings({"unused", "FieldMayBeFinal"}) -public class TreeTemplate extends AbstractableTemplate { +public class TreeTemplate implements AbstractableTemplate { @Value("scripts") @Abstractable private ProbabilityCollection structure; diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/config/BiomeRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/config/BiomeRegistry.java index fb1bdd999..67205999d 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/config/BiomeRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/config/BiomeRegistry.java @@ -2,7 +2,7 @@ package com.dfsek.terra.registry.config; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.registry.OpenRegistryImpl; import java.lang.reflect.Type; diff --git a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java index cf88dba51..a75f03eae 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java +++ b/common/implementation/src/main/java/com/dfsek/terra/registry/config/ConfigTypeRegistry.java @@ -3,24 +3,24 @@ package com.dfsek.terra.registry.config; import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.exception.LoadException; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.config.AbstractableTemplate; +import com.dfsek.terra.api.config.ConfigFactory; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.registry.OpenRegistry; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.api.world.Flora; import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.generator.Palette; import com.dfsek.terra.carving.UserDefinedCarver; -import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.config.factories.BiomeFactory; import com.dfsek.terra.config.factories.CarverFactory; -import com.dfsek.terra.config.factories.ConfigFactory; import com.dfsek.terra.config.factories.FloraFactory; import com.dfsek.terra.config.factories.OreFactory; import com.dfsek.terra.config.factories.PaletteFactory; import com.dfsek.terra.config.factories.StructureFactory; import com.dfsek.terra.config.factories.TreeFactory; import com.dfsek.terra.config.pack.ConfigPackImpl; -import com.dfsek.terra.config.templates.AbstractableTemplate; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.CarverTemplate; import com.dfsek.terra.config.templates.FloraTemplate; diff --git a/common/implementation/src/main/java/com/dfsek/terra/world/population/StructurePopulator.java b/common/implementation/src/main/java/com/dfsek/terra/world/population/StructurePopulator.java index 11b9ddb95..e4dc0ef30 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/world/population/StructurePopulator.java +++ b/common/implementation/src/main/java/com/dfsek/terra/world/population/StructurePopulator.java @@ -3,6 +3,7 @@ package com.dfsek.terra.world.population; import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.profiler.ProfileFrame; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.structure.rotation.Rotation; import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.PopulationUtil; @@ -39,7 +40,7 @@ public class StructurePopulator implements TerraBlockPopulator, Chunkified { if(!tw.isSafe()) return; BiomeProvider provider = tw.getBiomeProvider(); WorldConfig config = tw.getConfig(); - for(TerraStructure conf : config.getRegistry(TerraStructure.class).entries()) { + for(ConfiguredStructure conf : config.getRegistry(TerraStructure.class).entries()) { Vector3 spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed()); if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf)) diff --git a/common/implementation/src/main/java/com/dfsek/terra/world/population/items/TerraStructure.java b/common/implementation/src/main/java/com/dfsek/terra/world/population/items/TerraStructure.java index 361e3710d..65993165c 100644 --- a/common/implementation/src/main/java/com/dfsek/terra/world/population/items/TerraStructure.java +++ b/common/implementation/src/main/java/com/dfsek/terra/world/population/items/TerraStructure.java @@ -1,18 +1,19 @@ package com.dfsek.terra.world.population.items; -import com.dfsek.terra.api.math.GridSpawn; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.structure.Structure; +import com.dfsek.terra.api.structure.StructureSpawn; import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.Range; import com.dfsek.terra.config.templates.StructureTemplate; -public class TerraStructure { +public class TerraStructure implements ConfiguredStructure { private final ProbabilityCollection structure; private final Range spawnStart; - private final GridSpawn spawn; + private final StructureSpawn spawn; private final StructureTemplate template; - public TerraStructure(ProbabilityCollection structures, Range spawnStart, GridSpawn spawn, StructureTemplate template) { + public TerraStructure(ProbabilityCollection structures, Range spawnStart, StructureSpawn spawn, StructureTemplate template) { this.structure = structures; this.spawnStart = spawnStart; this.spawn = spawn; @@ -23,15 +24,18 @@ public class TerraStructure { return template; } + @Override public ProbabilityCollection getStructure() { return structure; } + @Override public Range getSpawnStart() { return spawnStart; } - public GridSpawn getSpawn() { + @Override + public StructureSpawn getSpawn() { return spawn; } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java index 51e887b24..826a0172d 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/PaperListener.java @@ -1,6 +1,7 @@ package com.dfsek.terra.bukkit.listeners; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.bukkit.world.BukkitAdapter; @@ -22,7 +23,7 @@ public class PaperListener implements Listener { String name = "minecraft:" + e.getType().getName(); main.getDebugLogger().info("Overriding structure location for \"" + name + "\""); TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getWorld())); - TerraStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getLocatable().get(name)); + ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getLocatable().get(name)); if(config != null) { AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin().toVector()), tw.getWorld(), 0, 500, location -> { if(location != null) diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java index 174836681..20aacc383 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/listeners/SpigotListener.java @@ -1,6 +1,7 @@ package com.dfsek.terra.bukkit.listeners; import com.dfsek.terra.api.TerraPlugin; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.bukkit.world.BukkitAdapter; @@ -37,7 +38,7 @@ public class SpigotListener implements Listener { if(!BukkitAdapter.adapt(e.getEntity().getWorld()).isTerraWorld()) return; TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getEntity().getWorld())); EnderSignal signal = (EnderSignal) entity; - TerraStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getLocatable().get("STRONGHOLD")); + ConfiguredStructure config = tw.getConfig().getRegistry(TerraStructure.class).get(tw.getConfig().getLocatable().get("STRONGHOLD")); if(config != null) { main.getDebugLogger().info("Overriding Ender Signal..."); AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation().toVector()), tw.getWorld(), 0, 500, location -> { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 20e6d064f..088174c47 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -39,7 +39,7 @@ import com.dfsek.terra.api.world.World; import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.config.GenericLoaders; import com.dfsek.terra.config.PluginConfigImpl; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.config.lang.LangUtil; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; @@ -81,12 +81,8 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Type; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.Supplier; public class TerraFabricPlugin implements TerraPlugin, ModInitializer { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java index ae812bed5..aa1ff2262 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/config/PostLoadCompatibilityOptions.java @@ -3,7 +3,7 @@ package com.dfsek.terra.fabric.config; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.config.ConfigTemplate; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import net.minecraft.util.Identifier; import java.util.HashMap; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java index d90b3a901..2004f0221 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/generation/FabricChunkGeneratorWrapper.java @@ -1,6 +1,7 @@ package com.dfsek.terra.fabric.generation; import com.dfsek.terra.api.config.ConfigPack; +import com.dfsek.terra.api.structure.ConfiguredStructure; import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.World; @@ -115,7 +116,7 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener if(!pack.disableStructures()) { String name = Objects.requireNonNull(Registry.STRUCTURE_FEATURE.getId(feature)).toString(); TerraWorld terraWorld = TerraFabricPlugin.getInstance().getWorld((World) world); - TerraStructure located = pack.getRegistry(TerraStructure.class).get(pack.getLocatable().get(name)); + ConfiguredStructure located = pack.getRegistry(TerraStructure.class).get(pack.getLocatable().get(name)); if(located != null) { CompletableFuture result = new CompletableFuture<>(); AsyncStructureFinder finder = new AsyncStructureFinder(terraWorld.getBiomeProvider(), located, FabricAdapter.adapt(center), terraWorld.getWorld(), 0, 500, location -> { diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java index c85ab12a1..33ddc77f9 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/util/FabricUtil.java @@ -6,7 +6,7 @@ import com.dfsek.terra.api.block.entity.MobSpawner; import com.dfsek.terra.api.block.entity.Sign; import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.util.generic.pair.Pair; -import com.dfsek.terra.config.builder.BiomeBuilder; +import com.dfsek.terra.api.util.seeded.BiomeBuilder; import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;