From ce97732da74525f86c6abb0bd0e55c777d71cd55 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sun, 29 Nov 2020 23:57:03 -0700 Subject: [PATCH] Use Tectonic validation API to validate Biome noise equations --- lib/Tectonic-0.1.0.jar | Bin 30197 -> 31232 bytes .../terra/config/templates/BiomeTemplate.java | 34 +++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/lib/Tectonic-0.1.0.jar b/lib/Tectonic-0.1.0.jar index cfd1c45a6a032cc636556c8ab8a2c251cf248169..779b930e74256b23e950e29acf3cf4b39fbd242f 100644 GIT binary patch delta 6784 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 delta 5845 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 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; + } }