diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java b/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java
index 74403c7..ed66a31 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliance/Appliance.java
@@ -8,6 +8,7 @@ import org.bukkit.event.HandlerList;
 import org.bukkit.event.Listener;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -68,16 +69,16 @@ public abstract class Appliance {
 
     public void destruct(@NotNull JavaPlugin plugin) {
         eventHandlers().forEach(HandlerList::unregisterAll);
-        commands().forEach(command -> setCommandExecutor(plugin, command.commandName, null));
     }
 
     private void setCommandExecutor(JavaPlugin plugin, String name, ApplianceCommand<?> executor) {
         PluginCommand command = plugin.getCommand(name);
-        if(command != null) {
+        if(command != null && executor != null) {
             command.setExecutor(executor);
             command.setTabCompleter(executor);
         } else {
             Bukkit.getLogger().warning("Command " + name + " is not specified in plugin.yml!");
+            throw new RuntimeException("All commands must be registered in plugin.yml. Missing command: " + name);
         }
     }
 }
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliance/ApplianceCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliance/ApplianceCommand.java
index 92b4a5b..a4a4432 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliance/ApplianceCommand.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliance/ApplianceCommand.java
@@ -53,7 +53,7 @@ public abstract class ApplianceCommand<T extends Appliance> extends ApplianceSup
         return response.stream().filter(s -> s.startsWith(args[args.length-1])).toList();
     }
 
-    protected abstract void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args);
+    protected abstract void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception;
 
     /**
      * Utility class for command which can only be used as a Player. You can access the executing player with the getPlayer() method.
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java
index 1b805ce..924949c 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/Event.java
@@ -1,5 +1,6 @@
 package eu.mhsl.craftattack.spawn.appliances.event;
 
+import com.google.gson.Gson;
 import eu.mhsl.craftattack.spawn.appliance.Appliance;
 import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
 import eu.mhsl.craftattack.spawn.appliances.event.command.EventCommand;
@@ -17,11 +18,21 @@ import org.bukkit.entity.Villager;
 import org.bukkit.event.Listener;
 import org.jetbrains.annotations.NotNull;
 
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
 import java.util.List;
+import java.util.UUID;
 
 public class Event extends Appliance {
     public DisplayVillager.ConfigBound villager;
     private boolean isOpen = false;
+    private UUID roomId;
+    private HttpClient eventServerClient = HttpClient.newHttpClient();
+
 
     public Event() {
         super("event");
@@ -37,11 +48,25 @@ public class Event extends Appliance {
                     villager.setVillagerType(Villager.Type.SNOW);
                 }
         );
+        this.isOpen = localConfig().getBoolean("enabled", false);
+        if(this.isOpen) this.roomId = UUID.fromString(localConfig().getString("roomId", ""));
     }
 
-    public void openEvent() {
+    public void openEvent() throws URISyntaxException, IOException, InterruptedException {
         if(isOpen) throw new ApplianceCommand.Error("Es läuft derzeit bereits ein Event!");
+        HttpRequest createRoomRequest = HttpRequest.newBuilder()
+                .uri(new URI(localConfig().getString("api") + "/room"))
+                .POST(HttpRequest.BodyPublishers.noBody())
+                .build();
+
+        HttpResponse<String> rawResponse = eventServerClient.send(createRoomRequest, HttpResponse.BodyHandlers.ofString());
+        if(rawResponse.statusCode() != 200) throw new ApplianceCommand.Error("Event-Server meldet Fehler: " + rawResponse.statusCode());
+
+        record Response(UUID uuid) {}
+        Response response = new Gson().fromJson(rawResponse.body(), Response.class);
+
         isOpen = true;
+        roomId = response.uuid;
     }
 
     public void joinEvent(Player p) {
@@ -50,7 +75,27 @@ public class Event extends Appliance {
             return;
         }
 
-        PluginMessage.connect(p, localConfig().getString("connect-server-name"));
+        try {
+            p.sendMessage(Component.text("Authentifiziere...", NamedTextColor.GREEN));
+            record Request(UUID player, UUID room) {}
+            Request request = new Request(p.getUniqueId(), this.roomId);
+            HttpRequest queueRoomRequest = HttpRequest.newBuilder()
+                    .uri(new URI(localConfig().getString("api") + "/queueRoom"))
+                    .POST(HttpRequest.BodyPublishers.ofString(new Gson().toJson(request)))
+                    .build();
+
+            HttpResponse<Void> rawResponse = eventServerClient.send(queueRoomRequest, HttpResponse.BodyHandlers.discarding());
+            if(rawResponse.statusCode() != 200) {
+                p.sendMessage(Component.text("Fehler beim beitreten: " + rawResponse.statusCode(), NamedTextColor.RED));
+                return;
+            }
+
+            p.sendMessage(Component.text("Betrete...", NamedTextColor.GREEN));
+            PluginMessage.connect(p, localConfig().getString("connect-server-name"));
+
+        } catch (URISyntaxException | IOException | InterruptedException e) {
+            throw new RuntimeException(e);
+        }
     }
 
     public void endEvent() {
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventCommand.java
index 0473883..634d61c 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventCommand.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventCommand.java
@@ -12,7 +12,7 @@ public class EventCommand extends ApplianceCommand.PlayerChecked<Event> {
     }
 
     @Override
-    protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+    protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception {
         getAppliance().joinEvent(getPlayer());
     }
 }
diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventOpenSessionCommand.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventOpenSessionCommand.java
index be06bb6..dfcd880 100644
--- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventOpenSessionCommand.java
+++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/event/command/EventOpenSessionCommand.java
@@ -2,6 +2,8 @@ package eu.mhsl.craftattack.spawn.appliances.event.command;
 
 import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand;
 import eu.mhsl.craftattack.spawn.appliances.event.Event;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
 import org.bukkit.command.Command;
 import org.bukkit.command.CommandSender;
 import org.jetbrains.annotations.NotNull;
@@ -12,7 +14,8 @@ public class EventOpenSessionCommand extends ApplianceCommand<Event> {
     }
 
     @Override
-    protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
+    protected void execute(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) throws Exception {
         getAppliance().openEvent();
+        sender.sendMessage(Component.text("Event-Server erfolgreich gestartet!", NamedTextColor.GREEN));
     }
 }
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 9a163d5..0631e62 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -24,8 +24,10 @@ report:
   api: https://mhsl.eu/craftattack/report
 
 event:
-  api: http://10.20.0.1/
+  api: http://10.20.6.5:8080/
   connect-server-name: event
+  enabled: false
+  roomId:
   uuid:
   villagerLocation:
     world: world
@@ -37,4 +39,7 @@ event:
 
 help:
   teamspeak: myserver.com
-  spawn: "Der Weltspawn befindet sich bei x:0 y:0 z:0"
\ No newline at end of file
+  spawn: "Der Weltspawn befindet sich bei x:0 y:0 z:0"
+
+playerLimit:
+  maxPlayers: 0
\ No newline at end of file