diff --git a/pom.xml b/pom.xml
index de290ce9c..76cbb246d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,7 +83,7 @@
org.polydev
gaea
- 1.6.4
+ 1.6.7
diff --git a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java
index 9636ad0fd..178778d75 100644
--- a/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java
+++ b/src/main/java/com/dfsek/terra/biome/UserDefinedBiome.java
@@ -1,31 +1,11 @@
package com.dfsek.terra.biome;
-import com.dfsek.terra.UserDefinedCarver;
-import com.dfsek.terra.config.BiomeConfig;
-import com.dfsek.terra.config.CarverConfig;
-import com.dfsek.terra.config.ConfigUtil;
-import org.bukkit.Bukkit;
-import org.bukkit.block.data.BlockData;
-import org.bukkit.configuration.InvalidConfigurationException;
-import org.bukkit.configuration.file.FileConfiguration;
import org.polydev.gaea.biome.Biome;
import org.polydev.gaea.biome.BiomeTerrain;
import org.polydev.gaea.biome.Decorator;
-import org.polydev.gaea.math.ProbabilityCollection;
-import org.polydev.gaea.math.parsii.eval.Parser;
-import org.polydev.gaea.math.parsii.eval.Scope;
-import org.polydev.gaea.math.parsii.tokenizer.ParseException;
import org.polydev.gaea.structures.features.Feature;
-import org.polydev.gaea.tree.Tree;
-import org.polydev.gaea.world.BlockPalette;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.TreeMap;
public class UserDefinedBiome implements Biome {
private final UserDefinedGenerator gen;
diff --git a/src/main/java/com/dfsek/terra/UserDefinedCarver.java b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
similarity index 50%
rename from src/main/java/com/dfsek/terra/UserDefinedCarver.java
rename to src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
index 95f8c0ade..b7535f907 100644
--- a/src/main/java/com/dfsek/terra/UserDefinedCarver.java
+++ b/src/main/java/com/dfsek/terra/carving/UserDefinedCarver.java
@@ -1,58 +1,66 @@
-package com.dfsek.terra;
+package com.dfsek.terra.carving;
+import com.dfsek.terra.MaxMin;
import com.dfsek.terra.biome.TerraBiomeGrid;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.config.BiomeConfig;
import com.dfsek.terra.config.CarverConfig;
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 final CarverConfig config;
- public UserDefinedCarver(CarverConfig config) {
- super(config.getHeight().getMin(), config.getHeight().getMax());
- this.config = config;
+ 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) {
+ super(height.getMin(), height.getMax());
+ this.radius = radius;
+ this.length = length;
+ this.start = start;
+ this.mutate = mutate;
+ this.radiusMultiplier = radiusMultiplier;
}
@Override
public Worm getWorm(long l, Vector vector) {
Random r = new Random(l);
- return new UserDefinedWorm(config.getLength().get(r), r, vector, 6);
- }
-
- public CarverConfig getConfig() {
- return config;
+ return new UserDefinedWorm(length.get(r), r, vector, radius.getMax());
}
@Override
public boolean isChunkCarved(World w, int chunkX, int chunkZ, Random random) {
UserDefinedBiome b = (UserDefinedBiome) TerraBiomeGrid.fromWorld(w).getBiome(chunkX << 4, chunkZ << 4);
- return random.nextInt(100) < BiomeConfig.fromBiome(b).getCarverChance(config);
+ return random.nextInt(100) < BiomeConfig.fromBiome(b).getCarverChance(this);
}
- private static class UserDefinedWorm extends Worm {
+ private class UserDefinedWorm extends Worm {
private final Vector direction;
private final int maxRad;
private double runningRadius;
public UserDefinedWorm(int length, Random r, Vector origin, int maxRad) {
super(length, r, origin);
- runningRadius = (r.nextDouble()/2+0.5)*4;
+ runningRadius = radius.get(r);
this.maxRad = maxRad;
- direction = new Vector(r.nextDouble()-0.5D, (r.nextDouble()-0.5D)/4, r.nextDouble()-0.5D).normalize();
+ direction = new Vector((r.nextDouble()-0.5D)*start[0], (r.nextDouble()-0.5D)*start[1], (r.nextDouble()-0.5D)*start[2]).normalize();
}
@Override
public void step() {
- setRadius(new int[] {(int) runningRadius, (int) runningRadius, (int) runningRadius});
- runningRadius += (getRandom().nextDouble()-0.5)/8;
+ setRadius(new int[] {(int) (runningRadius*radiusMultiplier[0]), (int) (runningRadius*radiusMultiplier[1]), (int) (runningRadius*radiusMultiplier[2])});
+ runningRadius += (getRandom().nextDouble()-0.5)*mutate[3];
runningRadius = Math.min(runningRadius, maxRad);
- direction.rotateAroundX(Math.toRadians(getRandom().nextDouble()*2));
- direction.rotateAroundY(Math.toRadians(getRandom().nextDouble()*6));
- direction.rotateAroundZ(Math.toRadians(getRandom().nextDouble()*2));
+ direction.rotateAroundX(Math.toRadians(getRandom().nextDouble()*mutate[0]));
+ direction.rotateAroundY(Math.toRadians(getRandom().nextDouble()*mutate[1]));
+ direction.rotateAroundZ(Math.toRadians(getRandom().nextDouble()*mutate[2]));
getRunning().add(direction);
}
}
diff --git a/src/main/java/com/dfsek/terra/config/BiomeConfig.java b/src/main/java/com/dfsek/terra/config/BiomeConfig.java
index 94a01fb62..f8cd4afa5 100644
--- a/src/main/java/com/dfsek/terra/config/BiomeConfig.java
+++ b/src/main/java/com/dfsek/terra/config/BiomeConfig.java
@@ -5,6 +5,7 @@ import com.dfsek.terra.TerraTree;
import com.dfsek.terra.biome.UserDefinedBiome;
import com.dfsek.terra.biome.UserDefinedDecorator;
import com.dfsek.terra.biome.UserDefinedGenerator;
+import com.dfsek.terra.carving.UserDefinedCarver;
import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.ConfigurationSection;
@@ -227,7 +228,7 @@ public class BiomeConfig extends YamlConfiguration {
main.getLogger().info("Loaded " + biomes.size() + " biomes.");
}
- public int getCarverChance(CarverConfig c) {
- return carvers.getOrDefault(c, 0);
+ public int getCarverChance(UserDefinedCarver c) {
+ return carvers.getOrDefault(CarverConfig.fromDefinedCarver(c), 0);
}
}
diff --git a/src/main/java/com/dfsek/terra/config/CarverConfig.java b/src/main/java/com/dfsek/terra/config/CarverConfig.java
index 16460ad5a..1bf21c7e7 100644
--- a/src/main/java/com/dfsek/terra/config/CarverConfig.java
+++ b/src/main/java/com/dfsek/terra/config/CarverConfig.java
@@ -1,7 +1,7 @@
package com.dfsek.terra.config;
import com.dfsek.terra.MaxMin;
-import com.dfsek.terra.UserDefinedCarver;
+import com.dfsek.terra.carving.UserDefinedCarver;
import org.bukkit.Bukkit;
import org.bukkit.block.data.BlockData;
import org.bukkit.configuration.InvalidConfigurationException;
@@ -27,13 +27,7 @@ import java.util.stream.Stream;
public class CarverConfig extends YamlConfiguration {
private static final Map caveConfig = new HashMap<>();
private UserDefinedCarver carver;
- private BlockPalette inner;
- private BlockPalette walls;
- private double[] start;
- private double[] mutate;
- private double radMutate;
private MaxMin length;
- private MaxMin radius;
private MaxMin height;
private String id;
public CarverConfig(File file) throws IOException, InvalidConfigurationException {
@@ -61,12 +55,14 @@ public class CarverConfig extends YamlConfiguration {
@Override
public void load(@NotNull File file) throws IOException, InvalidConfigurationException {
super.load(file);
+ BlockPalette inner;
if(Objects.requireNonNull(getString("palette.interior")).startsWith("BLOCK:")) {
inner = new BlockPalette().addBlockData(new ProbabilityCollection().add(Bukkit.createBlockData(getString("palette.interior").substring(6)), 1), 1);
} else {
inner = PaletteConfig.fromID(getString("palette.interior")).getPalette();
}
+ BlockPalette walls;
if(Objects.requireNonNull(getString("palette.walls")).startsWith("BLOCK:")) {
walls = new BlockPalette().addBlockData(new ProbabilityCollection().add(Bukkit.createBlockData(getString("palette.walls").substring(6)), 1), 1);
} else {
@@ -74,14 +70,15 @@ public class CarverConfig extends YamlConfiguration {
}
- start = new double[] {getDouble("start.x"), getDouble("start.y"), getDouble("start.y")};
- mutate = new double[] {getDouble("mutate.x"), getDouble("mutate.y"), getDouble("mutate.z")};
+ double[] start = new double[] {getDouble("start.x"), getDouble("start.y"), getDouble("start.z")};
+ double[] mutate = new double[] {getDouble("mutate.x"), getDouble("mutate.y"), getDouble("mutate.z"), getDouble("mutate.radius")};
+ double[] radiusMultiplier = new double[] {getDouble("start.radius.multiply.x"), getDouble("start.radius.multiply.y"), getDouble("start.radius.multiply.z")};
length = new MaxMin(getInt("length.min"), getInt("length.max"));
- radius = new MaxMin(getInt("start.radius.min"), getInt("start.radius.max"));
+ MaxMin radius = new MaxMin(getInt("start.radius.min"), getInt("start.radius.max"));
height = new MaxMin(getInt("start.height.min"), getInt("start.height.max"));
- radMutate = getDouble("mutate.radius");
+ double radMutate = getDouble("mutate.radius");
id = getString("id");
- carver = new UserDefinedCarver(this);
+ carver = new UserDefinedCarver(height, radius, length, start, mutate, radiusMultiplier);
}
protected static void loadCaves(JavaPlugin main) {
@@ -118,4 +115,11 @@ public class CarverConfig extends YamlConfiguration {
public static CarverConfig fromID(String id) {
return caveConfig.get(id);
}
+
+ public static CarverConfig fromDefinedCarver(UserDefinedCarver c) {
+ for(CarverConfig co : caveConfig.values()) {
+ if(co.getCarver().equals(c)) return co;
+ }
+ throw new IllegalArgumentException("Unable to find carver!");
+ }
}