▶️ ЗАБЕРИ СВОИ 8 ПОДАРКОВ 🎁 ПРИ СОЗДАНИИ СВОЕГО МАЙНКРАФТ СЕРВЕРА
Плагины/PerfomanceAnalyzer
PerfomanceAnalyzer

PerfomanceAnalyzer

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.

310
0

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 XRayDetector
  • playerOreYLevels tracking map from XRayDetector
  • xray_ylevel_high/medium/low config entries and validation
  • XRAY_YLEVEL violation 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 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

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.yml under alerts.silent_players)
    • Aliases: /ps, /silent
    • Full tab-completion support
    • Bilingual: German & English language strings
  • 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 --db option
    • Tab-completion for --db flag
  • Teleport Immunity for Movement Checks
    • New PlayerTeleportEvent listener prevents false positives from legitimate teleports (/tp, /home, ender pearls, etc.)
    • 1-second grace period after any teleport where movement checks are skipped
    • lastLocations reset to teleport destination to prevent follow-up false positives
    • Consecutive violation counters reset on teleport

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: pendingSave changed from volatile boolean to AtomicBoolean with proper atomic check-and-set operations, preventing lost config saves under concurrent requests
  • NullPointerException in PerformanceDropAnalyzer: Added null-checks for Player.getWorld() and Player.getLocation() during world unload scenarios
  • Memory Leak in AlertManager: Added periodic cleanup task (every 5 minutes) for stale lastAlertTimes entries 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_players for 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 ChunkSnapshot for thread-safe analysis
    • Parallel processing with CompletableFuture
    • 90% less main-thread load during performance drop analysis
    • Timeout protection maintained
  • 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
  • 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 InventoryCloseEvent handler 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)

PerfomanceAnalyzer 2.2.0

release6 января 2026 г.

[2.2.0] - 2026-01-05

🏗️ Major Release - Stability & Performance Update

This release focuses on security hardening, graceful degradation, performance optimizations, and critical bug fixes to ensure stable operation on production servers.

🔐 Security Hardening

SQL Injection Prevention

  • Type-Safe Database Queries
    • New TimeUnit enum for SQL time unit operations
    • Replaces dangerous string concatenation in DatabaseManager
    • Prevents SQL injection attacks via time-based queries
    • Enum values: SECOND, MINUTE, HOUR, DAY
    • Each value provides safe SQL name via getSqlNameUpper()

SSRF Protection

  • Discord Webhook URL Validation
    • Protocol validation: HTTPS-only (HTTP rejected)
    • Domain whitelist: Only discord.com and discordapp.com allowed
    • Path validation: Must start with /api/webhooks/
    • Prevents Server-Side Request Forgery attacks
    • Logs validation failures for security monitoring

Memory Leak Prevention

  • Size Limits on All Maps
    • XRayDetector.playerPlacedBlocks - Max size: 10,000 entries
    • XRayDetector.playerOreMines - NEW: Max size: 5,000 players
    • XRayDetector.playerStoneMines - NEW: Max size: 5,000 players
    • MovementChecker.moveCounter - Periodic reset at threshold
    • Automatic cleanup routines prevent unbounded growth
    • Warning logs when size limits are hit
    • Debug logging shows cleanup statistics and map sizes

💾 Graceful Degradation

FallbackLogger System

  • Automatic Database Failover
    • Queue-based async file writing (ConcurrentLinkedQueue)
    • CSV format: timestamp | type | value | description
    • Detects 3 consecutive database failures
    • Switches to file logging automatically
    • Configurable flush threshold (default: 100 entries)
    • File rotation and management
    • Fallback file path: plugins/PerformanceAnalyzer/fallback.log

Database Availability Monitoring

  • Failure Detection
    • isDatabaseAvailable() method for health checks
    • Consecutive failure counter
    • Automatic recovery detection (resets to DB logging)
    • Logs critical warnings when switching modes

Configuration

fallback_logging:
  enabled: true
  file: "plugins/PerformanceAnalyzer/fallback.log"

⚡ Performance & Reliability

AsyncConfigSaver (CRITICAL FIX)

  • Thread-Safe Config Operations
    • FIXED: Now uses Bukkit Scheduler instead of ForkJoinPool
    • CRITICAL: saveConfig() runs on main thread (Bukkit requirement)
    • Previously used CompletableFuture.runAsync() which caused ConcurrentModificationException
    • Uses CompletableFuture for async pattern
    • Atomic boolean flags prevent concurrent saves
    • saveAsync() schedules on main thread via runTask()
    • saveSyncOnShutdown() ensures data persistence on server stop
    • Error handling with exception logging and stack traces
    • Prevents thread-safety violations and data corruption

Performance Optimizations

  • Event Sampling - Movement checks reduced by ~90%

    • Only every 10th PlayerMoveEvent processed
    • OR significant distance (>2 blocks) always checked
    • Counter reset at 1000 to prevent overflow
    • Minimal detection accuracy loss
  • Database Indexing

    • Indexes on timestamp column for time-range queries
    • Indexes on type column for metric filtering
    • Significantly faster query performance
    • Auto-created during database initialization

Constants Class

  • Centralized Configuration
    • 255 lines of well-organized constants
    • Categories: Database, Discord, Movement, XRay, Performance, Vehicle Speeds
    • No more magic numbers scattered throughout codebase
    • Easy to tune and maintain
    • All values documented with comments

🏗️ Architecture Improvements

