From 42108267154b984beb71dacd55dbc92507323b6c Mon Sep 17 00:00:00 2001
From: hex <hex@iwakura.rip>
Date: Sat, 26 Apr 2025 19:37:23 +0200
Subject: [PATCH] fix: tp to spawn on respawn & save config

---
 src/main/java/rip/iwakura/civil/Core.java     |  2 ++
 .../rip/iwakura/civil/commands/Spawn.java     |  4 ++++
 .../iwakura/civil/events/RespawnHandler.java  | 23 +++++++++++++++++++
 3 files changed, 29 insertions(+)
 create mode 100644 src/main/java/rip/iwakura/civil/events/RespawnHandler.java

diff --git a/src/main/java/rip/iwakura/civil/Core.java b/src/main/java/rip/iwakura/civil/Core.java
index f31c471..04c8cae 100644
--- a/src/main/java/rip/iwakura/civil/Core.java
+++ b/src/main/java/rip/iwakura/civil/Core.java
@@ -25,6 +25,7 @@ import rip.iwakura.civil.events.TeamChatHandler;
 import rip.iwakura.civil.commands.Spawn;
 import rip.iwakura.civil.commands.Team;
 import rip.iwakura.civil.events.JoinHandler;
+import rip.iwakura.civil.events.RespawnHandler;
 import rip.iwakura.civil.types.CivilPlayer;
 
 public class Core extends JavaPlugin {
@@ -109,5 +110,6 @@ public class Core extends JavaPlugin {
         getServer().getPluginManager().registerEvents(new JoinHandler(database), this);
         getServer().getPluginManager().registerEvents(new ChatHandler(this), this);
         getServer().getPluginManager().registerEvents(new TeamChatHandler(this), this);
+        getServer().getPluginManager().registerEvents(new RespawnHandler(this), this);
     }
 }
diff --git a/src/main/java/rip/iwakura/civil/commands/Spawn.java b/src/main/java/rip/iwakura/civil/commands/Spawn.java
index 7ccbe63..af683cf 100644
--- a/src/main/java/rip/iwakura/civil/commands/Spawn.java
+++ b/src/main/java/rip/iwakura/civil/commands/Spawn.java
@@ -62,6 +62,10 @@ public class Spawn {
                             core.getConfig().set("spawn.yaw", loc.getYaw());
                             core.getConfig().set("spawn.pitch", loc.getPitch());
 
+                            core.getServer().getWorld("world").setSpawnLocation(loc);
+
+                            core.saveConfig();
+
                             p.sendMessage(MiniMessage.miniMessage().deserialize("<green>Set the server spawn to your current position."));
 
                             return Command.SINGLE_SUCCESS;
diff --git a/src/main/java/rip/iwakura/civil/events/RespawnHandler.java b/src/main/java/rip/iwakura/civil/events/RespawnHandler.java
new file mode 100644
index 0000000..45c2202
--- /dev/null
+++ b/src/main/java/rip/iwakura/civil/events/RespawnHandler.java
@@ -0,0 +1,23 @@
+package rip.iwakura.civil.events;
+import org.bukkit.Bukkit;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.entity.PlayerDeathEvent;
+import org.bukkit.event.player.PlayerRespawnEvent;
+
+import rip.iwakura.civil.Core;
+
+public class RespawnHandler implements Listener {
+    private Core core;
+
+    public RespawnHandler(Core core) {
+        this.core = core;
+    }
+
+    @EventHandler
+    public void respawnEvent(PlayerRespawnEvent ev) {
+        if (ev.isBedSpawn()) return;
+
+        ev.setRespawnLocation(core.getSpawn());
+    }
+}