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
@@ -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);
}
}
@@ -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.Parser;
import com.dfsek.paralithic.eval.parser.Scope; 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.annotations.Value;
import com.dfsek.tectonic.config.ValidatedConfigTemplate; import com.dfsek.tectonic.config.ValidatedConfigTemplate;
import com.dfsek.tectonic.exception.ValidationException; 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.TerraPlugin;
import com.dfsek.terra.api.block.BlockType; 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.config.ConfigPack;
import com.dfsek.terra.api.math.paralithic.BlankFunction; import com.dfsek.terra.api.math.paralithic.BlankFunction;
import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction; import com.dfsek.terra.api.structure.ConfiguredStructure;
import com.dfsek.terra.api.noise.NoiseSampler;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.generator.Palette; 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.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.TerraStructure;
import com.dfsek.terra.world.population.items.flora.FloraLayer; 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.ores.OreHolder;
import com.dfsek.terra.world.population.items.tree.TreeLayer; import com.dfsek.terra.world.population.items.tree.TreeLayer;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@SuppressWarnings({"FieldMayBeFinal", "unused"}) @SuppressWarnings({"FieldMayBeFinal", "unused"})
public class BiomeTemplate extends AbstractableTemplate implements ValidatedConfigTemplate { public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTemplate {
private final ConfigPackImpl pack; private final ConfigPack pack;
@Value("id") @Value("id")
private String id; private String id;
@@ -54,15 +51,10 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
@Default @Default
private Map<String, Double> variables = new HashMap<>(); private Map<String, Double> variables = new HashMap<>();
@Value("functions")
@Default
@Abstractable
private LinkedHashMap<String, FunctionTemplate> functions = new LinkedHashMap<>();
@Value("beta.carving.equation") @Value("beta.carving.equation")
@Abstractable @Abstractable
@Default @Default
private String carvingEquation = "0"; private NoiseSeeded carvingEquation = NoiseSeeded.zero(2);
@Value("palette") @Value("palette")
@Abstractable @Abstractable
@@ -80,7 +72,7 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
@Value("biome-noise") @Value("biome-noise")
@Default @Default
@Abstractable @Abstractable
private NoiseSeeded biomeNoise; private NoiseSeeded biomeNoise = NoiseSeeded.zero(2);
@Value("blend.distance") @Value("blend.distance")
@Abstractable @Abstractable
@@ -97,19 +89,14 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
@Default @Default
private int blendStep = 4; private int blendStep = 4;
@Value("erode")
@Abstractable
@Default
private String erode = null;
@Value("structures") @Value("structures")
@Abstractable @Abstractable
@Default @Default
private List<TerraStructure> structures = new GlueList<>(); private List<ConfiguredStructure> structures = new ArrayList<>();
@Value("noise-equation") @Value("noise")
@Abstractable @Abstractable
private String noiseEquation; private NoiseSeeded noiseEquation;
@Value("ores") @Value("ores")
@Abstractable @Abstractable
@@ -123,7 +110,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
@Value("ocean.palette") @Value("ocean.palette")
@Abstractable @Abstractable
@Default
private Palette oceanPalette; private Palette oceanPalette;
@Value("elevation.equation") @Value("elevation.equation")
@@ -206,10 +192,6 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
return carvers; return carvers;
} }
public Map<String, FunctionTemplate> getFunctions() {
return functions;
}
public double getBlendWeight() { public double getBlendWeight() {
return blendWeight; return blendWeight;
} }
@@ -242,20 +224,8 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
return doSlabs; return doSlabs;
} }
public BiomeTemplate(ConfigPackImpl pack, TerraPlugin main) { public BiomeTemplate(ConfigPack pack, TerraPlugin main) {
this.pack = pack; 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() { public Map<BlockType, Palette> getSlabPalettes() {
@@ -306,15 +276,11 @@ public class BiomeTemplate extends AbstractableTemplate implements ValidatedConf
return vanilla; return vanilla;
} }
public String getErode() { public List<ConfiguredStructure> getStructures() {
return erode;
}
public List<TerraStructure> getStructures() {
return structures; return structures;
} }
public String getNoiseEquation() { public NoiseSeeded getNoiseEquation() {
return noiseEquation; 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 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 { try {
tester.parse(noiseEquation, testScope); tester.parse(noiseEquation, testScope);
} catch(ParseException e) { } catch(ParseException e) {
@@ -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.util.ProbabilityCollection;
import com.dfsek.terra.api.world.World; 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.config.templates.BiomeTemplate;
import com.dfsek.terra.world.generation.WorldGenerator; import com.dfsek.terra.world.generation.WorldGenerator;
@@ -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.parser.Scope;
import com.dfsek.paralithic.eval.tokenizer.ParseException; 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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; 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.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.api.world.biome.UserDefinedBiome;
@@ -19,11 +21,11 @@ import java.util.concurrent.ConcurrentHashMap;
public class UserDefinedBiomeBuilder implements BiomeBuilder { public class UserDefinedBiomeBuilder implements BiomeBuilder {
private final BiomeTemplate template; private final BiomeTemplate template;
private final ConfigPackImpl pack; private final ConfigPack pack;
private final Map<Long, UserDefinedBiome> biomeMap = new ConcurrentHashMap<>(); private final Map<Long, UserDefinedBiome> biomeMap = new ConcurrentHashMap<>();
public UserDefinedBiomeBuilder(BiomeTemplate template, ConfigPackImpl pack) { public UserDefinedBiomeBuilder(BiomeTemplate template, ConfigPack pack) {
this.template = template; this.template = template;
this.pack = pack; this.pack = pack;
} }
@@ -41,14 +43,12 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder {
template.getVariables().forEach(varScope::create); template.getVariables().forEach(varScope::create);
Map<String, NoiseSeeded> noiseBuilderMap = pack.getTemplate().getNoiseBuilderMap(); Map<String, NoiseSeeded> noiseBuilderMap = pack.getTemplate().getNoiseBuilderMap();
Map<String, FunctionTemplate> functionTemplateMap = new LinkedHashMap<>(pack.getTemplate().getFunctions());
functionTemplateMap.putAll(template.getFunctions());
try { try {
noise = new ExpressionSampler(template.getNoiseEquation(), 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, functionTemplateMap); elevation = template.getElevationEquation() == null ? NoiseSampler.zero() : new ExpressionSampler(template.getElevationEquation(), varScope, seed, noiseBuilderMap);
carving = new ExpressionSampler(template.getCarvingEquation(), varScope, seed, noiseBuilderMap, functionTemplateMap); carving = new ExpressionSampler(template.getCarvingEquation(), varScope, seed, noiseBuilderMap);
} catch(ParseException e) { } catch(ParseException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -65,9 +65,4 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder {
public ProbabilityCollection<Biome> getVanillaBiomes() { public ProbabilityCollection<Biome> getVanillaBiomes() {
return template.getVanilla(); return template.getVanilla();
} }
@Override
public BiomeTemplate getTemplate() {
return template;
}
} }
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.generator.Palette; 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 { public class WorldGenerator implements Generator {
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) @SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"})
@@ -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 com.dfsek.terra.api.world.generator.Palette;
@@ -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 com.dfsek.terra.api.world.generator.Palette;
import net.jafama.FastMath; import net.jafama.FastMath;
@@ -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.block.state.BlockState;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
@@ -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; import java.util.TreeMap;
@@ -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.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.registry.Registry; import com.dfsek.terra.api.registry.Registry;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.config.builder.BiomeBuilder;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -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.vector.Vector2;
import com.dfsek.terra.api.world.biome.TerraBiome; 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;
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.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource; import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
public class BiomeHolderImpl implements BiomeHolder { public class BiomeHolderImpl implements BiomeHolder {
@@ -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.GlueList;
import com.dfsek.terra.api.util.seeded.StageSeeded; import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.api.vector.Vector2; 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.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.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -43,7 +44,7 @@ public class BiomePipelineImpl {
public static final class BiomePipelineBuilder { public static final class BiomePipelineBuilder {
private final int init; private final int init;
List<StageSeeded> stages = new GlueList<>(); List<StageSeeded> stages = new ArrayList<>();
private int expand; private int expand;
public BiomePipelineBuilder(int init) { public BiomePipelineBuilder(int init) {
@@ -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.TerraPlugin;
import com.dfsek.terra.api.noise.NoiseSampler; import com.dfsek.terra.api.noise.NoiseSampler;
@@ -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; import com.dfsek.terra.api.world.biome.TerraBiome;
@@ -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.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeSource;
public interface BiomeHolder { public interface BiomeHolder {
BiomeHolder expand(BiomeExpander expander); BiomeHolder expand(BiomeExpander expander);
@@ -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; import com.dfsek.terra.api.world.biome.TerraBiome;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.world.biome.generation.pipeline; package com.dfsek.terra.addons.biome.pipeline.api;
public interface Stage { public interface Stage {
boolean isExpansion(); boolean isExpansion();
@@ -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.Default;
import com.dfsek.tectonic.annotations.Value; 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.TerraPlugin;
import com.dfsek.terra.api.util.seeded.SourceSeeded; import com.dfsek.terra.api.util.seeded.SourceSeeded;
import com.dfsek.terra.api.util.seeded.StageSeeded; 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.BiomeProvider;
import com.dfsek.terra.api.world.biome.pipeline.BiomePipelineImpl;
import com.dfsek.terra.api.world.biome.provider.StandardBiomeProvider; import com.dfsek.terra.api.world.biome.provider.StandardBiomeProvider;
import java.util.List; import java.util.List;
@@ -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.annotations.Value;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.util.seeded.SeededBuilder; import com.dfsek.terra.api.util.seeded.SeededBuilder;
import com.dfsek.terra.api.util.seeded.StageSeeded; 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 { public abstract class StageTemplate implements ObjectTemplate<SeededBuilder<Stage>>, StageSeeded {
@Value("noise") @Value("noise")
@@ -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)));
}
}
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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 com.dfsek.terra.api.world.biome.pipeline.mutator.BorderListMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderListMutator;
import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.BorderMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.BorderMutator;
import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class BorderMutatorTemplate extends MutatorStageTemplate { public class BorderMutatorTemplate extends MutatorStageTemplate {
@@ -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));
}
}
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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 com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceListMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceListMutator;
import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator;
import com.dfsek.terra.api.world.biome.pipeline.mutator.ReplaceMutator; import com.dfsek.terra.addons.biome.pipeline.mutator.ReplaceMutator;
import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class ReplaceMutatorTemplate extends MutatorStageTemplate { public class ReplaceMutatorTemplate extends MutatorStageTemplate {
@@ -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));
}
}
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.world.biome.TerraBiome; 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 { public class FractalExpander implements BiomeExpander {
private final NoiseSampler sampler; private final NoiseSampler sampler;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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; import java.util.Map;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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 { public class BorderMutator implements BiomeMutator {
private final String border; private final String border;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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; import java.util.Map;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.world.biome.TerraBiome; 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 { public class ReplaceMutator implements BiomeMutator {
private final String replaceableTag; private final String replaceableTag;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.MathUtil; import com.dfsek.terra.api.util.MathUtil;
import com.dfsek.terra.api.world.biome.TerraBiome; 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; import java.util.Objects;
@@ -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.noise.NoiseSampler;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
@@ -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.addons.biome.pipeline.api.BiomeExpander;
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.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
public class ExpanderStage implements Stage { public class ExpanderStage implements Stage {
private final BiomeExpander expander; private final BiomeExpander expander;
@@ -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.addons.biome.pipeline.api.BiomeHolder;
import com.dfsek.terra.api.world.biome.generation.pipeline.BiomeMutator; import com.dfsek.terra.addons.biome.pipeline.api.BiomeMutator;
import com.dfsek.terra.api.world.biome.generation.pipeline.Stage; import com.dfsek.terra.addons.biome.pipeline.api.Stage;
public class MutatorStage implements Stage { public class MutatorStage implements Stage {
private final BiomeMutator mutator; private final BiomeMutator mutator;
@@ -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.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
@@ -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.tectonic.annotations.Value;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.biome.provider.SingleBiomeProvider; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
import com.dfsek.terra.config.builder.BiomeBuilder;
public class SingleBiomeProviderTemplate extends BiomeProviderTemplate { public class SingleBiomeProviderTemplate extends BiomeProviderTemplate {
@Value("biome") @Value("biome")
@@ -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.TerraPlugin;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
@@ -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.paralithic.eval.tokenizer.ParseException;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.ConfigFactory;
import com.dfsek.terra.api.util.MathUtil; 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.pack.ConfigPackImpl;
import com.dfsek.terra.config.templates.CarverTemplate;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -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.state.BlockState;
import com.dfsek.terra.api.block.BlockType; import com.dfsek.terra.api.block.BlockType;
@@ -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.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.block.BlockType; 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.math.range.ConstantRange;
import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.api.util.collections.MaterialSet;
import com.dfsek.terra.carving.CarverPalette;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
public class CarverTemplate extends AbstractableTemplate { public class CarverTemplate implements AbstractableTemplate {
@Value("id") @Value("id")
private String id; private String id;
@@ -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.TerraPlugin;
import com.dfsek.terra.api.block.state.BlockState; 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) { public void populate(@NotNull World world, @NotNull Chunk chunk) {
TerraWorld tw = main.getWorld(world); TerraWorld tw = main.getWorld(world);
WorldHandle handle = main.getWorldHandle(); WorldHandle handle = main.getWorldHandle();
BlockState AIR = handle.createBlockData("minecraft:air");
try(ProfileFrame ignore = main.getProfiler().profile("carving")) { try(ProfileFrame ignore = main.getProfiler().profile("carving")) {
Random random = PopulationUtil.getRandom(chunk); Random random = PopulationUtil.getRandom(chunk);
if(!tw.isSafe()) return; if(!tw.isSafe()) return;
@@ -1,4 +1,4 @@
package com.dfsek.terra.carving; package com.dfsek.terra.addons.carver;
import com.dfsek.paralithic.Expression; import com.dfsek.paralithic.Expression;
import com.dfsek.paralithic.eval.parser.Parser; 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.api.world.carving.Worm;
import com.dfsek.terra.config.loaders.config.function.FunctionTemplate; import com.dfsek.terra.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.templates.BiomeTemplate; import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate;
import net.jafama.FastMath; import net.jafama.FastMath;
import java.util.List; import java.util.List;
@@ -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.NoiseProvider;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.addons.noise.config.templates.ImageSamplerTemplate;
@Addon("noise") @Addon("noise")
@Author("Terra") @Author("Terra")
@Version("1.0.0") @Version("1.0.0")
@@ -56,8 +54,7 @@ public class NoiseAddon extends TerraAddon {
.applyLoader(ClampNormalizerTemplate.class, ClampNormalizerTemplate::new) .applyLoader(ClampNormalizerTemplate.class, ClampNormalizerTemplate::new)
.applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new) .applyLoader(ImageSamplerTemplate.class, ImageSamplerTemplate::new)
.applyLoader(CellularSampler.ReturnType.class, (t, object, cf) -> CellularSampler.ReturnType.valueOf((String) object)) .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") @SuppressWarnings("deprecation")
@@ -0,0 +1,7 @@
package com.dfsek.terra.api.config;
import com.dfsek.tectonic.config.ConfigTemplate;
public interface AbstractableTemplate extends ConfigTemplate {
String getID();
}
@@ -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.config.ConfigTemplate;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
@@ -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();
}
@@ -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);
}
@@ -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.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.SeededBuilder;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.config.templates.BiomeTemplate;
public interface BiomeBuilder extends SeededBuilder<TerraBiome> { public interface BiomeBuilder extends SeededBuilder<TerraBiome> {
ProbabilityCollection<Biome> getVanillaBiomes(); ProbabilityCollection<Biome> getVanillaBiomes();
BiomeTemplate getTemplate();
} }
@@ -7,4 +7,18 @@ public interface NoiseSeeded extends SeededBuilder<NoiseSampler> {
NoiseSampler apply(Long seed); NoiseSampler apply(Long seed);
int getDimensions(); 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;
}
};
}
} }
@@ -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. * 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 separation;
private final int width; private final int width;
private final int salt; private final int salt;
@@ -22,14 +22,7 @@ public class GridSpawn {
this.salt = salt; this.salt = salt;
} }
/** @Override
* Get nearest spawn point
*
* @param x X coordinate
* @param z Z coordinate
* @param seed Seed for RNG
* @return Vector representing nearest spawnpoint
*/
public Vector3 getNearestSpawn(int x, int z, long seed) { public Vector3 getNearestSpawn(int x, int z, long seed) {
int structureChunkX = x / (width + 2 * separation); int structureChunkX = x / (width + 2 * separation);
int structureChunkZ = z / (width + 2 * separation); int structureChunkZ = z / (width + 2 * separation);
@@ -1,6 +1,7 @@
package com.dfsek.terra.api.world.locate; package com.dfsek.terra.api.world.locate;
import com.dfsek.terra.api.TerraPlugin; 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.structure.rotation.Rotation;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.PopulationUtil; 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.World;
import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.world.population.items.TerraStructure;
import net.jafama.FastMath; import net.jafama.FastMath;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Random; import java.util.Random;
import java.util.function.Consumer; import java.util.function.Consumer;
public class AsyncStructureFinder extends AsyncFeatureFinder<TerraStructure> { public class AsyncStructureFinder extends AsyncFeatureFinder<ConfiguredStructure> {
public AsyncStructureFinder(BiomeProvider provider, TerraStructure target, @NotNull Vector3 origin, World world, int startRadius, int maxRadius, Consumer<Vector3> callback, TerraPlugin main) { 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); super(provider, target, origin, world, startRadius, maxRadius, callback, main);
setSearchSize(target.getSpawn().getWidth() + 2 * target.getSpawn().getSeparation()); setSearchSize(target.getSpawn().getWidth() + 2 * target.getSpawn().getSeparation());
} }
@@ -27,7 +27,7 @@ public class AsyncStructureFinder extends AsyncFeatureFinder<TerraStructure> {
} }
@Override @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()); Vector3 spawn = target.getSpawn().getChunkSpawn(x, z, world.getSeed());
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(target)) return false; 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())); Random random = new FastRandom(PopulationUtil.getCarverChunkSeed(FastMath.floorDiv(spawn.getBlockX(), 16), FastMath.floorDiv(spawn.getBlockZ(), 16), world.getSeed()));
@@ -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.Command;
import com.dfsek.terra.api.command.annotation.inject.ArgumentTarget; import com.dfsek.terra.api.command.annotation.inject.ArgumentTarget;
import com.dfsek.terra.api.entity.CommandSender; 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.TerraBiome;
import com.dfsek.terra.api.world.biome.UserDefinedBiome; import com.dfsek.terra.api.world.biome.UserDefinedBiome;
import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser; import com.dfsek.terra.commands.biome.arg.BiomeArgumentParser;
@@ -42,7 +43,7 @@ public class BiomeInfoCommand implements CommandTemplate {
bio.getExtended().forEach(id -> sender.sendMessage(" - " + id)); bio.getExtended().forEach(id -> sender.sendMessage(" - " + id));
} }
List<TerraStructure> structureConfigs = bio.getStructures(); List<ConfiguredStructure> structureConfigs = bio.getStructures();
if(structureConfigs.size() == 0) { if(structureConfigs.size() == 0) {
sender.sendMessage("No Structures"); sender.sendMessage("No Structures");
@@ -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.CommandSender;
import com.dfsek.terra.api.entity.Player; import com.dfsek.terra.api.entity.Player;
import com.dfsek.terra.api.injection.annotations.Inject; import com.dfsek.terra.api.injection.annotations.Inject;
import com.dfsek.terra.api.structure.ConfiguredStructure;
import com.dfsek.terra.world.population.items.TerraStructure; import com.dfsek.terra.world.population.items.TerraStructure;
public class StructureArgumentParser implements ArgumentParser<TerraStructure> { public class StructureArgumentParser implements ArgumentParser<ConfiguredStructure> {
@Inject @Inject
private TerraPlugin main; private TerraPlugin main;
@Override @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); return main.getWorld(((Player) sender).world()).getConfig().getRegistry(TerraStructure.class).get(arg);
} }
} }
@@ -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.util.seeded.StageSeeded;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; 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.generation.pipeline.BiomeSource;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage; import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.api.world.biome.provider.ImageBiomeProvider; 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.PaletteHolder;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; 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.SourceBuilderLoader;
import com.dfsek.terra.config.loaders.config.biome.StageBuilderLoader; 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.source.NoiseSourceTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.expander.ExpanderStageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.SmoothMutatorTemplate; 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.config.function.FunctionTemplate;
import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader; import com.dfsek.terra.config.loaders.palette.CarverPaletteLoader;
import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader; import com.dfsek.terra.config.loaders.palette.PaletteHolderLoader;
@@ -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);
}
}
@@ -1,6 +1,7 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.TerraPlugin; 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.Flora;
import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.NoisePalette;
import com.dfsek.terra.api.world.palette.PaletteImpl; import com.dfsek.terra.api.world.palette.PaletteImpl;
@@ -2,6 +2,7 @@ package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.block.state.BlockState; 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.config.templates.OreTemplate;
import com.dfsek.terra.world.population.items.ores.Ore; import com.dfsek.terra.world.population.items.ores.Ore;
import com.dfsek.terra.world.population.items.ores.VanillaOre; import com.dfsek.terra.world.population.items.ores.VanillaOre;
@@ -1,6 +1,7 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.TerraPlugin; 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.generator.Palette;
import com.dfsek.terra.api.world.palette.NoisePalette; import com.dfsek.terra.api.world.palette.NoisePalette;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
@@ -1,12 +1,14 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.TerraPlugin; 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.config.templates.StructureTemplate;
import com.dfsek.terra.world.population.items.TerraStructure; import com.dfsek.terra.world.population.items.TerraStructure;
public class StructureFactory implements ConfigFactory<StructureTemplate, TerraStructure> { public class StructureFactory implements ConfigFactory<StructureTemplate, ConfiguredStructure> {
@Override @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); return new TerraStructure(config.getStructures(), config.getY(), config.getSpawn(), config);
} }
} }
@@ -1,6 +1,7 @@
package com.dfsek.terra.config.factories; package com.dfsek.terra.config.factories;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.ConfigFactory;
import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.config.templates.TreeTemplate; import com.dfsek.terra.config.templates.TreeTemplate;
import com.dfsek.terra.world.population.items.tree.TerraTree; import com.dfsek.terra.world.population.items.tree.TerraTree;
@@ -3,14 +3,15 @@ package com.dfsek.terra.config.loaders.config;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.GridSpawn; import com.dfsek.terra.api.math.GridSpawn;
import com.dfsek.terra.api.structure.StructureSpawn;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class GridSpawnLoader implements TypeLoader<GridSpawn> { public class GridSpawnLoader implements TypeLoader<StructureSpawn> {
@Override @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; Map<String, Integer> map = (Map<String, Integer>) o;
return new GridSpawn(map.get("width"), map.get("padding"), map.getOrDefault("salt", 0)); return new GridSpawn(map.get("width"), map.get("padding"), map.getOrDefault("salt", 0));
} }
@@ -4,14 +4,14 @@ import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.util.seeded.StageSeeded; import com.dfsek.terra.api.util.seeded.StageSeeded;
import com.dfsek.terra.api.world.biome.pipeline.stages.ExpanderStage; import com.dfsek.terra.addons.biome.pipeline.stages.ExpanderStage;
import com.dfsek.terra.api.world.biome.pipeline.stages.MutatorStage; import com.dfsek.terra.addons.biome.pipeline.stages.MutatorStage;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.expander.ExpanderStageTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.expander.ExpanderStageTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderListMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.BorderMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.BorderMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceListMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceListMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.ReplaceMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.ReplaceMutatorTemplate;
import com.dfsek.terra.config.loaders.config.biome.templates.stage.mutator.SmoothMutatorTemplate; import com.dfsek.terra.addons.biome.pipeline.config.stage.mutator.SmoothMutatorTemplate;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map; import java.util.Map;
@@ -14,17 +14,7 @@ public abstract class BiomeProviderTemplate implements ObjectTemplate<BiomeProvi
protected int resolution = 1; protected int resolution = 1;
@Value("blend.noise") @Value("blend.noise")
@Default @Default
protected NoiseSeeded blend = new NoiseSeeded() { protected NoiseSeeded blend = NoiseSeeded.zero(2);
@Override
public NoiseSampler apply(Long seed) {
return NoiseSampler.zero();
}
@Override
public int getDimensions() {
return 2;
}
};
@Value("blend.amplitude") @Value("blend.amplitude")
@Default @Default
protected double blendAmp = 0d; protected double blendAmp = 0d;
@@ -4,8 +4,8 @@ import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; 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.generation.pipeline.BiomeSource;
import com.dfsek.terra.api.world.biome.pipeline.source.RandomSource; import com.dfsek.terra.addons.biome.pipeline.source.RandomSource;
import com.dfsek.terra.config.builder.BiomeBuilder; import com.dfsek.terra.api.util.seeded.BiomeBuilder;
public class NoiseSourceTemplate extends SourceTemplate { public class NoiseSourceTemplate extends SourceTemplate {
@Value("noise") @Value("noise")
@@ -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)));
}
}
@@ -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));
}
}
@@ -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));
}
}
@@ -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.CheckedRegistry;
import com.dfsek.terra.api.registry.OpenRegistry; import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.Registry; 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.LootTable;
import com.dfsek.terra.api.structure.Structure; import com.dfsek.terra.api.structure.Structure;
import com.dfsek.terra.api.structures.loot.LootTableImpl; 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.util.seeded.NoiseProvider;
import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; 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.dummy.DummyWorld;
import com.dfsek.terra.config.fileloaders.FolderLoader; import com.dfsek.terra.config.fileloaders.FolderLoader;
import com.dfsek.terra.config.fileloaders.Loader; 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()); return new HashSet<>(getRegistry(TerraStructure.class).entries());
} }
@@ -4,11 +4,12 @@ import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.registry.OpenRegistry; import com.dfsek.terra.api.registry.OpenRegistry;
import com.dfsek.terra.api.registry.Registry; 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.TerraWorld;
import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.generator.SamplerCache; 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.LockedRegistryImpl;
import com.dfsek.terra.registry.OpenRegistryImpl; import com.dfsek.terra.registry.OpenRegistryImpl;
import com.dfsek.terra.world.generation.math.SamplerCacheImpl; import com.dfsek.terra.world.generation.math.SamplerCacheImpl;
@@ -119,7 +120,7 @@ public class WorldConfigImpl implements WorldConfig {
return getTemplate().isDisableSaplings(); return getTemplate().isDisableSaplings();
} }
public Set<TerraStructure> getStructures() { public Set<ConfiguredStructure> getStructures() {
return new HashSet<>(getRegistry(TerraStructure.class).entries()); return new HashSet<>(getRegistry(TerraStructure.class).entries());
} }
@@ -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();
}
@@ -3,6 +3,7 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; 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.util.collections.MaterialSet;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder;
import com.dfsek.terra.world.population.items.flora.TerraFlora; 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; import java.util.List;
@SuppressWarnings({"FieldMayBeFinal", "unused"}) @SuppressWarnings({"FieldMayBeFinal", "unused"})
public class FloraTemplate extends AbstractableTemplate { public class FloraTemplate implements AbstractableTemplate {
@Value("id") @Value("id")
private String id; private String id;
@@ -5,6 +5,7 @@ import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.terra.api.block.state.BlockState; import com.dfsek.terra.api.block.state.BlockState;
import com.dfsek.terra.api.block.BlockType; 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.Range;
import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.api.util.collections.MaterialSet;
@@ -12,7 +13,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
public class OreTemplate extends AbstractableTemplate { public class OreTemplate implements AbstractableTemplate {
@Value("id") @Value("id")
private String id; private String id;
@@ -3,6 +3,7 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; 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.noise.NoiseSampler;
import com.dfsek.terra.api.util.seeded.NoiseSeeded; import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.world.palette.holder.PaletteLayerHolder; 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; import java.util.List;
@SuppressWarnings({"FieldMayBeFinal", "unused"}) @SuppressWarnings({"FieldMayBeFinal", "unused"})
public class PaletteTemplate extends AbstractableTemplate { public class PaletteTemplate implements AbstractableTemplate {
@Value("noise") @Value("noise")
@Abstractable @Abstractable
@Default @Default
@@ -4,8 +4,9 @@ import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate; 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.Structure;
import com.dfsek.terra.api.structure.StructureSpawn;
import com.dfsek.terra.api.util.GlueList; import com.dfsek.terra.api.util.GlueList;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.Range;
@@ -13,7 +14,7 @@ import com.dfsek.terra.api.util.Range;
import java.util.List; import java.util.List;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
public class StructureTemplate extends AbstractableTemplate implements ConfigTemplate { public class StructureTemplate implements AbstractableTemplate, ConfigTemplate {
@Value("id") @Value("id")
private String id; private String id;
@@ -27,7 +28,7 @@ public class StructureTemplate extends AbstractableTemplate implements ConfigTem
@Value("spawn") @Value("spawn")
@Abstractable @Abstractable
private GridSpawn spawn; private StructureSpawn spawn;
@Value("features") @Value("features")
@Abstractable @Abstractable
@@ -50,7 +51,7 @@ public class StructureTemplate extends AbstractableTemplate implements ConfigTem
return features; return features;
} }
public GridSpawn getSpawn() { public StructureSpawn getSpawn() {
return spawn; return spawn;
} }
} }
@@ -3,12 +3,13 @@ package com.dfsek.terra.config.templates;
import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Abstractable;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; 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.structure.Structure;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.collections.MaterialSet; import com.dfsek.terra.api.util.collections.MaterialSet;
@SuppressWarnings({"unused", "FieldMayBeFinal"}) @SuppressWarnings({"unused", "FieldMayBeFinal"})
public class TreeTemplate extends AbstractableTemplate { public class TreeTemplate implements AbstractableTemplate {
@Value("scripts") @Value("scripts")
@Abstractable @Abstractable
private ProbabilityCollection<Structure> structure; private ProbabilityCollection<Structure> structure;
@@ -2,7 +2,7 @@ package com.dfsek.terra.registry.config;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader; 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 com.dfsek.terra.registry.OpenRegistryImpl;
import java.lang.reflect.Type; import java.lang.reflect.Type;
@@ -3,24 +3,24 @@ package com.dfsek.terra.registry.config;
import com.dfsek.tectonic.config.ConfigTemplate; import com.dfsek.tectonic.config.ConfigTemplate;
import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.terra.api.TerraPlugin; 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.ConfigPack;
import com.dfsek.terra.api.config.ConfigType; import com.dfsek.terra.api.config.ConfigType;
import com.dfsek.terra.api.registry.OpenRegistry; 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.Flora;
import com.dfsek.terra.api.world.Tree; import com.dfsek.terra.api.world.Tree;
import com.dfsek.terra.api.world.generator.Palette; import com.dfsek.terra.api.world.generator.Palette;
import com.dfsek.terra.carving.UserDefinedCarver; 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.BiomeFactory;
import com.dfsek.terra.config.factories.CarverFactory; 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.FloraFactory;
import com.dfsek.terra.config.factories.OreFactory; import com.dfsek.terra.config.factories.OreFactory;
import com.dfsek.terra.config.factories.PaletteFactory; import com.dfsek.terra.config.factories.PaletteFactory;
import com.dfsek.terra.config.factories.StructureFactory; import com.dfsek.terra.config.factories.StructureFactory;
import com.dfsek.terra.config.factories.TreeFactory; import com.dfsek.terra.config.factories.TreeFactory;
import com.dfsek.terra.config.pack.ConfigPackImpl; 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.BiomeTemplate;
import com.dfsek.terra.config.templates.CarverTemplate; import com.dfsek.terra.config.templates.CarverTemplate;
import com.dfsek.terra.config.templates.FloraTemplate; import com.dfsek.terra.config.templates.FloraTemplate;
@@ -3,6 +3,7 @@ package com.dfsek.terra.world.population;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.config.WorldConfig; import com.dfsek.terra.api.config.WorldConfig;
import com.dfsek.terra.api.profiler.ProfileFrame; 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.structure.rotation.Rotation;
import com.dfsek.terra.api.util.FastRandom; import com.dfsek.terra.api.util.FastRandom;
import com.dfsek.terra.api.util.PopulationUtil; import com.dfsek.terra.api.util.PopulationUtil;
@@ -39,7 +40,7 @@ public class StructurePopulator implements TerraBlockPopulator, Chunkified {
if(!tw.isSafe()) return; if(!tw.isSafe()) return;
BiomeProvider provider = tw.getBiomeProvider(); BiomeProvider provider = tw.getBiomeProvider();
WorldConfig config = tw.getConfig(); 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()); Vector3 spawn = conf.getSpawn().getNearestSpawn(cx + 8, cz + 8, world.getSeed());
if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf)) if(!((UserDefinedBiome) provider.getBiome(spawn)).getConfig().getStructures().contains(conf))
@@ -1,18 +1,19 @@
package com.dfsek.terra.world.population.items; 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.Structure;
import com.dfsek.terra.api.structure.StructureSpawn;
import com.dfsek.terra.api.util.ProbabilityCollection; import com.dfsek.terra.api.util.ProbabilityCollection;
import com.dfsek.terra.api.util.Range; import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.config.templates.StructureTemplate; import com.dfsek.terra.config.templates.StructureTemplate;
public class TerraStructure { public class TerraStructure implements ConfiguredStructure {
private final ProbabilityCollection<Structure> structure; private final ProbabilityCollection<Structure> structure;
private final Range spawnStart; private final Range spawnStart;
private final GridSpawn spawn; private final StructureSpawn spawn;
private final StructureTemplate template; 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.structure = structures;
this.spawnStart = spawnStart; this.spawnStart = spawnStart;
this.spawn = spawn; this.spawn = spawn;
@@ -23,15 +24,18 @@ public class TerraStructure {
return template; return template;
} }
@Override
public ProbabilityCollection<Structure> getStructure() { public ProbabilityCollection<Structure> getStructure() {
return structure; return structure;
} }
@Override
public Range getSpawnStart() { public Range getSpawnStart() {
return spawnStart; return spawnStart;
} }
public GridSpawn getSpawn() { @Override
public StructureSpawn getSpawn() {
return spawn; return spawn;
} }
} }
@@ -1,6 +1,7 @@
package com.dfsek.terra.bukkit.listeners; package com.dfsek.terra.bukkit.listeners;
import com.dfsek.terra.api.TerraPlugin; 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.TerraWorld;
import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.api.world.locate.AsyncStructureFinder;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
@@ -22,7 +23,7 @@ public class PaperListener implements Listener {
String name = "minecraft:" + e.getType().getName(); String name = "minecraft:" + e.getType().getName();
main.getDebugLogger().info("Overriding structure location for \"" + name + "\""); main.getDebugLogger().info("Overriding structure location for \"" + name + "\"");
TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getWorld())); 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) { if(config != null) {
AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin().toVector()), tw.getWorld(), 0, 500, location -> { AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getOrigin().toVector()), tw.getWorld(), 0, 500, location -> {
if(location != null) if(location != null)
@@ -1,6 +1,7 @@
package com.dfsek.terra.bukkit.listeners; package com.dfsek.terra.bukkit.listeners;
import com.dfsek.terra.api.TerraPlugin; 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.TerraWorld;
import com.dfsek.terra.api.world.locate.AsyncStructureFinder; import com.dfsek.terra.api.world.locate.AsyncStructureFinder;
import com.dfsek.terra.bukkit.world.BukkitAdapter; import com.dfsek.terra.bukkit.world.BukkitAdapter;
@@ -37,7 +38,7 @@ public class SpigotListener implements Listener {
if(!BukkitAdapter.adapt(e.getEntity().getWorld()).isTerraWorld()) return; if(!BukkitAdapter.adapt(e.getEntity().getWorld()).isTerraWorld()) return;
TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getEntity().getWorld())); TerraWorld tw = main.getWorld(BukkitAdapter.adapt(e.getEntity().getWorld()));
EnderSignal signal = (EnderSignal) entity; 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) { if(config != null) {
main.getDebugLogger().info("Overriding Ender Signal..."); main.getDebugLogger().info("Overriding Ender Signal...");
AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation().toVector()), tw.getWorld(), 0, 500, location -> { AsyncStructureFinder finder = new AsyncStructureFinder(tw.getBiomeProvider(), config, BukkitAdapter.adapt(e.getLocation().toVector()), tw.getWorld(), 0, 500, location -> {
@@ -39,7 +39,7 @@ import com.dfsek.terra.api.world.World;
import com.dfsek.terra.commands.CommandUtil; import com.dfsek.terra.commands.CommandUtil;
import com.dfsek.terra.config.GenericLoaders; import com.dfsek.terra.config.GenericLoaders;
import com.dfsek.terra.config.PluginConfigImpl; 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.config.lang.LangUtil;
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;
import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PreLoadCompatibilityOptions;
@@ -81,12 +81,8 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
public class TerraFabricPlugin implements TerraPlugin, ModInitializer { public class TerraFabricPlugin implements TerraPlugin, ModInitializer {
@@ -3,7 +3,7 @@ package com.dfsek.terra.fabric.config;
import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Default;
import com.dfsek.tectonic.annotations.Value; import com.dfsek.tectonic.annotations.Value;
import com.dfsek.tectonic.config.ConfigTemplate; 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 net.minecraft.util.Identifier;
import java.util.HashMap; import java.util.HashMap;
@@ -1,6 +1,7 @@
package com.dfsek.terra.fabric.generation; package com.dfsek.terra.fabric.generation;
import com.dfsek.terra.api.config.ConfigPack; 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.util.FastRandom;
import com.dfsek.terra.api.world.TerraWorld; import com.dfsek.terra.api.world.TerraWorld;
import com.dfsek.terra.api.world.World; import com.dfsek.terra.api.world.World;
@@ -115,7 +116,7 @@ public class FabricChunkGeneratorWrapper extends ChunkGenerator implements Gener
if(!pack.disableStructures()) { if(!pack.disableStructures()) {
String name = Objects.requireNonNull(Registry.STRUCTURE_FEATURE.getId(feature)).toString(); String name = Objects.requireNonNull(Registry.STRUCTURE_FEATURE.getId(feature)).toString();
TerraWorld terraWorld = TerraFabricPlugin.getInstance().getWorld((World) world); 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) { if(located != null) {
CompletableFuture<BlockPos> result = new CompletableFuture<>(); CompletableFuture<BlockPos> result = new CompletableFuture<>();
AsyncStructureFinder finder = new AsyncStructureFinder(terraWorld.getBiomeProvider(), located, FabricAdapter.adapt(center), terraWorld.getWorld(), 0, 500, location -> { AsyncStructureFinder finder = new AsyncStructureFinder(terraWorld.getBiomeProvider(), located, FabricAdapter.adapt(center), terraWorld.getWorld(), 0, 500, location -> {
@@ -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.block.entity.Sign;
import com.dfsek.terra.api.config.ConfigPack; import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.util.generic.pair.Pair; 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.config.templates.BiomeTemplate;
import com.dfsek.terra.fabric.TerraFabricPlugin; import com.dfsek.terra.fabric.TerraFabricPlugin;
import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions; import com.dfsek.terra.fabric.config.PostLoadCompatibilityOptions;