diff --git a/pom.xml b/pom.xml
index e94bef677..1b3282972 100644
--- a/pom.xml
+++ b/pom.xml
@@ -161,17 +161,12 @@
1.16.1-R0.1-SNAPSHOT
provided
-
-
-
org.bukkit.craftbukkit
cb-1.16.2
1.16.2
provided
-
-
org.bstats
diff --git a/src/main/java/com/volmit/iris/gen/bindings/BukkitTerrainProvider.java b/src/main/java/com/volmit/iris/gen/bindings/BukkitTerrainProvider.java
new file mode 100644
index 000000000..e2b9fae20
--- /dev/null
+++ b/src/main/java/com/volmit/iris/gen/bindings/BukkitTerrainProvider.java
@@ -0,0 +1,61 @@
+package com.volmit.iris.gen.bindings;
+
+import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.generator.BlockPopulator;
+import org.bukkit.generator.ChunkGenerator;
+
+public abstract class BukkitTerrainProvider extends ChunkGenerator implements TerrainProvider
+{
+ private final TerrainTarget target;
+
+ public BukkitTerrainProvider(TerrainTarget target)
+ {
+ this.target = target;
+ }
+
+ @Override
+ public abstract void generate(Random random, int x, int z, BiomeGrid biome, ChunkData data);
+
+ @Override
+ public ChunkData generateChunkData(World world, Random random, int x, int z, BiomeGrid biome)
+ {
+ ChunkData data = Bukkit.getServer().createChunkData(world);
+ generate(random, x, z, biome, data);
+ return data;
+ }
+
+ @Override
+ public abstract boolean canSpawn(World world, int x, int z);
+
+ @Override
+ public abstract List getDefaultPopulators(World world);
+
+ @Override
+ public abstract Location getFixedSpawnLocation(World world, Random random);
+
+ @Override
+ public abstract boolean isParallelCapable();
+
+ @Override
+ public abstract boolean shouldGenerateCaves();
+
+ @Override
+ public abstract boolean shouldGenerateDecorations();
+
+ @Override
+ public abstract boolean shouldGenerateMobs();
+
+ @Override
+ public abstract boolean shouldGenerateStructures();
+
+ @Override
+ public TerrainTarget getTarget()
+ {
+ return target;
+ }
+}
diff --git a/src/main/java/com/volmit/iris/gen/bindings/TerrainProvider.java b/src/main/java/com/volmit/iris/gen/bindings/TerrainProvider.java
new file mode 100644
index 000000000..fa38302ee
--- /dev/null
+++ b/src/main/java/com/volmit/iris/gen/bindings/TerrainProvider.java
@@ -0,0 +1,33 @@
+package com.volmit.iris.gen.bindings;
+
+import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.generator.BlockPopulator;
+import org.bukkit.generator.ChunkGenerator.BiomeGrid;
+import org.bukkit.generator.ChunkGenerator.ChunkData;
+
+public interface TerrainProvider
+{
+ public TerrainTarget getTarget();
+
+ public void generate(Random random, int x, int z, BiomeGrid biome, ChunkData data);
+
+ public boolean canSpawn(World world, int x, int z);
+
+ public List getDefaultPopulators(World world);
+
+ public Location getFixedSpawnLocation(World world, Random random);
+
+ public boolean isParallelCapable();
+
+ public boolean shouldGenerateCaves();
+
+ public boolean shouldGenerateDecorations();
+
+ public boolean shouldGenerateMobs();
+
+ public boolean shouldGenerateStructures();
+}
diff --git a/src/main/java/com/volmit/iris/gen/bindings/TerrainTarget.java b/src/main/java/com/volmit/iris/gen/bindings/TerrainTarget.java
new file mode 100644
index 000000000..88cb7871e
--- /dev/null
+++ b/src/main/java/com/volmit/iris/gen/bindings/TerrainTarget.java
@@ -0,0 +1,31 @@
+package com.volmit.iris.gen.bindings;
+
+import java.io.File;
+
+import org.bukkit.World;
+import org.bukkit.World.Environment;
+
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class TerrainTarget
+{
+ private long seed;
+ private Environment environment;
+ private String name;
+ private File folder;
+
+ public static TerrainTarget from(World world)
+ {
+ //@builder
+ return new TerrainTargetBuilder()
+ .environment(world.getEnvironment())
+ .seed(world.getSeed())
+ .folder(world.getWorldFolder())
+ .name(world.getName())
+ .build();
+ //@done
+ }
+}