diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 000000000..875ffa22b
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/dfsek/terra/TerraWorld.java b/src/main/java/com/dfsek/terra/TerraWorld.java
index 58790fbab..7909a7b01 100644
--- a/src/main/java/com/dfsek/terra/TerraWorld.java
+++ b/src/main/java/com/dfsek/terra/TerraWorld.java
@@ -4,7 +4,7 @@ import com.dfsek.terra.biome.BiomeZone;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedGrid;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.genconfig.BiomeGridConfig;
diff --git a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
index 35730d9d2..f61c04e9e 100644
--- a/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
+++ b/src/main/java/com/dfsek/terra/async/AsyncStructureFinder.java
@@ -1,7 +1,6 @@
package com.dfsek.terra.async;
import com.dfsek.terra.Terra;
-import com.dfsek.terra.TerraProfiler;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.genconfig.StructureConfig;
@@ -13,9 +12,7 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import org.polydev.gaea.generation.GenerationPhase;
-import org.polydev.gaea.profiler.ProfileFuture;
-import java.util.Collections;
import java.util.Random;
public class AsyncStructureFinder implements Runnable {
@@ -53,11 +50,13 @@ public class AsyncStructureFinder implements Runnable {
int run = 1;
boolean toggle = true;
boolean found = false;
+ Vector spawn = null;
main: for(int i = startRadius; i < maxRadius; i++) {
for(int j = 0; j < run; j++) {
if(toggle) x += 16;
else x -= 16;
- if(hasValidSpawn(x, z)) {
+ spawn = target.getSpawn().getNearestSpawn(x, z, seed);
+ if(isValidSpawn(spawn.getBlockX(), spawn.getBlockZ())) {
found = true;
break main;
}
@@ -65,7 +64,8 @@ public class AsyncStructureFinder implements Runnable {
for(int j = 0; j < run; j++) {
if(toggle) z += 16;
else z -= 16;
- if(hasValidSpawn(x, z)) {
+ spawn = target.getSpawn().getNearestSpawn(x, z, seed);
+ if(isValidSpawn(spawn.getBlockX(), spawn.getBlockZ())) {
found = true;
break main;
}
@@ -74,25 +74,22 @@ public class AsyncStructureFinder implements Runnable {
toggle = !toggle;
}
if(found) {
- Vector v = target.getSpawn().getNearestSpawn(x, z, seed);
- x = v.getBlockX();
- z = v.getBlockZ();
- p.sendMessage("Located structure at (" + x + ", " + z + ").");
+ p.sendMessage("Located structure at (" + spawn.getBlockX() + ", " + spawn.getBlockZ() + ").");
if(tp) {
int finalX = x;
int finalZ = z;
Bukkit.getScheduler().runTask(Terra.getInstance(), () -> p.teleport(new Location(p.getWorld(), finalX, p.getLocation().getY(), finalZ)));
}
- } else if(p.isOnline()) p.sendMessage("Unable to locate structure.");
+ } else if(p.isOnline()) p.sendMessage("Unable to locate structure. " + spawn);
}
- private boolean hasValidSpawn(int x, int z) {
- UserDefinedBiome b = (UserDefinedBiome) grid.getBiome(x, z, GenerationPhase.POPULATE);
- Location spawn = target.getSpawn().getNearestSpawn(x, z, seed).toLocation(world); // Probably(tm) async safe
+ private boolean isValidSpawn(int x, int z) {
+ Location spawn = new Location(world, x, 255, z); // Probably(tm) async safe
+ UserDefinedBiome b = (UserDefinedBiome) grid.getBiome(spawn, GenerationPhase.POPULATE);
Random r2 = new Random(spawn.hashCode());
GaeaStructure struc = target.getStructure(r2);
main: for(int y = target.getSearchStart().get(r2); y > 0; y--) {
- if(y > target.getBound().getMax() || y < target.getBound().getMin()) return false;
spawn.setY(y);
+ if(y > target.getBound().getMax() || y < target.getBound().getMin()) return false;
for(StructureSpawnRequirement s : struc.getSpawns()) {
if(! s.isValidSpawn(spawn)) continue main; // Probably(tm) async safe
if(!b.equals(grid.getBiome(spawn.clone().add(s.getX(), s.getY(), s.getZ()), GenerationPhase.POPULATE))) return false;
diff --git a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
index 5bc320a73..ca1b91e54 100644
--- a/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
+++ b/src/main/java/com/dfsek/terra/biome/TerraBiomeGrid.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.biome;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import org.bukkit.Bukkit;
import org.bukkit.Location;
diff --git a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java
index 2713d4ccb..e77f6d4f8 100644
--- a/src/main/java/com/dfsek/terra/carving/SimplexCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/SimplexCarver.java
@@ -57,9 +57,17 @@ public class SimplexCarver extends Carver {
double mainNoise = noise.getNoise(x, z)*2;
double columnNoise = Math.pow(Math.max(column.getNoise(x, z), 0)*2, 3);
double hc = (acot(16*(hasCaves.getNoise(x, z)-0.2))/Math.PI)-0.1;
+ CarvingData.CarvingType type = CarvingData.CarvingType.BOTTOM;
+ double simplex = (Math.pow(mainNoise + root2inverse, 3)/2 + columnNoise) * hc;
for(int y = 0; y < 64; y++) {
- double finalNoise = (-0.05*Math.abs(y-(heightNoise*16 + 24))+1 - (Math.pow(mainNoise + root2inverse, 3)/2 + columnNoise)) * hc;
- if(finalNoise > 0.5) c.carve(x-ox, y, z-oz, CarvingData.CarvingType.CENTER);
+ double finalNoise = (-0.05*Math.abs(y-(heightNoise*16 + 24))+1 - simplex) * hc;
+ if(finalNoise > 0.5) {
+ c.carve(x-ox, y, z-oz, type);
+ double finalNoiseUp = (-0.05*Math.abs((y+1)-(heightNoise*16 + 24))+1 - simplex) * hc;
+ if(finalNoiseUp > 0.5) {
+ type = CarvingData.CarvingType.CENTER;
+ } else type = CarvingData.CarvingType.TOP;
+ }
}
}
}
diff --git a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
index 724a42911..e7c16591b 100644
--- a/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
@@ -1,7 +1,7 @@
package com.dfsek.terra.carving;
import com.dfsek.terra.TerraWorld;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import org.polydev.gaea.math.Range;
import com.dfsek.terra.biome.UserDefinedBiome;
import org.bukkit.World;
diff --git a/src/main/java/com/dfsek/terra/config/ConfigLoader.java b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
index 43a1f27ae..5f82c51cb 100644
--- a/src/main/java/com/dfsek/terra/config/ConfigLoader.java
+++ b/src/main/java/com/dfsek/terra/config/ConfigLoader.java
@@ -1,5 +1,6 @@
package com.dfsek.terra.config;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
diff --git a/src/main/java/com/dfsek/terra/config/TerraConfig.java b/src/main/java/com/dfsek/terra/config/TerraConfig.java
index 95ed50097..8c40c3545 100644
--- a/src/main/java/com/dfsek/terra/config/TerraConfig.java
+++ b/src/main/java/com/dfsek/terra/config/TerraConfig.java
@@ -1,5 +1,6 @@
package com.dfsek.terra.config;
+import com.dfsek.terra.config.base.ConfigPack;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
diff --git a/src/main/java/com/dfsek/terra/config/ConfigPack.java b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java
similarity index 96%
rename from src/main/java/com/dfsek/terra/config/ConfigPack.java
rename to src/main/java/com/dfsek/terra/config/base/ConfigPack.java
index 1ac30cf99..3b6aca0ab 100644
--- a/src/main/java/com/dfsek/terra/config/ConfigPack.java
+++ b/src/main/java/com/dfsek/terra/config/base/ConfigPack.java
@@ -1,7 +1,8 @@
-package com.dfsek.terra.config;
+package com.dfsek.terra.config.base;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
+import com.dfsek.terra.config.ConfigLoader;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.genconfig.biome.AbstractBiomeConfig;
import com.dfsek.terra.config.genconfig.biome.BiomeConfig;
@@ -26,6 +27,9 @@ import java.util.Map;
import java.util.logging.Logger;
import java.util.stream.Collectors;
+/**
+ * Represents a Terra configuration pack.
+ */
public class ConfigPack extends YamlConfiguration {
private static final Map configs = new HashMap<>();
private final Map ores;
@@ -104,7 +108,7 @@ public class ConfigPack extends YamlConfiguration {
return carvers;
}
- public static void loadAll(JavaPlugin main) {
+ public static synchronized void loadAll(JavaPlugin main) {
configs.clear();
List subfolder;
try {
@@ -135,7 +139,7 @@ public class ConfigPack extends YamlConfiguration {
return id;
}
- public static ConfigPack fromID(String id) {
+ public static synchronized ConfigPack fromID(String id) {
return configs.get(id);
}
diff --git a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
index 2017d30d6..9527b9463 100644
--- a/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
+++ b/src/main/java/com/dfsek/terra/config/base/ConfigUtil.java
@@ -1,7 +1,6 @@
package com.dfsek.terra.config.base;
import com.dfsek.terra.TerraWorld;
-import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit;
import org.bukkit.Material;
diff --git a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
index 8f661cf4d..05e97e5bb 100644
--- a/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
+++ b/src/main/java/com/dfsek/terra/config/base/WorldConfig.java
@@ -1,6 +1,5 @@
package com.dfsek.terra.config.base;
-import com.dfsek.terra.config.ConfigPack;
import com.dfsek.terra.image.ImageLoader;
import org.bukkit.Bukkit;
import org.bukkit.World;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
index 76c170224..542ac34cb 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/BiomeGridConfig.java
@@ -2,7 +2,7 @@ package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedGrid;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.WorldConfig;
import com.dfsek.terra.config.exception.ConfigException;
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 09968ef70..d3e9d94d5 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/CarverConfig.java
@@ -2,7 +2,7 @@ package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
import com.dfsek.terra.carving.UserDefinedCarver;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
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 789e73aa3..de60f7ada 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/FloraConfig.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.genconfig;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
index d71762f4b..7e4c1140e 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/OreConfig.java
@@ -1,6 +1,6 @@
package com.dfsek.terra.config.genconfig;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.ConfigException;
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 3f5548e72..89be07a8f 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/PaletteConfig.java
@@ -1,7 +1,7 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.ConfigException;
import org.bukkit.Bukkit;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
index 33e686dac..aaa792f98 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/StructureConfig.java
@@ -1,7 +1,7 @@
package com.dfsek.terra.config.genconfig;
import com.dfsek.terra.Debug;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.base.ConfigUtil;
import com.dfsek.terra.config.exception.ConfigException;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
index 86710f581..c8cc87f4b 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/AbstractBiomeConfig.java
@@ -1,19 +1,14 @@
package com.dfsek.terra.config.genconfig.biome;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.ConfigException;
-import com.dfsek.terra.config.genconfig.biome.BiomeConfigUtil;
-import org.bukkit.Material;
-import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException;
-import org.polydev.gaea.world.palette.Palette;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
public class AbstractBiomeConfig extends TerraConfig {
private final String biomeID;
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java
index 6cd185b80..223b8cbec 100644
--- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfig.java
@@ -3,7 +3,7 @@ package com.dfsek.terra.config.genconfig.biome;
import com.dfsek.terra.Debug;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.carving.UserDefinedCarver;
-import com.dfsek.terra.config.ConfigPack;
+import com.dfsek.terra.config.base.ConfigPack;
import com.dfsek.terra.config.TerraConfig;
import com.dfsek.terra.config.exception.ConfigException;
import com.dfsek.terra.config.exception.NotFoundException;
@@ -19,6 +19,7 @@ import org.polydev.gaea.math.FastNoise;
import org.polydev.gaea.math.ProbabilityCollection;
import org.polydev.gaea.math.Range;
import org.polydev.gaea.math.parsii.tokenizer.ParseException;
+import org.polydev.gaea.tree.Tree;
import org.polydev.gaea.world.Flora;
import org.polydev.gaea.world.palette.Palette;
import org.polydev.gaea.world.palette.RandomPalette;
@@ -39,6 +40,7 @@ public class BiomeConfig extends TerraConfig {
private final BiomeOreConfig ore;
private final BiomeCarverConfig carver;
private final BiomeFloraConfig flora;
+ private final BiomeTreeConfig tree;
private String eq;
private int floraAttempts;
private final BiomeSlabConfig slab;
@@ -128,7 +130,6 @@ public class BiomeConfig extends TerraConfig {
} else flora = new BiomeFloraConfig(this);
// Check if trees should be handled by super biome.
- BiomeTreeConfig tree;
if(extending && abstractBiome.getTrees() != null && ! contains("trees")) {
tree = abstractBiome.getTrees();
Debug.info("Using super trees");
@@ -273,4 +274,8 @@ public class BiomeConfig extends TerraConfig {
public List getStructures() {
return structures;
}
+
+ public Range getTreeRange(Tree t) {
+ return tree.getTreeHeights().getOrDefault(t, new Range(-1, -1));
+ }
}
diff --git a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfigUtil.java b/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfigUtil.java
deleted file mode 100644
index b1c6ded6c..000000000
--- a/src/main/java/com/dfsek/terra/config/genconfig/biome/BiomeConfigUtil.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.dfsek.terra.config.genconfig.biome;
-
-import com.dfsek.terra.Debug;
-import com.dfsek.terra.config.exception.ConfigException;
-import com.dfsek.terra.config.TerraConfig;
-import com.dfsek.terra.config.exception.NotFoundException;
-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 {
- protected static Map> getSlabPalettes(List