From 0c41cee3ea77e039fcf00eb3024e5d535cc00641 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Thu, 1 Jan 2026 01:50:28 +0000 Subject: [PATCH] Dateien nach "Minecraft-BungeeCord-Status" hochladen --- .../minecraft-bungeecord-status.php | 694 ++++++++++++++++++ 1 file changed, 694 insertions(+) create mode 100644 Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php diff --git a/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php b/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php new file mode 100644 index 0000000..dd25fee --- /dev/null +++ b/Minecraft-BungeeCord-Status/minecraft-bungeecord-status.php @@ -0,0 +1,694 @@ +'mcss_sanitize_servers']); +}); + +function mcss_sanitize_servers($input) { + if (!is_array($input)) return []; + $clean = []; + foreach ($input as $srv) { + if (!is_array($srv)) continue; + $clean[] = [ + 'id' => sanitize_key($srv['id'] ?? 'srv_'.wp_rand()), + 'name' => sanitize_text_field($srv['name'] ?? 'BungeeCord'), + 'host' => sanitize_text_field($srv['host'] ?? ''), + 'rcon_port' => absint($srv['rcon_port'] ?? 25577), + 'rcon_pass' => sanitize_text_field($srv['rcon_pass'] ?? ''), + 'player_port' => sanitize_text_field($srv['player_port'] ?? '9191'), // API Port + 'player_port_copy' => sanitize_text_field($srv['player_port_copy'] ?? ''), // Display Port + 'copy_address' => sanitize_text_field($srv['copy_address'] ?? ''), + 'hide_port' => !empty($srv['hide_port']), + 'show_motd' => !empty($srv['show_motd']), + 'cache_ttl' => max(2, absint($srv['cache_ttl'] ?? 10)), + 'logo_id' => absint($srv['logo_id'] ?? 0), + 'logo_url' => esc_url_raw($srv['logo_url'] ?? ''), + 'custom_text' => wp_kses_post($srv['custom_text'] ?? ''), + // Styles + 'ip_color' => sanitize_hex_color($srv['ip_color'] ?? '#1f2937'), + 'ct_color' => sanitize_hex_color($srv['ct_color'] ?? '#1e293b'), + 'ip_size' => sanitize_text_field($srv['ip_size'] ?? '1.5em'), + 'ct_size' => sanitize_text_field($srv['ct_size'] ?? '1.05em'), + 'name_color' => sanitize_hex_color($srv['name_color'] ?? '#333333'), + 'name_size' => sanitize_text_field($srv['name_size'] ?? '1.8em'), + // Events & Maintenance + 'maintenance_mode' => !empty($srv['maintenance_mode']), + 'maintenance_message' => wp_kses_post($srv['maintenance_message'] ?? 'Wartung'), + 'announcement_enabled' => !empty($srv['announcement_enabled']), + 'announcement_text' => wp_kses_post($srv['announcement_text'] ?? ''), + 'announcement_start' => sanitize_text_field($srv['announcement_start'] ?? ''), + 'announcement_end' => sanitize_text_field($srv['announcement_end'] ?? ''), + 'announcement_type' => sanitize_text_field($srv['announcement_type'] ?? 'info'), + // Ranks + 'ranks_json' => mcss_sanitize_ranks($srv['ranks_json'] ?? '[]'), + ]; + } + return $clean; +} + +function mcss_sanitize_ranks($input) { + $decoded = json_decode($input, true); + if (!is_array($decoded)) return '[]'; + $out = []; + foreach ($decoded as $r) { + if (!is_array($r) || empty($r['name'])) continue; + $out[] = ['name'=>sanitize_text_field($r['name']), 'color'=>sanitize_text_field($r['color']??'#6c5ce7')]; + } + return wp_json_encode($out); +} + +/* ---------------- Helper Functions ---------------- */ +function mcss_should_show_announcement($srv) { + if (empty($srv['announcement_enabled'])) return false; + if (empty($srv['announcement_text'])) return false; + if (empty($srv['announcement_start'])) return true; + + $current_time = current_time('timestamp'); + $start_time = strtotime($srv['announcement_start']); + if ($start_time > $current_time) return false; + + if (empty($srv['announcement_end'])) return true; + + $end_time = strtotime($srv['announcement_end']); + return $end_time >= $current_time; +} + +function mcss_get_announcement_style($type) { + switch ($type) { + case 'warning': return ['bg' => '#fef3c7','border' => '#fbbf24','text' => '#92400e','icon' => '⚠️']; + case 'success': return ['bg' => '#d1fae5','border' => '#10b981','text' => '#065f46','icon' => '✅']; + case 'error': return ['bg' => '#fee2e2','border' => '#ef4444','text' => '#991b1b','icon' => '❌']; + case 'info': default: return ['bg' => '#dbeafe','border' => '#3b82f6','text' => '#1e40af','icon' => 'ℹ️']; + } +} + +/* ---------------- Backend Page ---------------- */ +function mcss_settings_page() { + $servers = get_option('mcss_servers', []); + if (empty($servers)) { + $servers = [['id'=>'default', 'name'=>'Mein Netzwerk', 'host'=>'127.0.0.1', 'player_port'=>'9191', 'cache_ttl'=>10, 'hide_port'=>true, 'show_motd'=>true]]; + } + + // Vollständige Liste + $font_sizes = [ + '0.7em'=>'Sehr klein','0.85em'=>'Klein','1em'=>'Normal','1.2em'=>'Etwas größer', + '1.4em'=>'Groß','1.5em'=>'Sehr groß','1.7em'=>'Extra groß','2em'=>'Riesig', + '2.5em'=>'Enorm','3em'=>'Gigantisch', + ]; + + $announcement_types = ['info'=>'Info (Blau)','warning'=>'Warnung (Orange)','success'=>'Erfolg (Grün)','error'=>'Fehler (Rot)']; + + ?> +
+

BungeeCord Netzwerk Einstellungen

+

+ Final: Expliziter `border: none` im Inline-Style für Wartungsmodus. +

+
+ +
+ $srv): mcss_render_row($srv, $i, $font_sizes, $announcement_types); endforeach; ?> +
+

+ +
+
+ + + +
+ +

Netzwerk

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Name
Name – Schrift + + + + +
Host (IP)
API Port (StatusAPI)
Spielerport (für IP-Anzeige)
Cache TTL
Kopier-Adresse
Logo URL
Zusatztext
Zusatztext – Schrift + + + + +
Wartungsmodus />
Wartungsnachricht
Ankündigungen />
Ankündigungstext
Ankündigungszeitraum +
+
+
+
+
Ankündigungstyp + +
+ +
+ false,'players'=>[],'version'=>'Offline','ping'=>9999,'motd'=>'Verbindung fehlgeschlagen']; + } + + $players_info = []; + $user_defined_ranks = json_decode($srv['ranks_json'] ?? '[]', true); + if (!is_array($user_defined_ranks)) $user_defined_ranks = []; + + foreach ($api_data['players'] as $name) { + $rank = 'Spieler'; + $color = '#566d8dff'; + $players_info[] = [ + 'name' => $name, + 'avatar' => "https://mc-heads.net/avatar/" . rawurlencode($name) . "/64", + 'rank' => $rank, + 'color' => $color, + ]; + } + + $clean_version = mcss_parse_bungeecord_version($api_data['version'] ?? 'BungeeCord'); + + $result = [ + 'online' => true, + 'players' => $players_info, + 'version' => $clean_version, + 'ping' => 1, + 'motd' => is_array($api_data['motd']) ? implode(' ', $api_data['motd']) : $api_data['motd'] + ]; + + $fast_cache_ttl = min(2, $srv['cache_tl'] ?? $srv['cache_ttl']); + set_transient($cache_key, $result, $fast_cache_ttl); + return $result; +} + +/* ---------------- AJAX ---------------- */ +add_action('wp_ajax_mcss_fetch', 'mcss_ajax_fetch'); +add_action('wp_ajax_nopriv_mcss_fetch', 'mcss_ajax_fetch'); +function mcss_ajax_fetch() { + $id = sanitize_text_field($_POST['server_id'] ?? ''); + $servers = get_option('mcss_servers', []); + foreach ($servers as $srv) { + if (($srv['id'] ?? '') === $id) wp_send_json(mcss_fetch_server_with_ranks($srv)); + if (($srv['name'] ?? '') === $id) wp_send_json(mcss_fetch_server_with_ranks($srv)); + } + wp_send_json(['online'=>false]); +} + +/* ---------------- FRONTEND (SHORTCODE) ---------------- */ +add_shortcode('bungeecord_status', 'mcss_shortcode'); +function mcss_shortcode($atts) { + $atts = shortcode_atts(['id' => ''], $atts); + if (empty($atts['id'])) return 'Fehler'; + + $servers = get_option('mcss_servers', []); + $srv = null; + foreach ($servers as $s) { + if (($s['id'] ?? '') === $atts['id']) { $srv = $s; break; } + if (($s['name'] ?? '') === $atts['id']) { $srv = $s; break; } + } + if (!$srv) return 'Server nicht gefunden'; + + // MAINTENANCE MODE (Rich Style - No Border) + $maintenance_mode = !empty($srv['maintenance_mode']); + $maintenance_message = $srv['maintenance_message'] ?? 'Der Server befindet sich derzeit im Wartungsmodus. Wir sind bald wieder für dich da!'; + if ($maintenance_mode) { + $uid = md5($srv['host']); + $logo = $srv['logo_id'] ? wp_get_attachment_image_url($srv['logo_id'], 'full') : ($srv['logo_url'] ?: MCSS_URL.'img/default-server-logo.png'); + $name_color = $srv['name_color'] ?? '#333333'; + $name_size = $srv['name_size'] ?? '1.8em'; + + ob_start(); ?> + + +
+ + +
+ Logo +
+

+
+ + Wartungsmodus +
+
+
+ +
+
Wartungshinweis:
+
+
+

Wir arbeiten daran, den Server so schnell wie möglich wieder verfügbar zu machen. Vielen Dank für deine Geduld!

+
+
+
+ + + + +
+ + +
IP kopiert!
+ + + +
+ +
+ +
+ + + +
+ + + +
+ + +

+ +

+ + +
+ + + + + + + + + + + + + + +
+ + + +
+ +
+ + +
+
+ + +
+ Spieler: + Version: + Ping: ms +
+ + + Spieler: +
+ + + +
+ +
+
+ + + +
Keine Spieler Online
+ +
+
+ + + + + + +