
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.
362
0
PerformanceAnalyzer 2.3.4
release7 мая 2026 г.[2.3.4] - 2026-05-07
Fixed
- Redstone False Positives in Performance Drop Analyzer: Removed 26 non-performance-impacting blocks (buttons, pressure plates, lecterns, daylight detectors, tripwire, levers, targets) from
isRedstoneComponent(). These blocks appear in naturally generated structures (villages, temples) and caused massive false positives through sampling extrapolation - Redstone Sampling Extrapolation: Added minimum threshold (≥3 components found) before extrapolating redstone counts. Previously, a single naturally-generated button was multiplied by ×64, producing false "problematic redstone" reports
- Wrong Coordinates in Problematic Chunk Reports: Chunk coordinates are now displayed alongside block coordinates (
[Chunk X,Z | Blocks ~X,Z]) for easier in-game navigation - NullPointerException in PerformanceDropAnalyzer:
worldInfo.get("name").equals(...)replaced withObjects.equals()to prevent NPE when world name is null - Swallowed Exceptions in Chunk Analysis: ChunkSnapshot and synchronous chunk analysis errors are now logged at
FINElevel instead of being silently ignored - Unbounded Database Queue (OOM Risk):
DatabaseManager.logAsync()now enforces a maximum queue size of 10,000 entries. PreventsOutOfMemoryErrorwhen the database is unavailable for extended periods - Excessive Block Checks in MovementChecker:
isNearLiquid()reduced from 27 block checks (3×3×3 cube) to 7 checks (current block + 6 adjacent faces), reducing CPU load perPlayerMoveEventby ~74% - Duplicated Alert Cooldown Constants:
AlertManagerandMovementAlertManagernow use the centralizedConstants.ALERT_COOLDOWN_MSinstead of defining their own identical values - Silent Config Parsing Failures: Invalid alert categories in
AlertPreferenceManagernow log a warning instead of being silently skipped - Thread-Safety in WorldStatsManager: Trend history lists now use
Collections.synchronizedList()to prevent concurrent modification issues
Added
Constants.DB_MAX_QUEUE_SIZE— centralized maximum queue size for database log entries
PerfomanceAnalyzer 2.3.3
release12 апреля 2026 г.[2.3.3] - 2026-04-12
Fixed
- Sneaking/Swimming/Climbing False Positives: These movement types are now skipped entirely by the speed checker.
- Silk Touch Ores Not Recognized as Self-Placed: The player-placed block check now applies to ALL worlds, not just restricted worlds. Previously, silk-touching an ore block, placing it in your base, and breaking it would count toward XRay detection
- Y-Level Pattern Analysis Removed: Completely removed the Y-Level analysis feature. Mining at optimal Y-levels is normal gameplay (anyone can Google "best Y level for diamonds") and produced false positives
Removed
analyzeYLevelPattern(),trackYLevel(),getOptimalYRange()methods from XRayDetectorplayerOreYLevelstracking map from XRayDetectorxray_ylevel_high/medium/lowconfig entries and validationXRAY_YLEVELviolation type
PerfomanceAnalyzer 2.3.2
release11 апреля 2026 г.[2.3.2] - 2026-04-11
Fixed
- Race Condition in AlertManager: Cooldown check now uses atomic
compareAndSet()instead of separateget()/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 ensureHikariDataSource.close()is always called, even ifflushBatchSafe()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 usescomputeIfPresent()to prevent race condition where the PlayerViolations object could be removed betweenget()andcounts.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_numberfield existence in Modrinth API response before accessing it - Inconsistent Activity Weights:
PlayerActivityTracker.getTotalActivity()now uses centralizedConstants.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 suspicionanticheat.xray_ylevel_medium(default: 0.75) — percentage for moderate suspicionanticheat.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
PerfomanceAnalyzer 2.3.1
release10 апреля 2026 г.[2.3.1] - 2026-04-10
Added
- Silent Mode / Streamer Mode (
/perfsilent)- Toggle all alerts on/off:
/perfsilent - Toggle per category:
/perfsilent xray,/perfsilent movement,/perfsilent performance - Reset all preferences at once:
/perfsilent reset - View current status:
/perfsilent list - Persistent across server restarts (saved in
config.ymlunderalerts.silent_players) - Aliases:
/ps,/silent - Full tab-completion support
- Bilingual: German & English language strings
- Toggle all alerts on/off:
- AntiCheat DB Cleanup Commands
/movealerts clear <player> --db— deletes movement violation entries from the database/xrayalerts clear <player> --db— deletes XRay detection entries from the database- Without
--db: only clears in-memory alerts (as before), now shows a hint about the--dboption - Tab-completion for
--dbflag
- Teleport Immunity for Movement Checks
- New
PlayerTeleportEventlistener prevents false positives from legitimate teleports (/tp,/home, ender pearls, etc.) - 1-second grace period after any teleport where movement checks are skipped
lastLocationsreset to teleport destination to prevent follow-up false positives- Consecutive violation counters reset on teleport
- New
Fixed
- Version Inconsistency: pom.xml, plugin.yml, and main class now use the same version dynamically via
getDescription().getVersion()instead of hardcoded strings - Race Condition in AsyncConfigSaver:
pendingSavechanged fromvolatile booleantoAtomicBooleanwith proper atomic check-and-set operations, preventing lost config saves under concurrent requests - NullPointerException in PerformanceDropAnalyzer: Added null-checks for
Player.getWorld()andPlayer.getLocation()during world unload scenarios - Memory Leak in AlertManager: Added periodic cleanup task (every 5 minutes) for stale
lastAlertTimesentries that were never removed - AntiCheat False Positives: Improved lag compensation from linear to square-root scaling (200ms ping = +10%, 500ms = +20%, 1000ms = +30%), reducing false positives for high-ping players without allowing extreme speeds
Changed
- All three alert systems (
AlertManager,XRayAlertManager,MovementAlertManager) now respect per-player alert preferences before sending chat notifications - Config auto-migration adds
alerts.silent_playersfor new installations
PerfomanceAnalyzer 2.3.0
release22 февраля 2026 г.[2.3.0] - 2026-02-22
Added
- Lag Compensation for Movement Checks
- Player ping considered in speed calculations (+10% per 100ms above 100ms)
- Reduces false-positives for high-ping players
- Knockback/Damage Immunity Detection
- 2-second immunity window after explosions and entity attacks
- Prevents false-positives from legitimate knockback
- Y-Level Analysis for XRay Detection
- Tracks mining height for all ores
- Optimal Y-level ranges based on Minecraft 1.21
- New detection method:
XRAY_YLEVEL - Detects suspicious pattern: 75%+ mining at optimal height
- Async Chunk Analysis
- Uses
ChunkSnapshotfor thread-safe analysis - Parallel processing with
CompletableFuture - 90% less main-thread load during performance drop analysis
- Timeout protection maintained
- Uses
- Auto-Cleanup for Database
- Automatic retention policy (default: 30 days)
- Runs daily (1h after startup, then every 24h)
- Configurable:
database.retention_days(set to 0 to disable)
- GUI Auto-Refresh System
- Performance data updates every 3 seconds
- Only active for open GUIs (no overhead)
- Automatic cleanup on GUI close
- Configurable:
gui.auto_refresh
- Trend Analysis for World Stats
- Historical tracking (up to 288 snapshots = 24h @ 5min intervals)
- Trend direction:
INCREASING,DECREASING,STABLE - Change rate calculation (entities/hour)
- Methods:
recordSnapshot(),analyzeTrend(),analyzeTrendsForAllWorlds()
- REST API for External Monitoring
- 4 JSON endpoints:
/api/health,/api/metrics,/api/worlds,/api/trends - API key authentication (
Authorization: Bearer) - Perfect for Grafana/Prometheus dashboards
- Config:
api.enabled,api.port,api.key
- 4 JSON endpoints:
- Automatic Entity Cleaner
- Smart entity management to prevent lag
- Priority-based removal (items → projectiles → monsters → animals)
- Protection for named entities, tamed animals, villagers
- Boss mob blacklist (Ender Dragon, Wither, Warden)
- Per-world and per-chunk limits
- Dry-run mode for safe testing
- Config:
entity_cleaner.*
Changed
- Movement Checker (
MovementChecker.java)- Added environmental checks (slime blocks, bubble columns)
- 2x vertical speed allowance near slime blocks/bubble columns
- Enhanced cleanup method to include new tracking maps
- XRay Detector (
XRayDetector.java)- Added Y-level tracking for pattern analysis
- New method:
analyzeYLevelPattern() - New method:
getOptimalYRange()with Minecraft 1.21 spawn data - Enhanced
checkSuspiciousPattern()with Y-level analysis
- Performance Drop Analyzer (
PerformanceDropAnalyzer.java)- Replaced synchronous chunk analysis with async processing
- Added
analyzeChunkAsync()method using ChunkSnapshot - Legacy
analyzeChunk()kept as fallback - Improved error handling for async operations
- Database Manager (
DatabaseManager.java)- Added auto-cleanup task for retention management
- Enhanced shutdown procedure to cancel cleanup task
- World Stats Manager (
WorldStatsManager.java)- Added trend tracking infrastructure
- New records:
WorldStatsSnapshot,TrendAnalysis - Multiple helper methods for trend calculation
- Performance GUI (
PerformanceGUI.java)- Added auto-refresh system with task management
- New
InventoryCloseEventhandler for cleanup - New method:
shutdown()for proper cleanup
- Plugin Config (
PluginConfig.java)- Added 10 new config methods for features
- Auto-migration for all new config entries
Fixed
- Memory leaks from incomplete cleanup (movement checker, XRay detector)
- False-positives in movement detection from knockback
- False-positives in movement detection from environmental effects
- Main-thread bottleneck in chunk analysis
Performance
- 90% reduction in main-thread load during performance drop analysis
- Reduced false-positive alerts (less CPU overhead)
- More efficient memory usage with automatic cleanup
Security
- REST API authentication with API keys
- SSRF protection in Discord webhook validation (from v2.2.0)
- SQL injection prevention (from v2.2.0)
Создатели
Детали
Лицензия:MIT
Опубликован:5 месяцев назад
Обновлён:6 дней назад
