diff --git a/lib/Gaea-1.14.3.jar b/lib/Gaea-1.14.3.jar index 0fc0aa392..42ac42aac 100644 Binary files a/lib/Gaea-1.14.3.jar and b/lib/Gaea-1.14.3.jar differ diff --git a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java index 30bc4de2e..eacb1cb4a 100644 --- a/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java +++ b/src/main/java/com/dfsek/terra/generation/config/WorldGenerator.java @@ -3,6 +3,7 @@ package com.dfsek.terra.generation.config; import com.dfsek.terra.config.genconfig.noise.NoiseConfig; import com.dfsek.terra.math.NoiseFunction2; import com.dfsek.terra.math.NoiseFunction3; +import com.dfsek.terra.math.RandomFunction; import org.bukkit.World; import org.bukkit.block.data.BlockData; import org.polydev.gaea.biome.Generator; @@ -36,12 +37,15 @@ public class WorldGenerator extends Generator { @SuppressWarnings({"rawtypes", "unchecked"}) public WorldGenerator(long seed, String equation, String elevateEquation, Scope vScope, Map noiseBuilders, Palette[] palettes, Palette[] slantPalettes, boolean preventSmooth) { Parser p = new Parser(); + p.registerFunction("rand", new RandomFunction()); Parser ep = new Parser(); + ep.registerFunction("rand", new RandomFunction()); Scope s = new Scope().withParent(vScope); xVar = s.create("x"); yVar = s.create("y"); zVar = s.create("z"); + s.create("seed").setValue(seed); this.preventSmooth = preventSmooth; @@ -63,6 +67,7 @@ public class WorldGenerator extends Generator { this.noiseExp = p.parse(equation, s).simplify(); if(elevateEquation != null) { Scope es = new Scope().withParent(vScope); + es.create("seed").setValue(seed); this.elevationXVar = es.create("x"); this.elevationZVar = es.create("z"); this.elevationExp = ep.parse(elevateEquation, es).simplify(); diff --git a/src/main/java/com/dfsek/terra/math/RandomFunction.java b/src/main/java/com/dfsek/terra/math/RandomFunction.java new file mode 100644 index 000000000..bad8d3d6e --- /dev/null +++ b/src/main/java/com/dfsek/terra/math/RandomFunction.java @@ -0,0 +1,30 @@ +package com.dfsek.terra.math; + +import org.polydev.gaea.util.FastRandom; +import parsii.eval.Expression; +import parsii.eval.Function; + +import java.util.List; + +/** + * Provides access to a PRNG ({@link org.polydev.gaea.util.FastRandom}) + *

+ * Takes 1 argument, which sets the seed + */ +public class RandomFunction implements Function { + @Override + public int getNumberOfArguments() { + return 1; + } + + @Override + public double eval(List list) { + long seed = (long) list.get(0).evaluate(); + return new FastRandom(seed).nextDouble(); + } + + @Override + public boolean isNaturalFunction() { + return true; + } +}