diff --git a/src/main/java/com/dfsek/terra/carving/Cavern.java b/src/main/java/com/dfsek/terra/carving/Cavern.java index 7ec405639..46f94626a 100644 --- a/src/main/java/com/dfsek/terra/carving/Cavern.java +++ b/src/main/java/com/dfsek/terra/carving/Cavern.java @@ -42,7 +42,7 @@ public class Cavern { public static class Node { private final long seed; - private final GridSpawn spawn = new GridSpawn(16, 0); + private final GridSpawn spawn = new GridSpawn(16, 0, 0); public Node(World w) { this.seed = w.getSeed(); diff --git a/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java b/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java index 5b02fe953..bae39cbcc 100644 --- a/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java +++ b/src/main/java/com/dfsek/terra/config/loaders/config/GridSpawnLoader.java @@ -1,6 +1,5 @@ package com.dfsek.terra.config.loaders.config; -import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.tectonic.loading.TypeLoader; import com.dfsek.terra.procgen.GridSpawn; @@ -11,8 +10,8 @@ import java.util.Map; @SuppressWarnings("unchecked") public class GridSpawnLoader implements TypeLoader { @Override - public GridSpawn load(Type type, Object o, ConfigLoader configLoader) throws LoadException { + public GridSpawn load(Type type, Object o, ConfigLoader configLoader) { Map map = (Map) o; - return new GridSpawn(map.get("width"), map.get("padding")); + return new GridSpawn(map.get("width"), map.get("padding"), map.getOrDefault("seed", 0)); } } diff --git a/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java b/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java index 5b5d344f1..0bbab8b7c 100644 --- a/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java +++ b/src/main/java/com/dfsek/terra/config/templates/StructureTemplate.java @@ -31,7 +31,6 @@ public class StructureTemplate extends AbstractableTemplate { @Abstractable private Range bound; - @Value("spawn") @Abstractable private GridSpawn spawn; diff --git a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java index 6a53a9209..371625192 100644 --- a/src/main/java/com/dfsek/terra/procgen/GridSpawn.java +++ b/src/main/java/com/dfsek/terra/procgen/GridSpawn.java @@ -14,10 +14,12 @@ import java.util.Random; public class GridSpawn { private final int separation; private final int width; + private final int seedOffset; - public GridSpawn(int width, int separation) { + public GridSpawn(int width, int separation, int seedOffset) { this.separation = separation; this.width = width; + this.seedOffset = seedOffset; } /** @@ -34,7 +36,7 @@ public class GridSpawn { List zones = new GlueList<>(); for(int xi = structureChunkX - 1; xi <= structureChunkX + 1; xi++) { for(int zi = structureChunkZ - 1; zi <= structureChunkZ + 1; zi++) { - zones.add(getChunkSpawn(xi, zi, seed)); + zones.add(getChunkSpawn(xi, zi, seed + seedOffset)); } } Vector shortest = zones.get(0); @@ -54,7 +56,7 @@ public class GridSpawn { * @return Vector representing spawnpoint */ public Vector getChunkSpawn(int structureChunkX, int structureChunkZ, long seed) { - Random r = new FastRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed)); + Random r = new FastRandom(MathUtil.getCarverChunkSeed(structureChunkX, structureChunkZ, seed + seedOffset)); int offsetX = r.nextInt(width); int offsetZ = r.nextInt(width); int sx = structureChunkX * (width + 2 * separation) + offsetX;