diff --git a/minecraft-server-status.php b/minecraft-server-status.php index dca11e8..31e7fa5 100644 --- a/minecraft-server-status.php +++ b/minecraft-server-status.php @@ -3,7 +3,7 @@ * Plugin Name: Minecraft Server Status – Multi-Server Edition * Description: Die ultimative Live-Status-Anzeige für deine Minecraft Server mit Echtzeit-Updates für beliebig viele Server. * Tags: minecraft, server status, player list, multi-server, rcon, luckperms, widget, shortcode, gaming, customizable, live, ping, maintenance, gameserver - * Version: 2.0.1 + * Version: 2.0.5 * Author: M_Viper * Plugin URI: https://git.viper.ipv64.net/M_Viper/Minecraft-Server-Status * Author URI: https://m-viper.de @@ -29,7 +29,9 @@ add_action('admin_enqueue_scripts', function($hook){ wp_enqueue_media(); wp_enqueue_style('wp-color-picker'); wp_enqueue_script('wp-color-picker'); - wp_enqueue_script('mcss-admin-js', MCSS_URL . 'js/admin.js', ['jquery', 'wp-color-picker'], '4.0.1', true); + wp_enqueue_script('jquery-ui-datepicker'); + wp_enqueue_style('jquery-ui-css', 'https://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.min.css'); + wp_enqueue_script('mcss-admin-js', MCSS_URL . 'js/admin.js', ['jquery', 'wp-color-picker', 'jquery-ui-datepicker'], '4.0.1', true); } }); @@ -78,6 +80,11 @@ function mcss_sanitize_servers($input) { 'name_size' => sanitize_text_field($srv['name_size'] ?? '1.8em'), 'maintenance_mode' => !empty($srv['maintenance_mode']), 'maintenance_message' => wp_kses_post($srv['maintenance_message'] ?? 'Der Server befindet sich derzeit im Wartungsmodus. Wir sind bald wieder für dich da!'), + '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_json' => mcss_sanitize_ranks($srv['ranks_json'] ?? '[]'), ]; } @@ -99,7 +106,7 @@ function mcss_sanitize_ranks($input) { return wp_json_encode($out); } -/* ---------------- Settings Page ---------------- */ +/* ---------------- Settings Page – 100% wie dein Original ---------------- */ function mcss_settings_page() { $servers = get_option('mcss_servers', []); if (empty($servers)) { @@ -114,13 +121,20 @@ function mcss_settings_page() { '1.4em' => 'Groß','1.5em' => 'Sehr groß (Standard)','1.7em' => 'Extra groß','2em' => 'Riesig', '2.5em' => 'Enorm','3em' => 'Gigantisch', ]; + + $announcement_types = [ + 'info' => 'Information (Blau)', + 'warning' => 'Warnung (Orange)', + 'success' => 'Erfolg (Grün)', + 'error' => 'Fehler (Rot)', + ]; ?>

Minecraft Server Einstellungen

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

