Einfache Event-Behandlung
Events abonnieren
Kopieren
KI fragen
// Subscribe gibt ein Subscription-Objekt zurück
Subscription sub = api.event().server().onStarted(event -> {
System.out.println("Server gestartet: " + event.getServerId());
});
// Schließen wenn fertig
sub.close();
Plugin-Lebenszyklus-Verwaltung
Kopieren
KI fragen
public class MeinPlugin extends JavaPlugin {
private CloudApi api;
private final List<Subscription> subscriptions = new ArrayList<>();
@Override
public void onEnable() {
api = CloudApi.create();
registerEvents();
}
@Override
public void onDisable() {
subscriptions.forEach(Subscription::close);
subscriptions.clear();
}
private void registerEvents() {
subscriptions.add(api.event().server().onStarted(this::onServerStarted));
subscriptions.add(api.event().server().onStopped(this::onServerStopped));
subscriptions.add(api.event().group().onUpdated(this::onGroupUpdated));
}
private void onServerStarted(ServerStartedEvent event) {
getLogger().info("Server gestartet: " + event.getServerId());
}
private void onServerStopped(ServerStoppedEvent event) {
getLogger().info("Server gestoppt: " + event.getServerId());
}
private void onGroupUpdated(GroupUpdatedEvent event) {
getLogger().info("Gruppe aktualisiert: " + event.getServerGroupId());
}
}
Gängige Event-Muster
Auto-Start wenn Gruppe leer
Kopieren
KI fragen
public void setupAutoStart(String groupName, int minimum) {
api.event().server().onStopped(event -> {
if (!event.getGroupName().equals(groupName)) return;
api.server().getServersByGroup(groupName).thenAccept(servers -> {
long running = servers.stream()
.filter(s -> s.getState() != ServerState.STOPPING)
.count();
if (running < minimum) {
api.group().getGroupByName(groupName).thenAccept(group -> {
if (group != null) {
api.server().startServer(new StartServerRequest(group.getId(), groupName));
}
});
}
});
});
}
Alle Status-Änderungen loggen
Kopieren
KI fragen
public void setupStateLogging() {
api.event().server().onStateChanged(event -> {
String message = String.format("[%s] %s → %s",
event.getServerId(),
event.getOldState(),
event.getNewState());
logger.info(message);
});
}
Staff bei Server-Crash benachrichtigen
Kopieren
KI fragen
public void setupCrashNotifications() {
api.event().server().onStopped(event -> {
notifyStaff(Component.text("[Alert] Server gestoppt: " + event.getServerId())
.color(NamedTextColor.RED));
});
}
private void notifyStaff(Component message) {
api.player().getOnlinePlayers().thenAccept(players -> {
players.stream()
.filter(p -> hasStaffPermission(p))
.forEach(p -> p.sendMessage(message));
});
}
Events filtern
Nach Gruppe filtern
Kopieren
KI fragen
public void watchGroup(String groupName) {
api.event().server().onStarted(event -> {
if (event.getGroupName().equals(groupName)) {
handleGroupServerStart(event);
}
});
}
Einmalige Events
Auf bestimmten Server warten
Kopieren
KI fragen
public CompletableFuture<Void> waitForServer(String serverId) {
CompletableFuture<Void> future = new CompletableFuture<>();
Subscription sub = api.event().server().onStateChanged(event -> {
if (event.getServerId().equals(serverId) &&
event.getNewState() == ServerState.AVAILABLE) {
future.complete(null);
}
});
future.whenComplete((result, error) -> sub.close());
return future;
}
// Verwendung
waitForServer("lobby-1").thenRun(() -> {
System.out.println("Server ist bereit!");
});