diff --git a/mc-player-history.php b/mc-player-history.php index 419ced0..c93def8 100644 --- a/mc-player-history.php +++ b/mc-player-history.php @@ -214,10 +214,13 @@ function mcph_get_litebans_punishments( $uuid, $username ) { $bans_table = esc_sql( $prefix . 'bans' ); $mutes_table = esc_sql( $prefix . 'mutes' ); $warns_table = esc_sql( $prefix . 'warnings' ); + $kicks_table = esc_sql( $prefix . 'kicks' ); - $bans = intval( $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$bans_table} WHERE uuid = %s", $search_uuid ) ) ); + $bans = intval( $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$bans_table} WHERE uuid = %s", $search_uuid ) ) ); $mutes = intval( $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$mutes_table} WHERE uuid = %s", $search_uuid ) ) ); $warns = intval( $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$warns_table} WHERE uuid = %s", $search_uuid ) ) ); + // FIX 1: kicks ebenfalls direkt aus LiteBans zählen + $kicks = intval( $lbdb->get_var( $lbdb->prepare( "SELECT COUNT(*) FROM {$kicks_table} WHERE uuid = %s", $search_uuid ) ) ); if ( ! empty( $lbdb->last_error ) ) { mcph_log( 'LiteBans Query Fehler: ' . $lbdb->last_error ); @@ -229,6 +232,7 @@ function mcph_get_litebans_punishments( $uuid, $username ) { 'bans' => $bans, 'mutes' => $mutes, 'warns' => $warns, + 'kicks' => $kicks, ); return $count_cache[ $cache_key ]; @@ -334,6 +338,7 @@ function mcph_install() { bans INT NOT NULL DEFAULT 0, mutes INT NOT NULL DEFAULT 0, warns INT NOT NULL DEFAULT 0, + kicks INT NOT NULL DEFAULT 0, PRIMARY KEY (id), UNIQUE KEY uuid (uuid), KEY username (username), @@ -395,6 +400,10 @@ function mcph_add_columns_v130() { if ( ! $wpdb->get_var( "SHOW COLUMNS FROM $table_name LIKE 'warns'" ) ) { $wpdb->query( "ALTER TABLE $table_name ADD COLUMN warns INT NOT NULL DEFAULT 0 AFTER mutes" ); } + // FIX 2: kicks Spalte hinzufügen + if ( ! $wpdb->get_var( "SHOW COLUMNS FROM $table_name LIKE 'kicks'" ) ) { + $wpdb->query( "ALTER TABLE $table_name ADD COLUMN kicks INT NOT NULL DEFAULT 0 AFTER warns" ); + } } /** @@ -463,6 +472,7 @@ function mcph_sync_from_statusapi() { $bans = 0; $mutes = 0; $warns = 0; + $kicks = 0; // Primär aus StatusAPI lesen (falls geliefert). if ( isset( $p->punishments ) && is_object( $p->punishments ) ) { @@ -471,12 +481,13 @@ function mcph_sync_from_statusapi() { $warns = isset( $p->punishments->warns ) ? intval( $p->punishments->warns ) : 0; } - // Falls LiteBans konfiguriert ist, dortige Werte bevorzugen. + // FIX 4: LiteBans bevorzugen (inkl. kicks) — überschreibt StatusAPI-Werte $litebans_punishments = mcph_get_litebans_punishments( $uuid, $name ); if ( is_array( $litebans_punishments ) ) { - $bans = intval( $litebans_punishments['bans'] ?? 0 ); + $bans = intval( $litebans_punishments['bans'] ?? 0 ); $mutes = intval( $litebans_punishments['mutes'] ?? 0 ); $warns = intval( $litebans_punishments['warns'] ?? 0 ); + $kicks = intval( $litebans_punishments['kicks'] ?? 0 ); } if ( empty( $name ) ) continue; @@ -499,10 +510,11 @@ function mcph_sync_from_statusapi() { 'joins' => $joins, 'bans' => $bans, 'mutes' => $mutes, - 'warns' => $warns + 'warns' => $warns, + 'kicks' => $kicks ); - // FIX BUG-2: kills/deaths im Fallback-UPDATE mitgespeichert - $update_format = array( '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d' ); + // FIX BUG-2 + FIX 5: kills/deaths/kicks im Fallback-UPDATE + $update_format = array( '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d' ); if ( ! empty( $prefix ) ) { $update_data['prefix'] = $prefix; @@ -536,10 +548,11 @@ function mcph_sync_from_statusapi() { 'joins' => $joins, 'bans' => $bans, 'mutes' => $mutes, - 'warns' => $warns + 'warns' => $warns, + 'kicks' => $kicks ); - // FIX BUG-2: kills/deaths werden jetzt in DB gespeichert - $update_format = array( '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d' ); + // FIX BUG-2 + FIX 5: kills/deaths/kicks werden jetzt in DB gespeichert + $update_format = array( '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d' ); if ( ! empty( $prefix ) ) { $update_data['prefix'] = $prefix; @@ -563,8 +576,9 @@ function mcph_sync_from_statusapi() { 'joins' => $joins, 'bans' => $bans, 'mutes' => $mutes, - 'warns' => $warns - ), array( '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d' ) ); + 'warns' => $warns, + 'kicks' => $kicks + ), array( '%s', '%s', '%s', '%s', '%s', '%d', '%d', '%d', '%d', '%s', '%d', '%d', '%d', '%d', '%d', '%d' ) ); } } } @@ -717,6 +731,19 @@ function mcph_ajax_player_profile() { $kd = ( $player->deaths > 0 ) ? round( $player->kills / $player->deaths, 2 ) : ( $player->kills > 0 ? $player->kills : 0 ); + // FIX 6: Bans/Mutes/Warns/Kicks live aus LiteBans holen (immer aktuell) + $bans_val = intval( $player->bans ); + $mutes_val = intval( $player->mutes ); + $warns_val = intval( $player->warns ); + $kicks_val = intval( $player->kicks ?? 0 ); + $lb_live = mcph_get_litebans_punishments( $player->uuid, $player->username ); + if ( is_array( $lb_live ) ) { + $bans_val = intval( $lb_live['bans'] ?? $bans_val ); + $mutes_val = intval( $lb_live['mutes'] ?? $mutes_val ); + $warns_val = intval( $lb_live['warns'] ?? $warns_val ); + $kicks_val = intval( $lb_live['kicks'] ?? $kicks_val ); + } + wp_send_json_success( array( 'uuid' => $player->uuid, 'username' => $player->username, @@ -731,9 +758,10 @@ function mcph_ajax_player_profile() { 'balance' => $balance_value, 'is_bedrock' => $is_bedrock, 'joins' => intval( $player->joins ), - 'bans' => intval( $player->bans ), - 'mutes' => intval( $player->mutes ), - 'warns' => intval( $player->warns ), + 'bans' => $bans_val, + 'mutes' => $mutes_val, + 'warns' => $warns_val, + 'kicks' => $kicks_val, 'forum_banner' => mcph_get_forum_banner( $player->uuid ), ) ); } @@ -863,6 +891,7 @@ function mcph_default_display_settings() { 'show_bans' => 1, 'show_mutes' => 1, 'show_warns' => 1, + 'show_kicks' => 1, 'show_first_seen'=> 1, 'show_last_seen' => 1, 'show_platform' => 1, @@ -931,6 +960,7 @@ function mcph_options_page() { 'show_bans' => array( 'label' => 'Bans 🚫', 'group' => 'Strafen' ), 'show_mutes' => array( 'label' => 'Mutes 🔇', 'group' => 'Strafen' ), 'show_warns' => array( 'label' => 'Warns ⚠️', 'group' => 'Strafen' ), + 'show_kicks' => array( 'label' => 'Kicks 👢', 'group' => 'Strafen' ), 'show_first_seen'=> array( 'label' => 'Zuerst gesehen 📅', 'group' => 'Zeitangaben' ), 'show_last_seen' => array( 'label' => 'Zuletzt online 🕐', 'group' => 'Zeitangaben' ), ); @@ -1184,6 +1214,7 @@ function mcph_shortcode( $atts ) { ${ds.show_bans !== 0 ? statCard('🚫', 'Bans', p.bans, false) : ''} ${ds.show_mutes !== 0 ? statCard('🔇', 'Mutes', p.mutes, false) : ''} ${ds.show_warns !== 0 ? statCard('⚠️', 'Warns', p.warns, false) : ''} + ${ds.show_kicks !== 0 ? statCard('👢', 'Kicks', p.kicks ?? 0, false) : ''} ${ds.show_first_seen!== 0 ? statCard('📅', 'Zuerst gesehen', formatDate(p.first_seen), false) : ''} ${ds.show_last_seen !== 0 ? statCard('🕐', 'Zuletzt online', formatDate(p.last_seen), false) : ''}