Tags
Creators
Details
Licensed MIT
Published 11 months ago
Updated 2 months ago
All versions
3.0.0
Release
PerformanceAnalyzer 3.0.04 months ago 57
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Spigot
Changes
[3.0.0] - 2026-06-17
Changed
- BREAKING: AntiCheat split into a separate plugin (BSAntiCheat). PerformanceAnalyzer is now a focused performance-monitoring & lag-diagnosis plugin. All XRay and Movement detection — including the related commands, GUI, config, permissions and language strings — has been removed from this plugin and lives on in the standalone BSAntiCheat plugin. The performance GUI detects BSAntiCheat and links to it when installed.
- Performance drop detection now runs every second on its own scheduled task, decoupled from the database logging interval. Previously
checkForDrop()was only called once perlog_interval_seconds(60s by default), so short-lived TPS/MSPT spikes were missed.
Added
- REST API is now active. The
MetricsAPIserver is started on enable (was previously implemented but never wired up). Endpoints:/api/health,/api/metrics,/api/worlds,/api/trends, with API key authentication. Disabled by default. - Auto Entity Cleaner is now active.
AutoEntityCleaneris hooked into plugin enable/disable. Disabled by default withdry_run: true. - Developer API:
PerformanceAnalyzernow implements the publicPerformanceAPIinterface —getCurrentTPS(),getCurrentMSPT(),getHeapUsagePercent(),getTotalEntityCount(),getEntityCount(World),getVersion(). - Accurate low/high drop tracking: recorded performance drops now report the actual worst TPS / highest MSPT observed during the drop window instead of the value at the moment of recording.
- Documented config keys that were previously only added silently via migration:
database.fallback_file_logging,database.fallback_log_file,gui.auto_refresh, and the fullapi.*andentity_cleaner.*sections.
Fixed
- Duplicate logging task / task leak on
/perfreload:TickSampler.setDatabase()now cancels the previously scheduled logging task before scheduling a new one. Previously every reload added another logging task, causing duplicate database writes and duplicate alert/drop checks. - Verbose console output during lag events: the per-world / per-chunk diagnostic logging in the performance drop analyzer is now gated behind debug mode, so it no longer floods the console (and adds load) while the server is already struggling.
- Throttled deep analysis: the expensive server-state/chunk-snapshot analysis now runs at most once per 30 seconds during sustained drops, preventing it from piling up chunk snapshots on the main thread.
Removed
- AntiCheat classes:
XRayDetector,MovementChecker,ViolationTracker,XRayAlertManager,MovementAlertManager,AntiCheatGUI,LuckPermsHook - AntiCheat commands:
/xrayalerts,/movealerts,/xrayores,/acwhitelist - AntiCheat permissions:
performance.anticheat.manage,performance.anticheat.bypass - All
anticheat.*config keys,performance.anticheat_enabled,discord.alert_types.anticheat, and all AntiCheat/XRay/Movement language strings (EN & DE) XRAYandMOVEMENTsilent-mode categories — onlyALLandPERFORMANCEremain;/perfsilentnow acceptsall,performance,list,reset- Dead code: unused
ConfigMigratorclass (a duplicate migration system with a phantom "prometheus" feature), legacy synchronousanalyzeChunk(),DatabaseManager.deleteAntiCheatLogs(),isPlayerSuspicious()from the public API, and empty Javadoc stubs inConstants
Config
config_versionbumped to 6 — auto-migration adds the new fallback-logging keys to existing configs (existing settings are never overwritten)
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:xcpph8Xo:Z7X73R0t"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:xcpph8Xo:Z7X73R0t"
}

