diff --git a/lib/Tectonic-0.1.0.jar b/lib/Tectonic-0.1.0.jar index cfd1c45a6..779b930e7 100644 Binary files a/lib/Tectonic-0.1.0.jar and b/lib/Tectonic-0.1.0.jar differ diff --git a/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java b/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java index 7138d5c9c..c354f9fff 100644 --- a/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java +++ b/src/main/java/com/dfsek/terra/config/templates/BiomeTemplate.java @@ -3,6 +3,8 @@ package com.dfsek.terra.config.templates; import com.dfsek.tectonic.annotations.Abstractable; import com.dfsek.tectonic.annotations.Default; import com.dfsek.tectonic.annotations.Value; +import com.dfsek.tectonic.config.ValidatedConfigTemplate; +import com.dfsek.tectonic.exception.ValidationException; import com.dfsek.terra.biome.palette.PaletteHolder; import com.dfsek.terra.biome.palette.SinglePalette; import com.dfsek.terra.carving.UserDefinedCarver; @@ -10,19 +12,23 @@ import com.dfsek.terra.config.base.ConfigPack; import com.dfsek.terra.generation.items.flora.FloraLayer; import com.dfsek.terra.generation.items.ores.Ore; import com.dfsek.terra.generation.items.ores.OreConfig; +import com.dfsek.terra.math.BlankFunction; import com.dfsek.terra.structure.TerraStructure; import org.bukkit.Material; import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import org.polydev.gaea.util.GlueList; import org.polydev.gaea.world.palette.Palette; +import parsii.eval.Parser; +import parsii.eval.Scope; +import parsii.tokenizer.ParseException; import java.util.HashMap; import java.util.List; import java.util.Map; @SuppressWarnings({"FieldMayBeFinal", "unused"}) -public class BiomeTemplate extends AbstractableTemplate { +public class BiomeTemplate extends AbstractableTemplate implements ValidatedConfigTemplate { private final ConfigPack pack; @Value("id") @@ -179,4 +185,30 @@ public class BiomeTemplate extends AbstractableTemplate { public Map getOres() { return ores; } + + @Override + public boolean validate() throws ValidationException { + Parser tester = new Parser(); + Scope testScope = new Scope().withParent(pack.getVarScope()); + testScope.create("x"); + testScope.create("y"); + testScope.create("z"); + testScope.create("seed"); + + pack.getTemplate().getNoiseBuilderMap().forEach((id, builder) -> tester.registerFunction(id, new BlankFunction(builder.getDimensions()))); // Register dummy functions + + try { + tester.parse(noiseEquation, testScope); + } catch(ParseException e) { + throw new ValidationException("Invalid noise equation: ", e); + } + + try { + if(elevationEquation != null) tester.parse(elevationEquation, testScope); + } catch(ParseException e) { + throw new ValidationException("Invalid elevation equation: ", e); + } + + return true; + } }