promotional bannermobile promotional banner

PerformanceAnalyzer

PerformanceAnalyzer gives you clear visibility into how your server is performing live and over time. With database-backed statistics, an in-game GUI, optional Discord alerts, and a helper-level AntiCheat/X-Ray module, it’s a handy toolkit for anyone.

File Details

performance-analyzer-2.3.2.jar

  • R
  • Apr 11, 2026
  • 13.25 MB
  • 7
  • 1.21.11+11

File Name

performance-analyzer-2.3.2.jar

Supported Versions

  • 1.21.11
  • 1.21.10
  • 1.21.9
  • 1.21.8
  • 1.21.7
  • 1.21.6
  • 1.21.5
  • 1.21.4
  • 1.21.3
  • 1.21.2
  • 1.21.1
  • 1.21

[2.3.2] - 2026-04-11

Fixed

  • Race Condition in AlertManager: Cooldown check now uses atomic compareAndSet() instead of separate get()/set(), preventing duplicate alerts under concurrent access
  • Race Condition in TickSampler: Tick sampling now uses idx.getAndUpdate() for atomic index read-modify-write, preventing data corruption in the nanos array
  • Connection Pool Leak in DatabaseManager: shutdown() now uses try-finally to ensure HikariDataSource.close() is always called, even if flushBatchSafe() throws an exception
  • NullPointerException in GUIs: Added null-checks for getItemMeta() in all GUI classes (PerformanceGUI, AntiCheatGUI, LagAnalysisGUI, PerformanceDropsGUI) — follows the safe pattern already used in ConfigGUI
  • Thread-Safety in ViolationTracker: resetViolations(UUID, ViolationType) now uses computeIfPresent() to prevent race condition where the PlayerViolations object could be removed between get() and counts.remove()
  • MovementChecker Violation Reset Too Aggressive: Consecutive violation counters now only reset when speed is significantly below threshold (70%), preventing a single valid move from immediately washing out violations
  • XRay Y-Level Thresholds Too Aggressive: Default thresholds raised from 75%/65%/55% to 85%/75%/65% to reduce false positives from legitimate caving
  • UpdateChecker Missing Field Validation: Now checks for version_number field existence in Modrinth API response before accessing it
  • Inconsistent Activity Weights: PlayerActivityTracker.getTotalActivity() now uses centralized Constants.ACTIVITY_WEIGHT_* values instead of hardcoded numbers

Added

  • Configurable XRay Y-Level Thresholds (config.yml)
    • anticheat.xray_ylevel_high (default: 0.85) — percentage for maximum suspicion
    • anticheat.xray_ylevel_medium (default: 0.75) — percentage for moderate suspicion
    • anticheat.xray_ylevel_low (default: 0.65) — percentage for low suspicion
    • Config validation ensures values are 0.0-1.0 and properly ordered (low < medium < high)
    • Auto-migration adds defaults for existing configs

Changed

  • XRayDetector.analyzeYLevelPattern() reads thresholds from config instead of using hardcoded values