diff --git a/pom.xml b/pom.xml
index 208e5b9d6..78aa01e08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,7 +83,7 @@
org.polydev
gaea
- 1.8.1
+ 1.9.0
javax.vecmath
@@ -91,6 +91,12 @@
1.5.2
test
+
+ javax.vecmath
+ vecmath
+ 1.5.2
+ compile
+
\ No newline at end of file
diff --git a/src/main/java/com/dfsek/terra/TerraChunkGenerator.java b/src/main/java/com/dfsek/terra/TerraChunkGenerator.java
index dc6ec8d35..50639abf4 100644
--- a/src/main/java/com/dfsek/terra/TerraChunkGenerator.java
+++ b/src/main/java/com/dfsek/terra/TerraChunkGenerator.java
@@ -12,8 +12,8 @@ import org.bukkit.generator.BlockPopulator;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.generation.GaeaChunkGenerator;
import org.polydev.gaea.generation.GenerationPopulator;
+import org.polydev.gaea.math.ChunkInterpolator;
import org.polydev.gaea.math.FastNoise;
-import org.polydev.gaea.math.InterpolationType;
import org.polydev.gaea.population.PopulationManager;
import java.util.Arrays;
@@ -24,7 +24,7 @@ import java.util.Random;
public class TerraChunkGenerator extends GaeaChunkGenerator {
private final PopulationManager popMan = new PopulationManager();
public TerraChunkGenerator() {
- super(InterpolationType.TRILINEAR);
+ super(ChunkInterpolator.InterpolationType.TRILINEAR);
popMan.attach(new TreePopulator());
popMan.attach(new FaunaPopulator());
popMan.attach(new OrePopulator());
diff --git a/src/main/java/com/dfsek/terra/biome/BiomeZone.java b/src/main/java/com/dfsek/terra/biome/BiomeZone.java
index 39280e393..1ed44432f 100644
--- a/src/main/java/com/dfsek/terra/biome/BiomeZone.java
+++ b/src/main/java/com/dfsek/terra/biome/BiomeZone.java
@@ -14,17 +14,12 @@ public class BiomeZone {
private final World w;
private final FastNoise noise;
private static final Map zones = new HashMap<>();
- private static final double[] normalMap = new double[] {-0.572874128818512D, -0.5007192492485046D, -0.4495924413204193D, -0.41612040996551514D, -0.3814384937286377D, -0.3477869927883148D, -0.31369876861572266D, -0.28042978048324585D, -0.24612723290920258D, -0.21002958714962006D, -0.17449893057346344D, -0.1394101232290268D, -0.10480091720819473D, -0.0714595764875412D, -0.03575916960835457D, -0.0017036114586517215D, 0.03202686831355095D, 0.06717526167631149D, 0.10201185941696167D, 0.13758908212184906D, 0.17380206286907196D, 0.20863550901412964D, 0.24430148303508759D, 0.2795235514640808D, 0.31312644481658936D, 0.3475150465965271D, 0.38061848282814026D, 0.415109783411026D, 0.44838231801986694D, 0.4965132176876068D, 0.5715073347091675D, 0.7126374840736389D};
-
private BiomeZone(World w, float freq) {
this.w = w;
this.noise = new FastNoise((int) w.getSeed()+2);
- FastNoise base = new FastNoise((int) (w.getSeed()+2));
- base.setNoiseType(FastNoise.NoiseType.Simplex);
- base.setFrequency(freq);
- this.noise.setCellularDistanceFunction(FastNoise.CellularDistanceFunction.Natural);
- this.noise.setCellularNoiseLookup(base);
- this.noise.setFrequency(freq);
+ this.noise.setNoiseType(FastNoise.NoiseType.SimplexFractal);
+ this.noise.setFractalOctaves(4);
+ this.noise.setFrequency(WorldConfig.fromWorld(w).zoneFreq);
setZones(WorldConfig.fromWorld(w).definedGrids);
zones.put(w, this);
}
diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java b/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java
index 6961193b3..f9b2f6bad 100644
--- a/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java
+++ b/src/main/java/com/dfsek/terra/biome/UserDefinedGenerator.java
@@ -10,7 +10,7 @@ import org.polydev.gaea.math.parsii.eval.Parser;
import org.polydev.gaea.math.parsii.eval.Scope;
import org.polydev.gaea.math.parsii.eval.Variable;
import org.polydev.gaea.math.parsii.tokenizer.ParseException;
-import org.polydev.gaea.world.BlockPalette;
+import org.polydev.gaea.world.palette.BlockPalette;
import java.util.List;
import java.util.Map;
diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedGrid.java b/src/main/java/com/dfsek/terra/biome/UserDefinedGrid.java
index ba526c6c2..eca57d171 100644
--- a/src/main/java/com/dfsek/terra/biome/UserDefinedGrid.java
+++ b/src/main/java/com/dfsek/terra/biome/UserDefinedGrid.java
@@ -7,12 +7,12 @@ import org.polydev.gaea.biome.BiomeGrid;
public class UserDefinedGrid extends BiomeGrid {
public UserDefinedGrid(World w, float freq1, float freq2, BiomeGridConfig config) {
super(w, freq1, freq2, config.getBiomeGrid().length, config.getBiomeGrid()[0].length);
- super.setNormalType(NormalType.CELLULAR);
+ super.setNormalType(NormalType.LOOKUP4096);
super.setGrid(config.getBiomeGrid());
}
public UserDefinedGrid(World w, float freq1, float freq2, UserDefinedBiome[][] b) {
super(w, freq1, freq2, b.length, b[0].length);
- super.setNormalType(NormalType.CELLULAR);
+ super.setNormalType(NormalType.LOOKUP4096);
super.setGrid(b);
}
}
diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
index 445229b14..5bb64df50 100644
--- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
@@ -6,32 +6,31 @@ import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import org.bukkit.World;
import org.bukkit.util.Vector;
-import org.polydev.gaea.world.BlockPalette;
import org.polydev.gaea.world.carving.Carver;
import org.polydev.gaea.world.carving.Worm;
import java.util.Random;
public class UserDefinedCarver extends Carver {
- private BlockPalette inner;
- private BlockPalette walls;
private final double[] start; // 0, 1, 2 = x, y, z.
private final double[] mutate; // 0, 1, 2 = x, y, z. 3 = radius.
private final double[] radiusMultiplier;
private final MaxMin length;
private final MaxMin radius;
- public UserDefinedCarver(MaxMin height, MaxMin radius, MaxMin length, double[] start, double[] mutate, double[] radiusMultiplier) {
+ private final int hash;
+ public UserDefinedCarver(MaxMin height, MaxMin radius, MaxMin length, double[] start, double[] mutate, double[] radiusMultiplier, int hash) {
super(height.getMin(), height.getMax());
this.radius = radius;
this.length = length;
this.start = start;
this.mutate = mutate;
this.radiusMultiplier = radiusMultiplier;
+ this.hash = hash;
}
@Override
public Worm getWorm(long l, Vector vector) {
- Random r = new Random(l);
+ Random r = new Random(l+hash);
return new UserDefinedWorm(length.get(r), r, vector, radius.getMax());
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
index 0159648ad..94574ae22 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
@@ -17,9 +17,10 @@ import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.parsii.tokenizer.ParseException;
import org.polydev.gaea.tree.Tree;
import org.polydev.gaea.tree.TreeType;
-import org.polydev.gaea.world.BlockPalette;
import org.polydev.gaea.world.Fauna;
import org.polydev.gaea.world.FaunaType;
+import org.polydev.gaea.world.palette.BlockPalette;
+import org.polydev.gaea.world.palette.RandomPalette;
import java.io.File;
import java.io.IOException;
@@ -27,6 +28,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
+import java.util.Random;
import java.util.TreeMap;
public class BiomeConfig extends TerraConfigObject {
@@ -64,7 +66,7 @@ public class BiomeConfig extends TerraConfigObject {
try {
if(((String) entry.getKey()).startsWith("BLOCK:")) {
try {
- paletteMap.put((Integer) entry.getValue(), new BlockPalette().addBlockData(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1));
+ paletteMap.put((Integer) entry.getValue(), new RandomPalette(new Random(0)).addBlockData(new ProbabilityCollection().add(Bukkit.createBlockData(((String) entry.getKey()).substring(6)), 1), 1));
} catch(IllegalArgumentException ex) {
throw new InvalidConfigurationException("SEVERE configuration error for BlockPalettes in biome " + getFriendlyName() + ", ID: " + biomeID + ". BlockData " + entry.getKey() + " is invalid!");
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
index 9ab2f27fa..659bd3bb0 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
@@ -92,7 +92,8 @@ public class CarverConfig extends TerraConfigObject {
MaxMin radius = new MaxMin(getInt("start.radius.min"), getInt("start.radius.max"));
MaxMin height = new MaxMin(getInt("start.height.min"), getInt("start.height.max"));
id = getString("id");
- carver = new UserDefinedCarver(height, radius, length, start, mutate, radiusMultiplier);
+ if(id == null) throw new InvalidConfigurationException("No ID specified for Carver!");
+ carver = new UserDefinedCarver(height, radius, length, start, mutate, radiusMultiplier, id.hashCode());
caveConfig.put(id, this);
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FaunaConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FaunaConfig.java
index f68135307..5bee7456c 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/FaunaConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/FaunaConfig.java
@@ -9,9 +9,9 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.configuration.InvalidConfigurationException;
-import org.bukkit.plugin.java.JavaPlugin;
-import org.polydev.gaea.world.BlockPalette;
import org.polydev.gaea.world.Fauna;
+import org.polydev.gaea.world.palette.BlockPalette;
+import org.polydev.gaea.world.palette.RandomPalette;
import java.io.File;
import java.io.IOException;
@@ -45,7 +45,9 @@ public class FaunaConfig extends TerraConfigObject implements Fauna {
throw new InvalidConfigurationException("Invalid material ID in spawnable list: " + e.getMessage());
}
- faunaPalette = PaletteConfig.getPalette(getMapList("blocks"));
+ BlockPalette p = new RandomPalette(new Random(getInt("seed", 4)));
+
+ faunaPalette = PaletteConfig.getPalette(getMapList("blocks"), p);
if(!contains("id")) throw new InvalidConfigurationException("Fauna ID unspecified!");
this.id = getString("id");
if(!contains("name")) throw new InvalidConfigurationException("Fauna Name unspecified!");
@@ -76,7 +78,7 @@ public class FaunaConfig extends TerraConfigObject implements Fauna {
if(!location.clone().add(0, i+1, 0).getBlock().isEmpty()) return false;
}
for(int i = 0; i < size; i++) {
- location.clone().add(0, i+1, 0).getBlock().setBlockData(faunaPalette.getBlockData(size-(i+1), new Random()), false);
+ location.clone().add(0, i+1, 0).getBlock().setBlockData(faunaPalette.getBlockData(size-(i+1), location.getBlockX(), location.getBlockZ()), false);
}
return true;
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
index 166834ef5..06be1b9a5 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
@@ -6,14 +6,18 @@ import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.plugin.java.JavaPlugin;
+import org.polydev.gaea.math.FastNoise;
import org.polydev.gaea.math.ProbabilityCollection;
-import org.polydev.gaea.world.BlockPalette;
+import org.polydev.gaea.world.palette.BlockPalette;
+import org.polydev.gaea.world.palette.RandomPalette;
+import org.polydev.gaea.world.palette.SimplexPalette;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Random;
public class PaletteConfig extends TerraConfigObject {
private static final Map palettes = new HashMap<>();
@@ -21,13 +25,24 @@ public class PaletteConfig extends TerraConfigObject {
private String paletteID;
private boolean isEnabled = false;
private String friendlyName;
+ private boolean useNoise = false;
+ private float nFreq;
public PaletteConfig(File file) throws IOException, InvalidConfigurationException {
super(file);
}
@Override
public void init() throws InvalidConfigurationException {
- palette = getPalette(getMapList("blocks"));
+ BlockPalette pal;
+ if(getBoolean("simplex", false)) {
+ useNoise = true;
+ FastNoise pNoise = new FastNoise(getInt("seed", 3));
+ pNoise.setNoiseType(FastNoise.NoiseType.SimplexFractal);
+ pNoise.setFractalOctaves(4);
+ pNoise.setFrequency((float) getDouble("frequency", 0.02));
+ pal = new SimplexPalette(pNoise);
+ } else pal = new RandomPalette(new Random(getInt("seed", 3)));
+ palette = getPalette(getMapList("blocks"), pal);
if(!contains("id")) throw new InvalidConfigurationException("Grid ID unspecified!");
this.paletteID = getString("id");
if(!contains("name")) throw new InvalidConfigurationException("Grid Name unspecified!");
@@ -52,8 +67,7 @@ public class PaletteConfig extends TerraConfigObject {
return paletteID;
}
- protected static BlockPalette getPalette(List