move more things to new modules

This commit is contained in:
dfsek
2021-07-02 07:44:30 -07:00
parent 215a1e0e86
commit 62520af8e7
88 changed files with 300 additions and 313 deletions

View File

@@ -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<BiomeTemplate, BiomeBuilder> {
private final ConfigPack pack;
public BiomeFactory(ConfigPack pack) {
this.pack = pack;
}
@Override
public BiomeBuilder build(BiomeTemplate template, TerraPlugin main) {
return new UserDefinedBiomeBuilder(template, pack);
}
}

View File

@@ -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<String, Double> variables = new HashMap<>();
@Value("functions")
@Default
@Abstractable
private LinkedHashMap<String, FunctionTemplate> 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<TerraStructure> structures = new GlueList<>();
private List<ConfiguredStructure> 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<String, FunctionTemplate> 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<BlockType, Palette> getSlabPalettes() {
@@ -306,15 +276,11 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
return vanilla;
}
public String getErode() {
return erode;
}
public List<TerraStructure> getStructures() {
public List<ConfiguredStructure> 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<String, FunctionTemplate> testFunctions = new LinkedHashMap<>(pack.getTemplate().getFunctions());
testFunctions.putAll(functions);
for(Map.Entry<String, FunctionTemplate> 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) {

View File

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

View File

@@ -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<Long, UserDefinedBiome> 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<String, NoiseSeeded> noiseBuilderMap = pack.getTemplate().getNoiseBuilderMap();
Map<String, FunctionTemplate> 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<Biome> getVanillaBiomes() {
return template.getVanilla();
}
@Override
public BiomeTemplate getTemplate() {
return template;
}
}

View File

@@ -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"})

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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 {

View File

@@ -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<StageSeeded> stages = new GlueList<>();
List<StageSeeded> stages = new ArrayList<>();
private int expand;
public BiomePipelineBuilder(int init) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -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();

View File

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

View File

@@ -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<SeededBuilder<Stage>>, StageSeeded {
@Value("noise")

View File

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

View File

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

View File

@@ -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 {

View File

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

View File

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

View File

@@ -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 {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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")

View File

@@ -0,0 +1,7 @@
package com.dfsek.terra.api.config;
import com.dfsek.tectonic.config.ConfigTemplate;
public interface AbstractableTemplate extends ConfigTemplate {
String getID();
}

View File

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

View File

@@ -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<Structure> getStructure();
Range getSpawnStart();
StructureSpawn getSpawn();
}

View File

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

View File

@@ -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<TerraBiome> {
ProbabilityCollection<Biome> getVanillaBiomes();
BiomeTemplate getTemplate();
}

View File

@@ -7,4 +7,18 @@ public interface NoiseSeeded extends SeededBuilder<NoiseSampler> {
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;
}
};
}
}

View File

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

View File

@@ -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<TerraStructure> {
public AsyncStructureFinder(BiomeProvider provider, TerraStructure target, @NotNull Vector3 origin, World world, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) {
public class AsyncStructureFinder extends AsyncFeatureFinder<ConfiguredStructure> {
public AsyncStructureFinder(BiomeProvider provider, ConfiguredStructure target, @NotNull Vector3 origin, World world, int startRadius, int maxRadius, Consumer<Vector3> 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<TerraStructure> {
}
@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()));

View File

@@ -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<TerraStructure> structureConfigs = bio.getStructures();
List<ConfiguredStructure> structureConfigs = bio.getStructures();
if(structureConfigs.size() == 0) {
sender.sendMessage("No Structures");

View File

@@ -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<TerraStructure> {
public class StructureArgumentParser implements ArgumentParser<ConfiguredStructure> {
@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);
}
}

View File

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

View File

@@ -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<BiomeTemplate, BiomeBuilder> {
private final ConfigPackImpl pack;
public BiomeFactory(ConfigPackImpl pack) {
this.pack = pack;
}
@Override
public BiomeBuilder build(BiomeTemplate template, TerraPlugin main) {
return new UserDefinedBiomeBuilder(template, pack);
}
}

View File

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

View File

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

View File

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

View File

@@ -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<StructureTemplate, TerraStructure> {
public class StructureFactory implements ConfigFactory<StructureTemplate, ConfiguredStructure> {
@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);
}
}

View File

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

View File

@@ -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<GridSpawn> {
public class GridSpawnLoader implements TypeLoader<StructureSpawn> {
@Override
public GridSpawn load(Type type, Object o, ConfigLoader configLoader) {
public StructureSpawn load(Type type, Object o, ConfigLoader configLoader) {
Map<String, Integer> map = (Map<String, Integer>) o;
return new GridSpawn(map.get("width"), map.get("padding"), map.getOrDefault("salt", 0));
}

View File

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

View File

@@ -14,17 +14,7 @@ public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvi
protected int resolution = 1;
@Value("blend.noise")
@Default
protected NoiseSeeded blend = new NoiseSeeded() {
@Override
public NoiseSampler apply(Long seed) {
return NoiseSampler.zero();
}
@Override
public int getDimensions() {
return 2;
}
};
protected NoiseSeeded blend = NoiseSeeded.zero(2);
@Value("blend.amplitude")
@Default
protected double blendAmp = 0d;

View File

@@ -4,8 +4,8 @@ import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
import com.dfsek.terra.api.world.biome.pipeline.source.RandomSource;
import com.dfsek.terra.config.builder.BiomeBuilder;
import com.dfsek.terra.addons.biome.pipeline.source.RandomSource;
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
public class NoiseSourceTemplate extends SourceTemplate {
@Value("noise")

View File

@@ -1,13 +0,0 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.expander;
import com.dfsek.terra.api.world.biome.generation.pipeline.Stage;
import com.dfsek.terra.api.world.biome.pipeline.expand.FractalExpander;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.StageTemplate;
public class ExpanderStageTemplate extends StageTemplate {
@Override
public Stage apply(Long seed) {
return new ExpanderStage(new FractalExpander(noise.apply(seed)));
}
}

View File

@@ -1,15 +0,0 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
import com.dfsek.terra.api.world.biome.generation.pipeline.Stage;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.config.loaders.config.biome.templates.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));
}
}

View File

@@ -1,11 +0,0 @@
package com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.SmoothMutator;
public class SmoothMutatorTemplate extends MutatorStageTemplate {
@Override
public BiomeMutator build(long seed) {
return new SmoothMutator(noise.apply(seed));
}
}

View File

@@ -20,6 +20,7 @@ import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent;
import com.dfsek.terra.api.registry.CheckedRegistry;
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.structure.LootTable;
import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.structures.loot.LootTableImpl;
@@ -29,7 +30,7 @@ import com.dfsek.terra.api.util.generic.pair.ImmutablePair;
import com.dfsek.terra.api.util.seeded.NoiseProvider;
import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.config.builder.BiomeBuilder;
import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.config.dummy.DummyWorld;
import com.dfsek.terra.config.fileloaders.FolderLoader;
import com.dfsek.terra.config.fileloaders.Loader;
@@ -274,7 +275,7 @@ public class ConfigPackImpl implements ConfigPack {
}
public Set<TerraStructure> getStructures() {
public Set<ConfiguredStructure> getStructures() {
return new HashSet<>(getRegistry(TerraStructure.class).entries());
}

View File

@@ -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<TerraStructure> getStructures() {
public Set<ConfiguredStructure> getStructures() {
return new HashSet<>(getRegistry(TerraStructure.class).entries());
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -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))

View File

@@ -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> structure;
private final Range spawnStart;
private final GridSpawn spawn;
private final StructureSpawn spawn;
private final StructureTemplate template;
public TerraStructure(ProbabilityCollection<Structure> structures, Range spawnStart, GridSpawn spawn, StructureTemplate template) {
public TerraStructure(ProbabilityCollection<Structure> 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<Structure> getStructure() {
return structure;
}
@Override
public Range getSpawnStart() {
return spawnStart;
}
public GridSpawn getSpawn() {
@Override
public StructureSpawn getSpawn() {
return spawn;
}
}

View File

@@ -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)

View File

@@ -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 -> {

View File

@@ -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 {

View File

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

View File

@@ -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<BlockPos> result = new CompletableFuture<>();
AsyncStructureFinder finder = new AsyncStructureFinder(terraWorld.getBiomeProvider(), located, FabricAdapter.adapt(center), terraWorld.getWorld(), 0, 500, location -> {

View File

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