build biome config addon

This commit is contained in:
dfsek committed 2021-07-04 23:11:08 -07:00
1 parent 19d482f249
commit 3364a75cec
16 files changed
+63 -156

No files matched your search

@@ -2,7 +2,6 @@ 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;
import com.dfsek.paralithic.eval.tokenizer.ParseException;
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;
@@ -14,18 +13,11 @@ 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.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.structure.ConfiguredStructure; 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.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.carving.UserDefinedCarver;
import com.dfsek.terra.world.population.items.TerraStructure;
import com.dfsek.terra.addons.flora.flora.FloraLayer;
import com.dfsek.terra.addons.ore.ores.OreHolder;
import com.dfsek.terra.addons.tree.tree.TreeLayer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
@@ -54,7 +46,7 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
@Value("beta.carving.equation") @Value("beta.carving.equation")
@Abstractable @Abstractable
@Default @Default
private NoiseSeeded carvingEquation = NoiseSeeded.zero(2); private NoiseSeeded carvingEquation = NoiseSeeded.zero(3);
@Value("palette") @Value("palette")
@Abstractable @Abstractable
@@ -98,10 +90,10 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
@Abstractable @Abstractable
private NoiseSeeded noiseEquation; private NoiseSeeded noiseEquation;
@Value("ores") /*@Value("ores")
@Abstractable @Abstractable
@Default @Default
private OreHolder oreHolder = new OreHolder(); private OreHolder oreHolder = new OreHolder();*/
@Value("ocean.level") @Value("ocean.level")
@Abstractable @Abstractable
@@ -115,22 +107,22 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
@Value("elevation.equation") @Value("elevation.equation")
@Default @Default
@Abstractable @Abstractable
private String elevationEquation = null; private NoiseSeeded elevationEquation = NoiseSeeded.zero(2);
@Value("elevation.weight") @Value("elevation.weight")
@Default @Default
@Abstractable @Abstractable
private double elevationWeight = 1; private double elevationWeight = 1;
@Value("flora") /*@Value("flora")
@Abstractable @Abstractable
@Default @Default
private List<FloraLayer> flora = new GlueList<>(); private List<FloraLayer> flora = new ArrayList<>();
@Value("trees") @Value("trees")
@Abstractable @Abstractable
@Default @Default
private List<TreeLayer> trees = new GlueList<>(); private List<TreeLayer> trees = new ArrayList<>();*/
@Value("slabs.enable") @Value("slabs.enable")
@Abstractable @Abstractable
@@ -166,10 +158,10 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
@Abstractable @Abstractable
private Set<String> tags = new HashSet<>(); private Set<String> tags = new HashSet<>();
@Value("carving") /*@Value("carving")
@Abstractable @Abstractable
@Default @Default
private Map<UserDefinedCarver, Integer> carvers = new HashMap<>(); private Map<UserDefinedCarver, Integer> carvers = new HashMap<>();*/
@Value("colors") @Value("colors")
@Abstractable @Abstractable
@@ -188,10 +180,6 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
return colors; return colors;
} }
public Map<UserDefinedCarver, Integer> getCarvers() {
return carvers;
}
public double getBlendWeight() { public double getBlendWeight() {
return blendWeight; return blendWeight;
} }
@@ -216,10 +204,6 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
return slabThreshold; return slabThreshold;
} }
public List<FloraLayer> getFlora() {
return flora;
}
public boolean doSlabs() { public boolean doSlabs() {
return doSlabs; return doSlabs;
} }
@@ -240,11 +224,11 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
return biomeNoise; return biomeNoise;
} }
public String getElevationEquation() { public NoiseSeeded getElevationEquation() {
return elevationEquation; return elevationEquation;
} }
public String getCarvingEquation() { public NoiseSeeded getCarvingEquation() {
return carvingEquation; return carvingEquation;
} }
@@ -268,10 +252,6 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
return palette; return palette;
} }
public List<TreeLayer> getTrees() {
return trees;
}
public ProbabilityCollection<Biome> getVanilla() { public ProbabilityCollection<Biome> getVanilla() {
return vanilla; return vanilla;
} }
@@ -284,10 +264,6 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
return noiseEquation; return noiseEquation;
} }
public OreHolder getOreHolder() {
return oreHolder;
}
public double getElevationWeight() { public double getElevationWeight() {
return elevationWeight; return elevationWeight;
} }
@@ -304,7 +280,7 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
public boolean validate() throws ValidationException { public boolean validate() throws ValidationException {
color |= 0xff000000; // Alpha adjustment color |= 0xff000000; // Alpha adjustment
Parser tester = new Parser(); Parser tester = new Parser();
Scope testScope = new Scope().withParent(pack.getVarScope()); Scope testScope = new Scope();
variables.forEach(testScope::create); variables.forEach(testScope::create);
@@ -313,24 +289,24 @@ public class BiomeTemplate implements AbstractableTemplate, ValidatedConfigTempl
testScope.addInvocationVariable("z"); testScope.addInvocationVariable("z");
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
try { try {
tester.parse(noiseEquation, testScope); noiseEquation.apply(0L);
} catch(ParseException e) { } catch(Exception e) {
throw new ValidationException("Invalid noise equation: ", e); throw new ValidationException("Invalid noise sampler: ", e);
} }
try { try {
tester.parse(carvingEquation, testScope); carvingEquation.apply(0L);
} catch(ParseException e) { } catch(Exception e) {
throw new ValidationException("Invalid carving equation: ", e); throw new ValidationException("Invalid carving sampler: ", e);
} }
try { try {
if(elevationEquation != null) tester.parse(elevationEquation, testScope); elevationEquation.apply(0L);
} catch(ParseException e) { } catch(Exception e) {
throw new ValidationException("Invalid elevation equation: ", e); throw new ValidationException("Invalid elevation sampler: ", e);
} }
return true; return true;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.noise.paralithic; package com.dfsek.terra.addons.biome;
import com.dfsek.paralithic.functions.dynamic.DynamicFunction; import com.dfsek.paralithic.functions.dynamic.DynamicFunction;
@@ -1,21 +0,0 @@
package com.dfsek.terra.addons.biome;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.api.math.range.ConstantRange;
import com.dfsek.terra.api.util.Range;
import com.dfsek.terra.addons.ore.ores.OreConfig;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class OreConfigLoader implements TypeLoader<OreConfig> {
@Override
public OreConfig load(Type type, Object o, ConfigLoader configLoader) {
Map<String, Integer> map = (Map<String, Integer>) o;
Range amount = new ConstantRange(map.get("min"), map.get("max"));
Range height = new ConstantRange(map.get("min-height"), map.get("max-height"));
return new OreConfig(amount, height);
}
}
@@ -1,26 +0,0 @@
package com.dfsek.terra.addons.biome;
import com.dfsek.tectonic.exception.LoadException;
import com.dfsek.tectonic.loading.ConfigLoader;
import com.dfsek.tectonic.loading.TypeLoader;
import com.dfsek.terra.addons.ore.ores.Ore;
import com.dfsek.terra.addons.ore.ores.OreConfig;
import com.dfsek.terra.addons.ore.ores.OreHolder;
import java.lang.reflect.Type;
import java.util.Map;
@SuppressWarnings("unchecked")
public class OreHolderLoader implements TypeLoader<OreHolder> {
@Override
public OreHolder load(Type type, Object o, ConfigLoader configLoader) throws LoadException {
OreHolder holder = new OreHolder();
Map<String, Object> map = (Map<String, Object>) o;
for(Map.Entry<String, Object> entry : map.entrySet()) {
holder.add(configLoader.loadClass(Ore.class, entry.getKey()), configLoader.loadClass(OreConfig.class, entry.getValue()), entry.getKey());
}
return holder;
}
}
@@ -0,0 +1,18 @@
package com.dfsek.terra.addons.biome;
import com.dfsek.terra.addons.biome.holder.PaletteHolder;
import com.dfsek.terra.api.world.biome.PaletteSettings;
import com.dfsek.terra.api.world.generator.Palette;
public class PaletteSettingsImpl implements PaletteSettings {
private final PaletteHolder palette;
public PaletteSettingsImpl(PaletteHolder palette) {
this.palette = palette;
}
@Override
public Palette getPalette(int y) {
return palette.getPalette(y);
}
}
@@ -5,8 +5,6 @@ import com.dfsek.terra.api.world.World;
import com.dfsek.terra.api.world.biome.Biome; import com.dfsek.terra.api.world.biome.Biome;
import com.dfsek.terra.api.world.biome.Generator; import com.dfsek.terra.api.world.biome.Generator;
import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.world.generation.WorldGenerator;
import java.util.Set; import java.util.Set;
@@ -1,21 +1,10 @@
package com.dfsek.terra.addons.biome; 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.config.ConfigPack;
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.BiomeBuilder;
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.config.loaders.config.function.FunctionTemplate;
import com.dfsek.terra.config.pack.ConfigPackImpl;
import com.dfsek.terra.config.templates.BiomeTemplate;
import com.dfsek.terra.noise.samplers.ExpressionSampler;
import com.dfsek.terra.world.generation.WorldGenerator;
import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -35,25 +24,7 @@ public class UserDefinedBiomeBuilder implements BiomeBuilder {
synchronized(biomeMap) { synchronized(biomeMap) {
return biomeMap.computeIfAbsent(seed, return biomeMap.computeIfAbsent(seed,
s -> { s -> {
NoiseSampler noise; WorldGenerator generator = new WorldGenerator(template.getPalette(), template.getSlant(), template.getNoiseEquation().apply(seed), template.getElevationEquation().apply(seed), template.getCarvingEquation().apply(seed), template.getBiomeNoise().apply(seed), template.getElevationWeight(),
NoiseSampler elevation;
NoiseSampler carving;
Scope varScope = new Scope().withParent(pack.getVarScope());
template.getVariables().forEach(varScope::create);
Map<String, NoiseSeeded> noiseBuilderMap = pack.getTemplate().getNoiseBuilderMap();
try {
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);
}
WorldGenerator generator = new WorldGenerator(template.getPalette(), template.getSlant(), noise, elevation, carving, template.getBiomeNoise().apply(seed), template.getElevationWeight(),
template.getBlendDistance(), template.getBlendStep(), template.getBlendWeight()); template.getBlendDistance(), template.getBlendStep(), template.getBlendWeight());
return new UserDefinedBiome(template.getVanilla(), generator, template); return new UserDefinedBiome(template.getVanilla(), generator, template);
} }
@@ -4,12 +4,10 @@ import com.dfsek.terra.addons.biome.holder.PaletteHolder;
import com.dfsek.terra.addons.biome.slant.SlantHolder; 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.biome.PaletteSettings;
public class WorldGenerator implements Generator { public class WorldGenerator implements Generator {
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"}) private final PaletteSettings paletteSettings;
private final PaletteHolder palettes;
@SuppressWarnings({"unchecked", "rawtypes", "RedundantSuppression"})
private final SlantHolder slantPalettes; private final SlantHolder slantPalettes;
private final NoiseSampler noise; private final NoiseSampler noise;
@@ -23,7 +21,7 @@ public class WorldGenerator implements Generator {
private final double blendWeight; private final double blendWeight;
public WorldGenerator(PaletteHolder palettes, SlantHolder slantPalettes, NoiseSampler noise, NoiseSampler elevation, NoiseSampler carving, NoiseSampler biomeNoise, double elevationWeight, int blendDistance, int blendStep, double blendWeight) { public WorldGenerator(PaletteHolder palettes, SlantHolder slantPalettes, NoiseSampler noise, NoiseSampler elevation, NoiseSampler carving, NoiseSampler biomeNoise, double elevationWeight, int blendDistance, int blendStep, double blendWeight) {
this.palettes = palettes; this.paletteSettings = new PaletteSettingsImpl(palettes);
this.slantPalettes = slantPalettes; this.slantPalettes = slantPalettes;
this.noise = noise; this.noise = noise;
this.elevation = elevation; this.elevation = elevation;
@@ -61,14 +59,9 @@ public class WorldGenerator implements Generator {
return blendWeight; return blendWeight;
} }
/**
* Gets the BlockPalette to generate the biome with.
*
* @return BlockPalette - The biome's palette.
*/
@Override @Override
public Palette getPalette(int y) { public PaletteSettings getPaletteSettings() {
return palettes.getPalette(y); return paletteSettings;
} }
@Override @Override
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.world.locate; package com.dfsek.terra.addons.biome.command.biome;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.vector.Vector3;
@@ -1,4 +1,4 @@
package com.dfsek.terra.api.world.locate; package com.dfsek.terra.addons.biome.command.biome;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.vector.Vector3; import com.dfsek.terra.api.vector.Vector3;
@@ -1,5 +1,6 @@
package com.dfsek.terra.addons.biome.command.biome; package com.dfsek.terra.addons.biome.command.biome;
import com.dfsek.terra.addons.biome.UserDefinedBiome;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.CommandTemplate;
import com.dfsek.terra.api.command.annotation.Command; import com.dfsek.terra.api.command.annotation.Command;
@@ -9,9 +10,7 @@ import com.dfsek.terra.api.command.annotation.type.WorldCommand;
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.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.config.lang.LangUtil;
@Command( @Command(
subcommands = { subcommands = {
@@ -40,6 +39,6 @@ public class BiomeCommand implements CommandTemplate {
BiomeProvider provider = main.getWorld(player.world()).getBiomeProvider(); BiomeProvider provider = main.getWorld(player.world()).getBiomeProvider();
UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome(player.position()); UserDefinedBiome biome = (UserDefinedBiome) provider.getBiome(player.position());
LangUtil.send("command.biome.in", sender, biome.getID()); sender.sendMessage("You are standing in " + biome.getID());
} }
} }
@@ -1,5 +1,9 @@
package com.dfsek.terra.addons.biome.command.biome; package com.dfsek.terra.addons.biome.command.biome;
import com.dfsek.terra.addons.biome.BiomeTemplate;
import com.dfsek.terra.addons.biome.UserDefinedBiome;
import com.dfsek.terra.addons.biome.command.biome.arg.BiomeArgumentParser;
import com.dfsek.terra.addons.biome.command.biome.tab.BiomeTabCompleter;
import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.CommandTemplate;
import com.dfsek.terra.api.command.annotation.Argument; import com.dfsek.terra.api.command.annotation.Argument;
import com.dfsek.terra.api.command.annotation.Command; import com.dfsek.terra.api.command.annotation.Command;
@@ -7,9 +11,6 @@ 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.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.config.templates.BiomeTemplate;
import com.dfsek.terra.world.population.items.TerraStructure;
import java.util.List; import java.util.List;
@@ -47,8 +48,8 @@ public class BiomeInfoCommand implements CommandTemplate {
sender.sendMessage("No Structures"); sender.sendMessage("No Structures");
} else { } else {
sender.sendMessage("-------Structures-------"); sender.sendMessage("-------Structures-------");
for(TerraStructure c : structureConfigs) { for(ConfiguredStructure c : structureConfigs) {
sender.sendMessage(" - " + c.getTemplate().getID()); sender.sendMessage(" - " + c);
} }
} }
} }
@@ -1,6 +1,7 @@
package com.dfsek.terra.addons.biome.command.biome; package com.dfsek.terra.addons.biome.command.biome;
import com.dfsek.terra.addons.biome.command.biome.arg.BiomeArgumentParser; import com.dfsek.terra.addons.biome.command.biome.arg.BiomeArgumentParser;
import com.dfsek.terra.addons.biome.command.biome.tab.BiomeTabCompleter;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.command.CommandTemplate; import com.dfsek.terra.api.command.CommandTemplate;
import com.dfsek.terra.api.command.annotation.Argument; import com.dfsek.terra.api.command.annotation.Argument;
@@ -16,9 +17,6 @@ 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.vector.Vector3; import com.dfsek.terra.api.vector.Vector3;
import com.dfsek.terra.api.world.biome.TerraBiome; import com.dfsek.terra.api.world.biome.TerraBiome;
import com.dfsek.terra.api.world.locate.AsyncBiomeFinder;
import com.dfsek.terra.addons.biome.command.biome.tab.BiomeTabCompleter;
import com.dfsek.terra.config.lang.LangUtil;
import java.util.Locale; import java.util.Locale;
@@ -70,7 +68,7 @@ public class BiomeLocateCommand implements CommandTemplate {
if(teleport) { if(teleport) {
main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ()))); main.runPossiblyUnsafeTask(() -> player.position(new Vector3(location.getX(), player.position().getY(), location.getZ())));
} }
} else LangUtil.send("command.biome.unable-to-locate", sender); } else sender.sendMessage("Unable to locate biome \"" + biome.getID() + "\"");
}, main), "Biome Location Thread").start(); }, main), "Biome Location Thread").start();
} }
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome; package com.dfsek.terra.addons.biome.pipeline.config;
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;
@@ -1,4 +1,4 @@
package com.dfsek.terra.addons.biome; package com.dfsek.terra.addons.biome.pipeline.config;
import com.dfsek.tectonic.loading.object.ObjectTemplate; import com.dfsek.tectonic.loading.object.ObjectTemplate;
import com.dfsek.terra.api.util.seeded.SourceSeeded; import com.dfsek.terra.api.util.seeded.SourceSeeded;
@@ -4,6 +4,8 @@ import com.dfsek.paralithic.Expression;
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;
import com.dfsek.paralithic.eval.tokenizer.ParseException; import com.dfsek.paralithic.eval.tokenizer.ParseException;
import com.dfsek.terra.addons.carver.carving.Carver;
import com.dfsek.terra.addons.carver.carving.Worm;
import com.dfsek.terra.api.TerraPlugin; import com.dfsek.terra.api.TerraPlugin;
import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction; import com.dfsek.terra.api.math.paralithic.defined.UserDefinedFunction;
import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction2; import com.dfsek.terra.api.math.paralithic.noise.NoiseFunction2;
@@ -15,8 +17,6 @@ import com.dfsek.terra.api.util.seeded.NoiseSeeded;
import com.dfsek.terra.api.vector.Vector3; 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.carving.Carver;
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 net.jafama.FastMath; import net.jafama.FastMath;