@@ -137,7 +151,7 @@ function mcss_settings_page() { jQuery(function($){ let counter = ; - // Button-Event-Handler + // Button-Event-Handler - direkt und einfach $('#mcss-add-server').on('click', function(e){ e.preventDefault(); @@ -241,6 +255,48 @@ function mcss_settings_page() {

HTML + Emojis erlaubt. Diese Nachricht wird angezeigt, wenn der Wartungsmodus aktiv ist.

+ + + + + +

Wenn aktiviert, werden zeitlich begrenzte Ankündigungen über dem Widget angezeigt.

+ + + + + + +

HTML + Emojis erlaubt. Diese Nachricht wird als Ankündigung angezeigt.

+ + + + + +
+
+ + +
+
+ + +
+
+

Die Ankündigung wird nur im angegebenen Zeitraum angezeigt. Leerlassen für dauerhafte Anzeige.

+ + + + + + +

Bestimmt das Aussehen der Ankündigung.

+ +

Ränge (LuckPerms Zuordnung)

Die Ränge werden automatisch über LuckPerms per RCON abgerufen.

@@ -256,6 +312,12 @@ function mcss_settings_page() { // Farbpicker für neue Zeile initialisieren $('#mcss-servers-repeater .mcss-server-row:last .mcss-color-picker').wpColorPicker(); + + // Datepicker für neue Zeile initialisieren + $('#mcss-servers-repeater .mcss-server-row:last .mcss-datepicker').datepicker({ + dateFormat: 'dd.mm.yy', + timeFormat: 'HH:mm' + }); }); // Event-Handler für das Entfernen von Servern @@ -265,12 +327,18 @@ function mcss_settings_page() { // Farbpicker für bestehende Zeilen initialisieren $('.mcss-color-picker').wpColorPicker(); + + // Datepicker für bestehende Zeilen initialisieren + $('.mcss-datepicker').datepicker({ + dateFormat: 'dd.mm.yy', + timeFormat: 'HH:mm' + }); }); HTML + Emojis erlaubt. Diese Nachricht wird angezeigt, wenn der Wartungsmodus aktiv ist.

+ + + + /> + +

Wenn aktiviert, werden zeitlich begrenzte Ankündigungen über dem Widget angezeigt.

+ + + + + + +

HTML + Emojis erlaubt. Diese Nachricht wird als Ankündigung angezeigt.

+ + + + + +
+
+ + +
+
+ + +
+
+

Die Ankündigung wird nur im angegebenen Zeitraum angezeigt. Leerlassen für dauerhafte Anzeige.

+ + + + + + +

Bestimmt das Aussehen der Ankündigung.

+ +

Ränge (LuckPerms Zuordnung)

@@ -391,7 +501,7 @@ function mcss_render_server_row($srv, $i, $font_sizes) { 'Host oder Passwort nicht gesetzt']; $rcon = new Rcon($srv['host'], $srv['rcon_port'], $srv['rcon_pass'], 3); @@ -528,7 +638,7 @@ function mcss_avatar($input, $size = 64) { return "https://mc-heads.net/avatar/{$uuid}/{$size}"; } -/* ---------------- FUNKTION FÜR PING-MESSUNG ---------------- */ +/* ---------------- NEUE FUNKTION FÜR PING-MESSUNG ---------------- */ function mcss_ping_server($host, $port = 25565, $timeout = 2) { $startTime = microtime(true); @@ -549,7 +659,77 @@ function mcss_ping_server($host, $port = 25565, $timeout = 2) { return $ping; } -/* ---------------- Fetch & AJAX ---------------- */ +/* ---------------- NEUE FUNKTIONEN FÜR ANKÜNDIGUNGEN ---------------- */ +function mcss_should_show_announcement($srv) { + // Prüfen, ob Ankündigungen aktiviert sind + if (empty($srv['announcement_enabled'])) { + return false; + } + + // Prüfen, ob ein Text vorhanden ist + if (empty($srv['announcement_text'])) { + return false; + } + + // Wenn kein Startdatum angegeben ist, immer anzeigen + if (empty($srv['announcement_start'])) { + return true; + } + + $current_time = current_time('timestamp'); + $start_time = strtotime($srv['announcement_start']); + + // Wenn das Startdatum in der Zukunft liegt, nicht anzeigen + if ($start_time > $current_time) { + return false; + } + + // Wenn kein Enddatum angegeben ist, nach Startdatum immer anzeigen + if (empty($srv['announcement_end'])) { + return true; + } + + $end_time = strtotime($srv['announcement_end']); + + // Prüfen, ob das Enddatum noch nicht erreicht ist + 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' => 'ℹ️' + ]; + } +} + +/* ---------------- Fetch & AJAX – 100% wie dein Original ---------------- */ add_action('wp_ajax_mcss_fetch', 'mcss_ajax_fetch'); add_action('wp_ajax_nopriv_mcss_fetch', 'mcss_ajax_fetch'); @@ -617,6 +797,7 @@ function mcss_fetch_server_with_ranks($srv) { $candidate = $body['version'] ?? $body['software'] ?? ''; if ($candidate) $result['version'] = mcss_normalize_version($candidate); } + $result['ping'] = intval($body['debug']['ping'] ?? $body['ping'] ?? 0); if (!empty($srv['show_motd']) && !empty($body['motd']['clean'])) { $motd = is_array($body['motd']['clean']) ? implode(' ', $body['motd']['clean']) : $body['motd']['clean']; $result['motd'] = $motd; @@ -624,13 +805,13 @@ function mcss_fetch_server_with_ranks($srv) { } } - // PING-MESSUNG + // PING-MESSUNG - VERWENDE UNSERE EIGENE FUNKTION $ping_port = !empty($srv['player_port']) ? $srv['player_port'] : $srv['query_port']; $ping_result = mcss_ping_server($srv['host'], $ping_port, 2); if ($ping_result !== false) { $result['ping'] = $ping_result; } else { - // Wenn Ping-Messung fehlschlägt, versuche den Ping aus der API zu verwenden + // Wenn unsere Ping-Messung fehlschlägt, versuche den Ping aus der API zu verwenden if (!empty($body['debug']['ping'])) { $result['ping'] = intval($body['debug']['ping']); } elseif (!empty($body['ping'])) { @@ -674,7 +855,7 @@ function mcss_fetch_server_with_ranks($srv) { return $result; } -/* ---------------- Shortcode ---------------- */ +/* ---------------- Shortcode – 100% DEIN ORIGINAL-DESIGN ---------------- */ add_shortcode('minecraft_status', 'mcss_server_card_shortcode'); add_shortcode('minecraft_server_detail', 'mcss_server_card_shortcode'); @@ -695,6 +876,12 @@ function mcss_server_card_shortcode($atts = []) { $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!'; + // Prüfen, ob eine Ankündigung angezeigt werden soll + $show_announcement = mcss_should_show_announcement($srv); + $announcement_text = $srv['announcement_text'] ?? ''; + $announcement_type = $srv['announcement_type'] ?? 'info'; + $announcement_style = mcss_get_announcement_style($announcement_type); + // Wenn Wartungsmodus aktiv ist, nur die Wartungsansicht anzeigen if ($maintenance_mode) { $uid = md5($srv['host'] . '|' . ($srv['player_port'] ?? '')); @@ -782,15 +969,39 @@ function mcss_server_card_shortcode($atts = []) { .mcss-status-online { animation: pulse 2s infinite; } + + /* Animation für die Ankündigung */ + @keyframes slideDown { + 0% { + transform: translateY(-100%); + opacity: 0; + } + 100% { + transform: translateY(0); + opacity: 1; + } + } + + .mcss-announcement { + animation: slideDown 0.5s ease-out; + }
+ +
+ +
+ +
+ +
Adresse kopiert!
Logo
- +