diff --git a/pom.xml b/pom.xml
index 1bb4c38dc..47e1e2952 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
org.polydev
gaea
- 1.10.80
+ 1.10.82
me.lucko
diff --git a/src/main/java/com/dfsek/terra/Range.java b/src/main/java/com/dfsek/terra/Range.java
deleted file mode 100644
index 6c648b4f7..000000000
--- a/src/main/java/com/dfsek/terra/Range.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package com.dfsek.terra;
-
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Iterator;
-import java.util.Random;
-
-public class Range implements Iterable {
- private int min;
- private int max;
- public Range(int min, int max) {
- if(min > max) throw new IllegalArgumentException("Minimum must not be grater than maximum!");
- this.max = max;
- this.min = min;
- }
-
- public boolean isInRange(int test) {
- return test >= min && test < max;
- }
-
- public int getMax() {
- return max;
- }
-
- public int getMin() {
- return min;
- }
-
- public Range setMax(int max) {
- this.max = max;
- return this;
- }
-
- public int getRange() {
- return max-min;
- }
-
- public Range multiply(int mult) {
- min*=mult;
- max*=mult;
- return this;
- }
-
- public Range reflect(int pt) {
- return new Range(2*pt-this.getMax(), 2*pt-this.getMin());
- }
-
- public Range setMin(int min) {
- this.min = min;
- return this;
- }
-
- public int get(Random r) {
- return r.nextInt((max-min)+1)+min;
- }
-
- public Range intersects(Range other) {
- try {
- return new Range(Math.max(this.getMin(), other.getMin()), Math.min(this.getMax(), other.getMax()));
- } catch(IllegalArgumentException e) {
- return null;
- }
- }
-
- public Range add(int add) {
- this.min += add;
- this.max += add;
- return this;
- }
-
- public Range sub(int sub) {
- this.min -= sub;
- this.max -= sub;
- return this;
- }
-
- @Override
- public String toString() {
- return "Min: " + getMin() + ", Max:" + getMax();
- }
-
- @Override
- public int hashCode() {
- return min * 31 + max;
- }
-
- @Override
- public boolean equals(Object obj) {
- if(!(obj instanceof Range)) return false;
- Range other = (Range) obj;
- return other.getMin() == this.getMin() && other.getMax() == this.getMax();
- }
-
- @NotNull
- @Override
- public Iterator iterator() {
- return new RangeIterator(this);
- }
- private static class RangeIterator implements Iterator {
- private Integer current;
- private final Range m;
-
- public RangeIterator(Range m) {
- this.m = m;
- current = m.getMin();
- }
-
- @Override
- public boolean hasNext() {
- return current < m.getMax();
- }
-
- @Override
- public Integer next() {
- current++;
- return current - 1;
- }
- }
-}
diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
index 4d27d6ac2..b2090532f 100644
--- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.carving;
-import com.dfsek.terra.Range;
+import org.polydev.gaea.math.Range;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.BiomeConfig;
diff --git a/src/main/java/com/dfsek/terra/config/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/ConfigUtil.java
index bc8069bd8..4da1f6015 100644
--- a/src/main/java/com/dfsek/terra/config/ConfigUtil.java
+++ b/src/main/java/com/dfsek/terra/config/ConfigUtil.java
@@ -23,12 +23,14 @@ import java.util.stream.Collectors;
public class ConfigUtil {
public static boolean debug;
public static long dataSave; // Period of population data saving, in ticks.
+ public static boolean masterDisableCaves;
public static void loadConfig(JavaPlugin main) {
main.saveDefaultConfig();
FileConfiguration config = main.getConfig();
debug = config.getBoolean("debug", false);
dataSave = Duration.parse(Objects.requireNonNull(config.getString("data-save", "PT6M"))).toMillis()/20L;
+ masterDisableCaves = config.getBoolean("master-disable.caves", false);
Logger logger = main.getLogger();
logger.info("Loading config values");
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
index 66e4fe6eb..d919a0f98 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.genconfig;
-import com.dfsek.terra.Range;
+import org.polydev.gaea.math.Range;
import com.dfsek.terra.TerraTree;
import com.dfsek.terra.config.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
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 d197c8f9e..95a6df468 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.genconfig;
-import com.dfsek.terra.Range;
+import org.polydev.gaea.math.Range;
import com.dfsek.terra.TerraTree;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.generation.UserDefinedDecorator;
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 b5c250f18..962b8721e 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.genconfig;
-import com.dfsek.terra.Range;
+import org.polydev.gaea.math.Range;
import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.TerraConfigObject;
import org.bukkit.Bukkit;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
index 1c0d39943..dc01c32ef 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
@@ -4,11 +4,14 @@ import com.dfsek.terra.config.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
+import org.bukkit.ChunkSnapshot;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException;
+import org.bukkit.util.Vector;
+import org.polydev.gaea.math.Range;
import org.polydev.gaea.world.Flora;
import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette;
@@ -82,12 +85,12 @@ public class FloraConfig extends TerraConfigObject implements Flora {
}
@Override
- public List getValidSpawnsAt(Chunk chunk, int x, int z) {
+ public List getValidSpawnsAt(Chunk chunk, int x, int z, Range range) {
List blocks = new ArrayList<>();
- int y;
- for(y = chunk.getWorld().getMaxHeight() - 1; y > 0; y--) {
- if(spawnable.contains(chunk.getBlock(x, y, z).getType()) && replaceable.contains(chunk.getBlock(x, y+1, z).getType())) {
- blocks.add(chunk.getBlock(x, y, z));
+ for(int y : range) {
+ Block check = chunk.getBlock(x, y, z);
+ if(spawnable.contains(check.getType())) {
+ blocks.add(check);
}
}
return blocks;
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 e764ffad5..f9c4ff50f 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
@@ -66,16 +66,28 @@ public class PaletteConfig extends TerraConfigObject {
return paletteID;
}
+ @SuppressWarnings("unchecked")
protected static Palette getPalette(List