diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java
index f8710e3..5edec6e 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/deathcube/Deathcube.java
@@ -5,7 +5,7 @@ import eu.mhsl.minenet.minigames.score.FirstWinsScore;
 import eu.mhsl.minenet.minigames.util.BatchUtil;
 import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
-import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
 import io.github.bloepiloepi.pvp.config.AttackConfig;
 import io.github.bloepiloepi.pvp.config.DamageConfig;
 import io.github.bloepiloepi.pvp.config.PvPConfig;
@@ -27,7 +27,7 @@ class Deathcube extends StatelessGame {
         this.radius = radius;
         this.height = height + 49;
         this.percentage = percentage;
-        this.setGenerator(new CircularTerrainGenerator(radius+10, true));
+        this.setGenerator(new CircularPlateTerrainGenerator(radius+10).setPlateHeight(50));
 
         if(pvpEnabled == 1) eventNode().addChild(
                 PvPConfig.emptyBuilder()
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java
index 4e60542..4f35b5f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/minerun/Minerun.java
@@ -8,7 +8,7 @@ import eu.mhsl.minenet.minigames.util.CommonProperties;
 import eu.mhsl.minenet.minigames.util.Intersect;
 import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
-import eu.mhsl.minenet.minigames.world.generator.terrain.SquareTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.SquarePlateTerrainGenerator;
 import net.kyori.adventure.sound.Sound;
 import net.kyori.adventure.text.Component;
 import net.kyori.adventure.text.format.NamedTextColor;
@@ -36,7 +36,7 @@ class Minerun extends StatelessGame {
 
     public Minerun(int width, int length, int minePercentage) {
         super(Dimension.THE_END.DIMENSION, "Minerun", new FirstWinsScore());
-        setGenerator(new SquareTerrainGenerator(width, length + preRun + afterFinishLine).withPlate(50));
+        setGenerator(new SquarePlateTerrainGenerator(width, length + preRun + afterFinishLine).setPlateHeight(50));
 
         this.width = width;
         this.length = length;
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java
index 456388c..58a71c8 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/spleef/Spleef.java
@@ -6,7 +6,7 @@ import eu.mhsl.minenet.minigames.message.component.TranslatedComponent;
 import eu.mhsl.minenet.minigames.score.LastWinsScore;
 import eu.mhsl.minenet.minigames.util.BatchUtil;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
-import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.entity.GameMode;
 import net.minestom.server.event.player.PlayerMoveEvent;
@@ -32,7 +32,7 @@ public class Spleef extends StatelessGame {
         this.radius = radius;
         this.stackCount = stackCount;
 
-        setGenerator(new CircularTerrainGenerator(50, false));
+        setGenerator(new CircularPlateTerrainGenerator(50));
 
         eventNode().addListener(PlayerStartDiggingEvent.class, this::destroyBlock);
     }
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
index 39d9221..363ae80 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/stickfight/Stickfight.java
@@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
 import eu.mhsl.minenet.minigames.score.LastWinsScore;
 import eu.mhsl.minenet.minigames.util.BatchUtil;
-import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
 import io.github.bloepiloepi.pvp.config.*;
 import io.github.bloepiloepi.pvp.events.FinalAttackEvent;
 import net.minestom.server.coordinate.Pos;
@@ -32,7 +32,7 @@ public class Stickfight extends StatelessGame {
             ((Player) finalAttackEvent.getTarget()).setHealth(20);
         });
 
-        setGenerator(new CircularTerrainGenerator(20, false));
+        setGenerator(new CircularPlateTerrainGenerator(20));
     }
 
     @Override
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java
index c4f6a02..d1d4425 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/tntrun/TntRun.java
@@ -4,7 +4,7 @@ import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.instance.game.stateless.StatelessGame;
 import eu.mhsl.minenet.minigames.score.LastWinsScore;
 import eu.mhsl.minenet.minigames.util.BatchUtil;
-import eu.mhsl.minenet.minigames.world.generator.terrain.CircularTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.CircularPlateTerrainGenerator;
 import net.minestom.server.MinecraftServer;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.entity.Entity;
@@ -30,7 +30,7 @@ public class TntRun extends StatelessGame {
         super(Dimension.OVERWORLD.DIMENSION, "tntRun", new LastWinsScore());
         this.radius = radius;
         this.stackCount = stackCount;
-        setGenerator(new CircularTerrainGenerator(radius, false));
+        setGenerator(new CircularPlateTerrainGenerator(radius));
     }
 
     @Override
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
index 872aa73..667bc0f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/trafficlightrace/TrafficLightRace.java
@@ -7,7 +7,7 @@ import eu.mhsl.minenet.minigames.util.BatchUtil;
 import eu.mhsl.minenet.minigames.instance.Dimension;
 import eu.mhsl.minenet.minigames.util.CommonProperties;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
-import eu.mhsl.minenet.minigames.world.generator.terrain.SquareTerrainGenerator;
+import eu.mhsl.minenet.minigames.world.generator.terrain.SquarePlateTerrainGenerator;
 import net.kyori.adventure.sound.Sound;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.coordinate.Vec;
@@ -42,9 +42,9 @@ class TrafficLightRace extends StatelessGame {
         this.length = length;
 
         setGenerator(
-                new SquareTerrainGenerator(width, length + preRun + afterRun)
-                        .withPlate(50)
-                        .withBorders()
+                new SquarePlateTerrainGenerator(width, length + preRun + afterRun)
+                        .setPlateHeight(50)
+                        .setGenerateBorders(true)
         );
     }
 
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java
new file mode 100644
index 0000000..a0db1a5
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/PlateTerrainGenerator.java
@@ -0,0 +1,28 @@
+package eu.mhsl.minenet.minigames.world.generator;
+
+import net.minestom.server.instance.generator.Generator;
+
+public abstract class PlateTerrainGenerator implements Generator {
+    protected int plateHeight = 0;
+    protected BlockPallet platePallet = BlockPallet.GROUND;
+    protected boolean generateBorders = false;
+
+    public PlateTerrainGenerator setPlateHeight(int plateHeight) {
+        this.plateHeight = plateHeight;
+        return this;
+    }
+
+    public PlateTerrainGenerator setPlatePallet(BlockPallet platePallet) {
+        this.platePallet = platePallet;
+        return this;
+    }
+
+    public PlateTerrainGenerator setGenerateBorders(boolean generateBorders) {
+        this.generateBorders = generateBorders;
+        return this;
+    }
+
+    public boolean generatePlate() {
+        return plateHeight > 0;
+    }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java
index 199a839..b7298c0 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/Structure.java
@@ -7,6 +7,6 @@ import java.util.Random;
 public abstract class Structure {
     protected final Random rnd = new Random();
 
-    public abstract void generateGame(Block.Setter setter);
+    public abstract void generateStructure(Block.Setter setter);
 
 }
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java
index 0caeac9..c453f60 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/PeakRock.java
@@ -7,12 +7,14 @@ import net.minestom.server.instance.block.Block;
 
 public class PeakRock extends Structure {
     private final Point position;
-    public PeakRock(Point position) {
+    private final BlockPallet blockPallet;
+    public PeakRock(Point position, BlockPallet blockPallet) {
         this.position = position;
+        this.blockPallet = blockPallet;
     }
 
     @Override
-    public void generateGame(Block.Setter setter) {
+    public void generateStructure(Block.Setter setter) {
         for (int stoneX = -4; stoneX < 4; stoneX++) {
             for (int stoneZ = -4; stoneZ < 4; stoneZ++) {
 
@@ -21,7 +23,7 @@ public class PeakRock extends Structure {
 
                 for (int stoneY = 0; stoneY < 10-(int) distanceToCenter * rnd.nextDouble(2, 5); stoneY++) {
                     Point blockPos = position.add(stoneX, stoneY, stoneZ);
-                    setter.setBlock(blockPos, BlockPallet.STONE.rnd());
+                    setter.setBlock(blockPos, this.blockPallet.rnd());
                 }
             }
         }
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java
new file mode 100644
index 0000000..c8e5ff5
--- /dev/null
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/structures/generatable/Tree.java
@@ -0,0 +1,18 @@
+package eu.mhsl.minenet.minigames.world.generator.structures.generatable;
+
+import eu.mhsl.minenet.minigames.world.generator.structures.Structure;
+import net.minestom.server.coordinate.Point;
+import net.minestom.server.instance.block.Block;
+
+public class Tree extends Structure {
+    private final Point position;
+
+    public Tree(Point position) {
+        this.position = position;
+    }
+
+    @Override
+    public void generateStructure(Block.Setter setter) {
+
+    }
+}
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java
similarity index 87%
rename from src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java
rename to src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java
index 56da4c8..f0b44bf 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularTerrainGenerator.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/CircularPlateTerrainGenerator.java
@@ -3,26 +3,24 @@ package eu.mhsl.minenet.minigames.world.generator.terrain;
 import de.articdive.jnoise.JNoise;
 import eu.mhsl.minenet.minigames.util.RangeMap;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
+import eu.mhsl.minenet.minigames.world.generator.PlateTerrainGenerator;
 import eu.mhsl.minenet.minigames.world.generator.structures.generatable.PeakRock;
 import net.minestom.server.coordinate.Point;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.instance.block.Block;
 import net.minestom.server.instance.generator.GenerationUnit;
-import net.minestom.server.instance.generator.Generator;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Random;
 
-public class CircularTerrainGenerator implements Generator {
+public class CircularPlateTerrainGenerator extends PlateTerrainGenerator {
     protected final Random rnd = new Random();
     private final int size;
 
-    private final boolean generatePlate;
-
-    public CircularTerrainGenerator(int size, boolean generatePlate) {
+    public CircularPlateTerrainGenerator(int size) {
         this.size = size;
-        this.generatePlate = generatePlate;
     }
+
     private final JNoise base = JNoise.newBuilder()
             .fastSimplex()
             .setSeed(rnd.nextLong())
@@ -54,8 +52,8 @@ public class CircularTerrainGenerator implements Generator {
 
                 double distance = bottom.distance(new Pos(0, 0, 0));
 
-                if(distance <= this.size && generatePlate) {
-                    unit.modifier().fill(bottom, bottom.add(1, 50, 1), BlockPallet.GROUND.rnd());
+                if(distance <= this.size && generatePlate()) {
+                    unit.modifier().fill(bottom, bottom.add(1, 50, 1), platePallet.rnd());
                     continue;
                 }
 
@@ -63,7 +61,7 @@ public class CircularTerrainGenerator implements Generator {
 
                 synchronized (base) {
                     double baseNoise = base.getNoise(bottom.x(), bottom.z());
-                    double currentHeight = minTwo(RangeMap.map(distance, 0, 400, -(this.size / 5), 200)) + baseNoise * 8;
+                    double currentHeight = minTwo(RangeMap.map(distance, 0, 400, -((double) this.size / 5), 200)) + baseNoise * 8;
 
                     synchronized (batches) {
                         double elementNoise = batches.getNoise(bottom.x(), bottom.z());
@@ -82,7 +80,7 @@ public class CircularTerrainGenerator implements Generator {
                         if(peakNoise > 0.97 && bottom.distance(new Pos(0, 0, 0)) > (this.size + 20)) {
 
                             Point center = bottom.add(1, currentHeight-3, 1);
-                            unit.fork(setter -> new PeakRock(center).generateGame(setter));
+                            unit.fork(setter -> new PeakRock(center, BlockPallet.STONE).generateStructure(setter));
                         }
                     }
 
diff --git a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java
similarity index 88%
rename from src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java
rename to src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java
index c7dadb5..ed6414f 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquareTerrainGenerator.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/world/generator/terrain/SquarePlateTerrainGenerator.java
@@ -3,42 +3,30 @@ package eu.mhsl.minenet.minigames.world.generator.terrain;
 import de.articdive.jnoise.JNoise;
 import eu.mhsl.minenet.minigames.util.RangeMap;
 import eu.mhsl.minenet.minigames.world.generator.BlockPallet;
+import eu.mhsl.minenet.minigames.world.generator.PlateTerrainGenerator;
 import eu.mhsl.minenet.minigames.world.generator.structures.generatable.PeakRock;
 import net.minestom.server.coordinate.Point;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.instance.block.Block;
 import net.minestom.server.instance.generator.GenerationUnit;
-import net.minestom.server.instance.generator.Generator;
 import net.minestom.server.world.DimensionType;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Arrays;
 import java.util.Random;
 
-public class SquareTerrainGenerator implements Generator {
+public class SquarePlateTerrainGenerator extends PlateTerrainGenerator {
     protected final Random rnd = new Random();
 
     private final int width;
     private final int length;
-    private int plateHeight = 0;
-    private boolean withBorder = false;
 
 
-    public SquareTerrainGenerator(int width, int length) {
+    public SquarePlateTerrainGenerator(int width, int length) {
         this.width = width;
         this.length = length;
     }
 
-    public SquareTerrainGenerator withPlate(int plateHeight) {
-        this.plateHeight = plateHeight;
-        return this;
-    }
-
-    public SquareTerrainGenerator withBorders() {
-        this.withBorder = true;
-        return this;
-    }
-
     private final JNoise base = JNoise.newBuilder()
             .fastSimplex()
             .setSeed(rnd.nextLong())
@@ -71,14 +59,14 @@ public class SquareTerrainGenerator implements Generator {
             for (int z = 0; z < unit.size().z(); z++) {
                 Point bottom = start.add(x, 0, z);
 
-                if(plateHeight > 0) {
+                if(generatePlate()) {
                     if(bottom.x() <= width && bottom.x() >= 0 && bottom.z() <= length && bottom.z() >= 0) {
-                        unit.modifier().fill(bottom, bottom.add(1, plateHeight, 1), BlockPallet.GROUND.rnd());
+                        unit.modifier().fill(bottom, bottom.add(1, plateHeight, 1), platePallet.rnd());
                         continue;
                     }
                 }
 
-                if(withBorder) {
+                if(generateBorders) {
                     Runnable generateBorder = () -> unit.modifier().fill(bottom, bottom.add(1, DimensionType.OVERWORLD.getMaxY(), 1), Block.BARRIER);
 
                     if(bottom.z() <= length+1 && bottom.z() >= -1 && bottom.x() >= -1 && bottom.x() <= width+1) {
@@ -121,7 +109,7 @@ public class SquareTerrainGenerator implements Generator {
                         if(peakNoise > 0.97 && bottom.distance(new Pos(0, 0, 0)) > (this.width + 20)) {
 
                             Point center = bottom.add(1, currentHeight-3, 1);
-                            unit.fork(setter -> new PeakRock(center).generateGame(setter));
+                            unit.fork(setter -> new PeakRock(center, BlockPallet.STONE).generateStructure(setter));
                         }
                     }