jQuery(function($){ // refresh interval provided by localized script const REFRESH = (typeof mcss_ajax_object !== 'undefined' && mcss_ajax_object.refresh_interval) ? parseInt(mcss_ajax_object.refresh_interval, 10) : 15000; const AJAX_URL = (typeof mcss_ajax_object !== 'undefined' && mcss_ajax_object.ajax_url) ? mcss_ajax_object.ajax_url : '/wp-admin/admin-ajax.php'; function formatTime(ts) { const d = new Date(ts * 1000); return d.getHours().toString().padStart(2,'0') + ':' + d.getMinutes().toString().padStart(2,'0') + ':' + d.getSeconds().toString().padStart(2,'0'); } function updateCardImmediate($card, data) { // top status $card.find('.mcss-server-top').removeClass('mcss-online mcss-offline').addClass(data.online ? 'mcss-online' : 'mcss-offline'); $card.find('.mcss-status-dot').removeClass('online offline').addClass(data.online ? 'online' : 'offline'); $card.find('.mcss-server-title').text(data.online ? 'Server Online' : 'Server Offline'); $card.find('.mcss-address').text(data.address || ''); // IMPORTANT: no leading 'v' — display normalized version as provided by backend const ver = (typeof data.version === 'string' && data.version.trim() !== '') ? data.version.trim() : 'Unbekannt'; $card.find('.mcss-version').text(ver); $card.find('.mcss-ping').text((data.ping || 0) + ' ms'); // defensive players count (data.players might be array of objects or names) const playersCount = Array.isArray(data.players) ? data.players.length : 0; $card.find('.mcss-players-count').text(playersCount + ' Spieler'); if (data.motd && data.motd.length > 0) { if ($card.find('.mcss-motd').length) { $card.find('.mcss-motd').text(data.motd); } else { $card.find('.mcss-actions').before('