> ## Documentation Index
> Fetch the complete documentation index at: https://new-docs.simplecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Events API

> Echtzeit-Events aus deinem Cloud-Netzwerk abonnieren

Die Events API ermöglicht das Reagieren auf Änderungen in deinem Netzwerk in Echtzeit. Zugriff über `api.event()`.

## Event-Kategorien

| Methode                          | Events                                      |
| -------------------------------- | ------------------------------------------- |
| `api.event().group()`            | Gruppe erstellt, aktualisiert, gelöscht     |
| `api.event().server()`           | Server gestartet, gestoppt, Status geändert |
| `api.event().persistentServer()` | Persistente Server Events                   |
| `api.event().blueprint()`        | Blueprint erstellt, aktualisiert, gelöscht  |

## Server Events

Server Events werden sowohl für gruppenbasierte Server als auch für persistente Server ausgelöst. Bei einem persistenten Server ist `persistentServerId` gesetzt und `groupName` leer. Bei einem Gruppen-Server ist `groupName` gesetzt und `persistentServerId` leer.

### Server gestartet

```java theme={null}
Subscription sub = api.event().server().onStarted(event -> {
    System.out.println("Server gestartet: " + event.getServerId());

    // Prüfen ob es ein Gruppen- oder persistenter Server ist
    if (event.getPersistentServerId() != null && !event.getPersistentServerId().isEmpty()) {
        System.out.println("Persistenter Server: " + event.getPersistentServerId());
    } else {
        System.out.println("Gruppe: " + event.getGroupName());
    }
});
```

### Server gestoppt

```java theme={null}
api.event().server().onStopped(event -> {
    System.out.println("Server gestoppt: " + event.getServerId());
});
```

### Server-Status geändert

```java theme={null}
api.event().server().onStateChanged(event -> {
    System.out.println(event.getServerId() + ": " +
        event.getOldState() + " → " + event.getNewState());
});
```

## Gruppen Events

```java theme={null}
// Erstellt
api.event().group().onCreated(event -> {
    System.out.println("Gruppe erstellt: " + event.getServerGroupId());
});

// Aktualisiert
api.event().group().onUpdated(event -> { ... });

// Gelöscht
api.event().group().onDeleted(event -> { ... });
```

## Subscriptions verwalten

Subscriptions implementieren `AutoCloseable`. Immer aufräumen wenn fertig:

### Manuelles Aufräumen

```java theme={null}
Subscription sub = api.event().server().onStarted(event -> { ... });

// Später, beim Herunterfahren
sub.close();
```

### Plugin-Lebenszyklus

```java theme={null}
public class MeinPlugin extends JavaPlugin {
    private final List<Subscription> subscriptions = new ArrayList<>();
    private CloudApi api;

    @Override
    public void onEnable() {
        api = CloudApi.create();
        subscriptions.add(api.event().server().onStarted(this::handleServerStart));
        subscriptions.add(api.event().server().onStopped(this::handleServerStop));
    }

    @Override
    public void onDisable() {
        subscriptions.forEach(Subscription::close);
    }

    private void handleServerStart(ServerStartedEvent event) {
        getLogger().info("Server gestartet: " + event.getServerId());
    }

    private void handleServerStop(ServerStoppedEvent event) {
        getLogger().info("Server gestoppt: " + event.getServerId());
    }
}
```

## Event-Referenz

### Server Events

| Event                     | Properties                                    |
| ------------------------- | --------------------------------------------- |
| `ServerStartedEvent`      | `serverId`, `groupName`, `persistentServerId` |
| `ServerStoppedEvent`      | `serverId`, `groupName`, `persistentServerId` |
| `ServerStateChangedEvent` | `serverId`, `oldState`, `newState`            |
| `ServerUpdatedEvent`      | `serverId`                                    |
| `ServerDeletedEvent`      | `serverId`                                    |

<Note>
  `ServerStartedEvent` und `ServerStoppedEvent` werden sowohl für Gruppen-Server als auch für persistente Server ausgelöst. Bei persistenten Servern ist `persistentServerId` gesetzt und `groupName` leer. Bei Gruppen-Servern ist `groupName` gesetzt und `persistentServerId` leer.
</Note>

### Gruppen Events

| Event               | Properties      |
| ------------------- | --------------- |
| `GroupCreatedEvent` | `serverGroupId` |
| `GroupUpdatedEvent` | `serverGroupId` |
| `GroupDeletedEvent` | `serverGroupId` |