CommandRegistry System

  • Modular Command Registration
    • Replaces 112-line monster method in PerformanceAnalyzer
    • Separate methods for each category:
      • registerPerformanceCommands() - /perfstatus, /perfhistory, /perfreload
      • registerAnalysisCommands() - /worldstats, /entitystats, /chunkstats, /perfdrops
      • registerGUICommands() - /perfgui
      • registerAntiCheatCommands() - /acwhitelist, /xrayalerts, /movealerts, /xrayores
    • Easy to extend with new commands
    • Clean separation of concerns
    • AntiCheat commands dynamically registered when module enabled

ConfigMigrator Class

  • Extracted Migration Logic
    • Separate class for config version upgrades
    • Version-by-version migration (v0 → v1 → v2 → ... → v5)
    • Only runs when config_version < Constants.CONFIG_VERSION
    • Returns boolean if changes were made
    • Cleaner PluginConfig class (separation of concerns)
    • Easy to add new migrations

Public API

  • PerformanceAPI Interface
    • double getCurrentTPS() - Get current server TPS
    • double getCurrentMSPT() - Get current MSPT
    • boolean isPlayerSuspicious(UUID playerUUID) - Check if player flagged
    • Enables third-party plugin integration
    • Future: Additional methods for detailed performance data

🐛 Critical Bug Fixes

DatabaseManager Exception Handling

  • FIXED: Added missing stack traces to SQL exceptions
  • IMPROVED: Now logs failed SQL statements for debugging
  • ADDED: JavaDoc documentation for run() method
  • Better error messages for database initialization failures
  • Prevents silent failures during schema creation

XRayDetector Map Size Enforcement

  • FIXED: Unbounded memory growth in playerOreMines and playerStoneMines
  • ADDED: Hard limit of 5,000 player entries per map
  • IMPROVED: Cleanup task now removes empty playerStoneMines entries
  • Warning logs when size limit is exceeded
  • Debug output shows current map sizes

Config.yml Language Consistency

  • FIXED: All comments now in English (was mixed German/English)
  • Consistent with multi-language support design
  • User-facing messages still use language files (en.yml/de.yml)
  • Better for international plugin distribution

🔧 Code Quality Improvements

  • Consistent Error Handling - All exceptions logged with stack traces
  • English Logging - All console logs in English (user-facing messages use i18n)
  • Null Safety - Extensive null checks before operations
  • Improved Documentation - JavaDoc added to critical methods
  • Code Comments - All config comments translated to English

📦 New Files Created

  • util/Constants.java - Centralized constants
  • commands/CommandRegistry.java - Modular command registration
  • config/ConfigMigrator.java - Config migration logic
  • config/AsyncConfigSaver.java - Async config saves
  • db/FallbackLogger.java - Fallback file logging
  • db/TimeUnit.java - SQL-safe time units
  • api/PerformanceAPI.java - Public API interface

🔧 Modified Files

  • PerformanceAnalyzer.java - CommandRegistry integration, version update to 2.2.0
  • DatabaseManager.java - CRITICAL FIX: Stack traces, SQL logging, FallbackLogger, TimeUnit enum, failure detection
  • AsyncConfigSaver.java - CRITICAL FIX: Thread-safety with Bukkit Scheduler
  • PluginConfig.java - AsyncConfigSaver, ConfigMigrator, fallback config methods
  • DiscordWebhook.java - URL validation, SSRF protection
  • MovementChecker.java - Constants usage, event sampling
  • XRayDetector.java - CRITICAL FIX: Size limits (5000 players), improved cleanup, memory leak prevention
  • Constants.java - NEW: XRAY_MAX_PLAYER_ENTRIES constant
  • config.yml - FIXED: All comments translated to English
  • pom.xml - Version 2.2.0

⚠️ Breaking Changes

None - This release is fully backward compatible with v2.1.0.

  • All new features have sensible defaults
  • Existing configs auto-migrate
  • No database schema changes
  • No API changes to existing methods

📊 Configuration Changes

New Config Sections:

# Graceful Degradation 
fallback_logging:
  enabled: true
  file: "plugins/PerformanceAnalyzer/fallback.log"

Auto-Migration:

  • Config auto-migrates from v5 to v5 (no version bump needed)
  • New fallback_logging section added automatically
  • Existing settings preserved

🔄 Migration Guide (from v2.1.0)

  1. Backup - Backup your plugins/PerformanceAnalyzer/ folder
  2. Stop Server - Stop your server
  3. Replace JAR - Replace old JAR with PerformanceAnalyzer-2.2.0.jar
  4. Start Server - Start your server
  5. Auto-Migration - Config auto-updates (check console for "Config migrated")
  6. Verify - Run /perfstatus to ensure plugin loaded correctly

Optional Post-Migration:

  • Review fallback logging settings in config.yml
  • Check fallback.log file (created only on database failure)

📈 Performance Impact

  • CPU Usage: Reduced ~90% for movement checks (event sampling)
  • Memory Usage: Lower (cleanup routines, size limits)
  • Disk I/O: Reduced (async config saves, fallback only on failure)
  • Database Load: Reduced (batching, indexing)
  • Startup Time: Unchanged

🐛 Known Issues

None - All known issues from v2.1.0 have been resolved, including:

  • ✅ AsyncConfigSaver thread-safety violation (ConcurrentModificationException)
  • ✅ DatabaseManager silent failures (missing stack traces)
  • ✅ XRayDetector unbounded memory growth (5000+ players)
  • ✅ Config.yml mixed language comments (now all English)

Совместимость

Minecraft: Java Edition

1.21.x

Платформы

Поддерживаемые окружения

Сервер

Детали

Лицензия:MIT
Опубликован:5 месяцев назад
Обновлён:1 неделю назад
Главная