From 3c80758b12ca95514a8e3fedab525f1405811993 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 2 Apr 2026 19:38:17 +0000 Subject: [PATCH] Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php aktualisiert --- .../minecraft-bungeecord-status.php | 134 ++++++++++++++---- 1 file changed, 110 insertions(+), 24 deletions(-) diff --git a/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php b/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php index 024a788..b405c53 100644 --- a/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php +++ b/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php @@ -1,12 +1,21 @@ = hardened build) + $health = mcss_socket_http_json($host, $port, '/health', $timeout); + if (is_array($health) && !empty($health['online'])) { + return [ + 'online' => true, + 'players' => [], + 'version' => 'BungeeCord', + 'ping' => 1, + 'motd' => 'StatusAPI erreichbar (Health)', + ]; + } + + // Ein zweiter kurzer Versuch reduziert False Negatives bei Paketverlust. + $retry = mcss_socket_http_json($host, $port, '/', max(1.0, $timeout)); + if (is_array($retry) && isset($retry['online'])) { + return $retry; + } + + return false; } function mcss_parse_bungeecord_version($raw_version) { @@ -517,16 +590,26 @@ function mcss_parse_bungeecord_version($raw_version) { } function mcss_fetch_server_with_ranks($srv) { - $cache_key = 'mcss_data_' . md5($srv['host']); + $host = $srv['host']; + $port = $srv['player_port'] ?? 9191; + + $cache_key = 'mcss_data_' . md5($host . ':' . $port); + $last_good_key = 'mcss_last_good_' . md5($host . ':' . $port); + $cached = get_transient($cache_key); if ($cached !== false) return $cached; - $host = $srv['host']; - $port = $srv['player_port'] ?? 9191; - - $api_data = mcss_fetch_data_via_api($host, $port, 1); + $api_data = mcss_fetch_data_via_api($host, $port, 2); if (!$api_data || !isset($api_data['online'])) { + $last_good = get_transient($last_good_key); + if (is_array($last_good) && !empty($last_good['online'])) { + $last_good['stale'] = true; + $last_good['stale_reason'] = 'temporary_connection_loss'; + set_transient($cache_key, $last_good, 5); + return $last_good; + } + return ['online'=>false,'players'=>[],'version'=>'Offline','ping'=>9999,'motd'=>'Verbindung fehlgeschlagen']; } @@ -574,7 +657,7 @@ function mcss_fetch_server_with_ranks($srv) { $clean_version = mcss_parse_bungeecord_version($api_data['version'] ?? 'BungeeCord'); $result = [ - 'online' => true, + 'online' => !empty($api_data['online']), 'players' => $players_info, 'version' => $clean_version, 'ping' => 1, @@ -583,6 +666,9 @@ function mcss_fetch_server_with_ranks($srv) { $fast_cache_ttl = max(2, absint($srv['cache_ttl'] ?? 10)); set_transient($cache_key, $result, $fast_cache_ttl); + if (!empty($result['online'])) { + set_transient($last_good_key, $result, 180); + } return $result; }