diff --git a/build.gradle b/build.gradle
index 27e40bf..2c39fcc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -57,7 +57,7 @@ dependencies {
 
 
     //PvP
-    implementation 'io.github.TogAr2:MinestomPvP:04180ddf9a'
+    implementation 'io.github.TogAr2:MinestomPvP:PR62-SNAPSHOT'
 
     // Hephaestus engine
     implementation("team.unnamed:hephaestus-api:0.2.1-SNAPSHOT")
diff --git a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/jumpDive/JumpDiveFactory.java b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/jumpDive/JumpDiveFactory.java
index b94c775..2e4fb2e 100644
--- a/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/jumpDive/JumpDiveFactory.java
+++ b/src/main/java/eu/mhsl/minenet/minigames/instance/game/stateless/types/jumpDive/JumpDiveFactory.java
@@ -27,7 +27,7 @@ public class JumpDiveFactory implements GameFactory {
         return new ConfigManager()
             .addOption(new NumericOption("radius", Material.HEART_OF_THE_SEA, TranslatedComponent.byId("optionCommon#radius"), 5, 8, 10, 12, 14, 16))
             .addOption(new NumericOption("height", Material.SCAFFOLDING, TranslatedComponent.byId("optionCommon#height"), 30, 60, 90))
-            .addOption(new NumericOption("timeLimit", Material.CLOCK, TranslatedComponent.byId("optionCommon#timeLimit"), 60, 120, 180, 240, 300));
+            .addOption(new NumericOption("timeLimit", Material.CLOCK, TranslatedComponent.byId("optionCommon#seconds"), 60, 120, 180, 240, 300));
 
     }
 
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 6f10d14..d3c6d02 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
@@ -3,20 +3,23 @@ package eu.mhsl.minenet.minigames.instance.game.stateless.types.stickfight;
 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.CircularPlateTerrainGenerator;
 import io.github.togar2.pvp.events.FinalAttackEvent;
 import io.github.togar2.pvp.feature.CombatFeatures;
 import net.minestom.server.coordinate.Pos;
 import net.minestom.server.entity.Player;
 import net.minestom.server.event.player.PlayerMoveEvent;
-import net.minestom.server.instance.batch.AbsoluteBlockBatch;
 import net.minestom.server.instance.block.Block;
 import org.jetbrains.annotations.NotNull;
 
+import java.util.List;
+import java.util.WeakHashMap;
 import java.util.concurrent.CompletableFuture;
 
 public class Stickfight extends StatelessGame {
+    private final double radius = 20;
+    private final WeakHashMap<Player, Pos> spawnPoints = new WeakHashMap<>();
+
     public Stickfight() {
         super(Dimension.OVERWORLD.key, "Stickfight", new LastWinsScore());
 
@@ -38,21 +41,56 @@ public class Stickfight extends StatelessGame {
 
     @Override
     protected void onLoad(@NotNull CompletableFuture<Void> callback) {
-        AbsoluteBlockBatch batch = new AbsoluteBlockBatch();
-        for (int z = -10; z <= 10; z++) {
-            batch.setBlock(0, 50, z, Block.SANDSTONE);
-        }
-        batch.setBlock(0, 50, 0, Block.GOLD_BLOCK);
+        setBlock(0, 50, 0, Block.DIAMOND_BLOCK);
+    }
 
-        BatchUtil.loadAndApplyBatch(batch, this, () -> callback.complete(null));
+    @Override
+    protected void start() {
+        List<Player> players = getPlayers().stream().toList();
+        int numPlayers = players.size();
+
+        for (int i = 0; i < numPlayers; i++) {
+            double angle = (2 * Math.PI / numPlayers) * i;
+            int spawnX = (int) (radius * Math.cos(angle));
+            int spawnZ = (int) (radius * Math.sin(angle));
+            int spawnY = 50;
+
+            Pos spawnpoint = new Pos(spawnX, spawnY + 1, spawnZ).add(0.5);
+            spawnPoints.put(players.get(i), spawnpoint.withLookAt(getSpawn()));
+            players.get(i).teleport(spawnpoint);
+
+            generateBridge(spawnX, spawnY, spawnZ);
+        }
+
+        setBlock(0, 50, 0, Block.GOLD_BLOCK);
+        super.start();
+    }
+
+    private void generateBridge(int startX, int startY, int startZ) {
+        int steps = (int) (radius * 1.5);
+        for (int i = 0; i < steps; i++) {
+            double t = (double) i / steps;
+            int x = (int) (startX * (1 - t));
+            int z = (int) (startZ * (1 - t));
+            setBlock(x, startY, z, Block.SANDSTONE);
+        }
     }
 
     @Override
     protected void onPlayerMove(@NotNull PlayerMoveEvent playerMoveEvent) {
-        if(isBeforeBeginning) playerMoveEvent.setCancelled(true);
+        if(!spawnPoints.containsKey(playerMoveEvent.getPlayer())) {
+            playerMoveEvent.setCancelled(true);
+            return;
+        }
+
+        if(isBeforeBeginning) {
+            if(spawnPoints.get(playerMoveEvent.getPlayer()).distance(playerMoveEvent.getNewPosition()) < 1) return;
+            playerMoveEvent.setCancelled(true);
+            playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer()));
+        }
 
         if(playerMoveEvent.getNewPosition().y() < 40) {
-            playerMoveEvent.getPlayer().teleport(new Pos(0, 51, 0));
+            playerMoveEvent.getPlayer().teleport(spawnPoints.get(playerMoveEvent.getPlayer()));
         }
     }