PHP-Client-Beispiel
Eranio Veröffentlicht am: 14. Oktober 2026
StreamBridge (Minecraft): PHP-Client-Beispiel
Ein einfacher PHP-Client, der dieselbe Rolle wie das Plugin übernimmt: in regelmäßigen Abständen den Bridge-Endpunkt abfragen, den eigenen Status melden und die zurückgegebenen Aktionen verarbeiten. Nützlich, wenn du eine eigene Anbindung (zum Beispiel für ein anderes Spiel oder einen eigenen Server-Typ) gegen dieselbe Schnittstelle bauen möchtest.
Basis-Klasse
<?php
class StreamBridgeClient
{
private string $url;
private string $token;
public function __construct(string $url, string $token)
{
$this->url = rtrim($url, '/') . '/api/v1/minecraft/bridge';
$this->token = $token;
}
/**
* Meldet den aktuellen Stand und holt wartende Aktionen ab.
*
* @param array $players Liste der Online-Spieler
* @param array $results Ergebnisse zuvor ausgeführter Aktionen
* @return array{actions: array, display: array}
*/
public function poll(array $players = [], array $results = [], bool $paused = false, string $game = 'minecraft'): array
{
$ch = curl_init($this->url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'version' => '1.8.0',
'paused' => $paused,
'game' => $game,
'players' => $players,
'results' => $results,
]),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Authorization: Bearer ' . $this->token,
],
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 8,
]);
$response = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("Bridge-Anfrage fehlgeschlagen (HTTP {$status}): {$response}");
}
return json_decode($response, true) ?? ['actions' => [], 'display' => []];
}
}
Verwendung
$client = new StreamBridgeClient('https://dein-panel.beispiel', 'dein-token');
$players = [
['name' => 'Steve', 'health' => 20, 'max_health' => 20, 'food' => 20, 'level' => 30,
'world' => 'world', 'dimension' => 'overworld', 'gamemode' => 'survival', 'effects' => [], 'timers' => []],
];
$result = $client->poll($players);
foreach ($result['actions'] as $action) {
echo "Aktion {$action['action']} für {$action['player']} von {$action['viewer']}\n";
// Hier die Aktion im eigenen Spiel/Server ausführen ...
// Danach das Ergebnis beim nächsten poll()-Aufruf zurückmelden:
// $results[] = ['id' => $action['id'], 'ok' => true, 'detail' => null];
}
if ($result['display']['live'] ?? false) {
echo "{$result['display']['streamer']} ist gerade live auf {$result['display']['platform']}!\n";
}
Wichtig: Jede empfangene Aktion muss beim nächsten poll()-Aufruf im results-Array quittiert werden (mit ihrer id), sonst gilt sie weiterhin als offen.
Häufige Fragen
Muss ich die komplette Spieler-Struktur mitschicken?
Nein, alle Felder außer name sind optional und werden bei fehlenden Werten mit sinnvollen Standardwerten ersetzt (siehe Anleitung "Status senden & Aktionen abholen" im Testbereich).
Wie oft sollte ich poll() aufrufen?
Das echte Plugin fragt standardmäßig einmal pro Sekunde nach (siehe poll-interval-ticks in der Konfiguration). Richte dich danach, damit Aktionen zeitnah ankommen, ohne den Endpunkt unnötig oft zu belasten.
Was passiert, wenn ich ein Ergebnis nicht melde? Die Aktion bleibt als "gesendet, aber unbestätigt" stehen und erscheint nicht erneut in der Antwort, wird serverseitig aber nicht als erfolgreich verbucht.