diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 3fa80cf2d..50b07f269 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,7 +2,6 @@
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index adf80f72f..db584e1d5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
org.polydev
gaea
- 1.10.0
+ 1.10.5
javax.vecmath
diff --git a/src/main/java/com/dfsek/terra/Terra.java b/src/main/java/com/dfsek/terra/Terra.java
index bcb0605e2..91dd31f35 100644
--- a/src/main/java/com/dfsek/terra/Terra.java
+++ b/src/main/java/com/dfsek/terra/Terra.java
@@ -1,10 +1,7 @@
package com.dfsek.terra;
import com.dfsek.terra.config.ConfigUtil;
-import com.mojang.brigadier.arguments.BoolArgumentType;
-import com.mojang.brigadier.arguments.StringArgumentType;
-import com.mojang.brigadier.builder.LiteralArgumentBuilder;
-import com.mojang.brigadier.builder.RequiredArgumentBuilder;
+import com.dfsek.terra.generation.TerraChunkGenerator;
import com.mojang.brigadier.tree.LiteralCommandNode;
import me.lucko.commodore.Commodore;
import me.lucko.commodore.CommodoreProvider;
diff --git a/src/main/java/com/dfsek/terra/TerraCommand.java b/src/main/java/com/dfsek/terra/TerraCommand.java
index 0f00152cf..5ef14cee6 100644
--- a/src/main/java/com/dfsek/terra/TerraCommand.java
+++ b/src/main/java/com/dfsek/terra/TerraCommand.java
@@ -6,8 +6,10 @@ import com.dfsek.terra.config.ConfigUtil;
import com.dfsek.terra.config.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeConfig;
import com.dfsek.terra.config.genconfig.OreConfig;
+import com.dfsek.terra.generation.TerraChunkGenerator;
import com.dfsek.terra.image.WorldImageGenerator;
import com.dfsek.terra.structure.GaeaStructure;
+import com.dfsek.terra.structure.StructureSpawn;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
@@ -20,6 +22,7 @@ import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
+import org.bukkit.util.Vector;
import org.jetbrains.annotations.NotNull;
import org.polydev.gaea.profiler.WorldProfiler;
@@ -170,6 +173,9 @@ public class TerraCommand implements CommandExecutor, TabExecutor {
sender.sendMessage("Structure not found.");
}
return true;
+ } else if("getspawn".equals(args[1])) {
+ Vector v = new StructureSpawn(50, 25).getNearestSpawn(pl.getLocation().getBlockX(), pl.getLocation().getBlockZ(), pl.getWorld().getSeed());
+ sender.sendMessage(v.getBlockX() + ":" + v.getBlockZ());
}
}
} catch(ArrayIndexOutOfBoundsException e) {
diff --git a/src/main/java/com/dfsek/terra/TerraProfiler.java b/src/main/java/com/dfsek/terra/TerraProfiler.java
index 242fd0fe8..7d78eadd6 100644
--- a/src/main/java/com/dfsek/terra/TerraProfiler.java
+++ b/src/main/java/com/dfsek/terra/TerraProfiler.java
@@ -1,5 +1,6 @@
package com.dfsek.terra;
+import com.dfsek.terra.generation.TerraChunkGenerator;
import org.bukkit.World;
import org.polydev.gaea.profiler.DataType;
import org.polydev.gaea.profiler.Measurement;
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 99a467eee..290cff977 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/AbstractBiomeConfig.java
@@ -5,6 +5,7 @@ import com.dfsek.terra.TerraTree;
import com.dfsek.terra.config.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
import org.bukkit.Bukkit;
+import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
@@ -40,6 +41,10 @@ public class AbstractBiomeConfig extends TerraConfigObject {
private int floraAttempts;
private Map floraHeights;
private TreeMap> paletteMap;
+ private double slabThreshold;
+ private Map> slabs;
+ private Map> stairs;
+ private boolean useStairs;
public AbstractBiomeConfig(File file) throws IOException, InvalidConfigurationException {
super(file);
@@ -146,6 +151,17 @@ public class AbstractBiomeConfig extends TerraConfigObject {
}
}
+ // Get slab stuff
+ useStairs = false;
+ if(contains("slabs") && getBoolean("slabs.enable", false)) {
+ slabThreshold = getDouble("slabs.threshold", 0.1D);
+ slabs = BiomeConfigUtil.getSlabPalettes(getMapList("slabs.palettes"), this);
+ if(contains("slabs.stair-palettes") && getBoolean("slabs.use-stairs-if-available", false)) {
+ stairs = BiomeConfigUtil.getSlabPalettes(getMapList("slabs.stair-palettes"), this);
+ useStairs = true;
+ }
+ }
+
biomes.put(biomeID, this);
}
@@ -209,4 +225,20 @@ public class AbstractBiomeConfig extends TerraConfigObject {
public static AbstractBiomeConfig fromID(String id) {
return biomes.get(id);
}
+
+ public Map> getSlabs() {
+ return slabs;
+ }
+
+ public double getSlabThreshold() {
+ return slabThreshold;
+ }
+
+ public Map> getStairs() {
+ return stairs;
+ }
+
+ public boolean shouldUseStairs() {
+ return useStairs;
+ }
}
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 b2a031aab..9fe9903cb 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfig.java
@@ -9,7 +9,9 @@ import com.dfsek.terra.carving.UserDefinedCarver;
import com.dfsek.terra.config.ConfigUtil;
import com.dfsek.terra.config.TerraConfigObject;
import org.bukkit.Bukkit;
+import org.bukkit.Material;
import org.bukkit.block.data.BlockData;
+import org.bukkit.block.data.type.Stairs;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.InvalidConfigurationException;
import org.polydev.gaea.math.ProbabilityCollection;
@@ -26,6 +28,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -43,6 +46,9 @@ public class BiomeConfig extends TerraConfigObject {
private Map floraHeights;
private String eq;
private int floraAttempts;
+ private Map> slabs;
+ private Map> stairs;
+ private double slabThreshold;
public BiomeConfig(File file) throws InvalidConfigurationException, IOException {
super(file);
@@ -126,12 +132,14 @@ public class BiomeConfig extends TerraConfigObject {
// Get various simple values using getOrDefault config methods.
try {
+ slabThreshold = getDouble("slabs.threshold", Objects.requireNonNull(abstractBiome).getSlabThreshold());
floraChance = getInt("flora-chance", Objects.requireNonNull(abstractBiome).getFloraChance());
floraAttempts = getInt("flora-attempts", Objects.requireNonNull(abstractBiome).getFloraAttempts());
treeChance = getInt("tree-chance", Objects.requireNonNull(abstractBiome).getTreeChance());
treeDensity = getInt("tree-density", Objects.requireNonNull(abstractBiome).getTreeDensity());
eq = getString("noise-equation", Objects.requireNonNull(abstractBiome).getEquation());
} catch(NullPointerException e) {
+ slabThreshold = getDouble("slabs.threshold", 0.1D);
floraChance = getInt("flora-chance", 0);
floraAttempts = getInt("flora-attempts", 1);
treeChance = getInt("tree-chance", 0);
@@ -221,6 +229,39 @@ public class BiomeConfig extends TerraConfigObject {
oreHeights = new HashMap<>();
}
+
+ // Get slab stuff
+ if(contains("slabs") && getBoolean("slabs.enable", false)) {
+ if(extending && abstractBiome.getSlabs() != null) {
+ slabs = abstractBiome.getSlabs();
+ if(abstractBiome.shouldUseStairs()) {
+ stairs = abstractBiome.getStairs();
+ }
+ Bukkit.getLogger().info("Using super slabs");
+ } else {
+ slabs = BiomeConfigUtil.getSlabPalettes(getMapList("slabs.palettes"), this);
+ if(contains("slabs.stair-palettes") && getBoolean("slabs.use-stairs-if-available", false)) {
+ stairs = BiomeConfigUtil.getSlabPalettes(getMapList("slabs.stair-palettes"), this);
+ } else stairs = new HashMap<>();
+ }
+ for(Map.Entry> p : stairs.entrySet()) {
+ try {
+ for(Palette.PaletteLayer l : p.getValue().getLayers()) {
+ Iterator i = l.getCollection().iterator();
+ while(i.hasNext()) {
+ Stairs s = (Stairs) ((ProbabilityCollection.ProbabilitySetElement) i.next()).getObject();
+ Bukkit.getLogger().info("Stair added: " + s.getAsString());
+ }
+
+ }
+ } catch(ClassCastException e) {
+ if(ConfigUtil.debug) e.printStackTrace();
+ throw new InvalidConfigurationException("Material in stair config is not stair.");
+ }
+ }
+ Bukkit.getLogger().info("[Terra] Slabs: " + slabs.size());
+ }
+
try {
// Get UserDefinedBiome instance representing this config.
this.biome = new UserDefinedBiome(vanillaBiome, dec, new UserDefinedGenerator(eq, Collections.emptyList(), paletteMap), biomeID);
@@ -285,4 +326,16 @@ public class BiomeConfig extends TerraConfigObject {
public int getCarverChance(UserDefinedCarver c) {
return carvers.getOrDefault(CarverConfig.fromDefinedCarver(c), 0);
}
+
+ public double getSlabThreshold() {
+ return slabThreshold;
+ }
+
+ public Map> getStairs() {
+ return stairs;
+ }
+
+ public Map> getSlabs() {
+ return slabs;
+ }
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfigUtil.java b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfigUtil.java
new file mode 100644
index 000000000..e48681d46
--- /dev/null
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeConfigUtil.java
@@ -0,0 +1,48 @@
+package com.dfsek.terra.config.genconfig;
+
+import com.dfsek.terra.config.TerraConfigObject;
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.configuration.InvalidConfigurationException;
+import org.polydev.gaea.math.ProbabilityCollection;
+import org.polydev.gaea.world.palette.Palette;
+import org.polydev.gaea.world.palette.RandomPalette;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+public class BiomeConfigUtil {
+ public static Map> getSlabPalettes(List