fabric: added hopper-limiter (throttle hopper transfer rate under load), explosion-optimizer (cap active TNT entities per dimension), and mob-griefing-optimizer (toggle mob griefing gamerule during lag). fabric now has 23 performance modules.
fabric: added item-merge (merges nearby identical ground item stacks), item-frame-optimizer (caps item frames per world, removes distant ones), and auto-backup (scheduled world backups with local/ftp backends). fabric now has 20 performance modules.
fabric now has 17 performance modules (entity limiter, mob clear, item clear, mob ai throttler, entity culling, spawn limiter, breeding throttler, projectile limiter, villager optimizer, ram optimizer, cpu stabilizer, lag actions, auto restart, dynamic sim distance, tick profiler, anti lag machine, performance monitor). 3 of those are fabric-exclusive (dynamic sim distance, tick profiler, anti lag machine). all 100% reflective, no loom required.
quality pass xx — placeholderapi.yml now documents all 13 previously undocumented placeholders: tps_1m, next_mobclear, items_tracked, modules_enabled, modules_total, integrations_active, integrations_total, lag_throttle_active, packets_throttled, random_tick_speed, disk_io_deferred, holograms. also added a note for the two dynamic placeholder patterns (module_<id> and integration_<id>) which were working but completely invisible in the docs.
quality pass xix — webhooks.yml now documents all 10 previously undocumented events (disk_io_throttled, disk_io_resumed, ram_gc_threshold, ram_alert, ram_gc_scheduled, cpu_high, plugin_auto_disabled, server_hang, mythicmobs_boss_spawn, mythicmobs_boss_death) with their placeholder variables. also added all 10 as example entries in the main-discord endpoint block so you can just flip enabled: true without guessing the field names.
v1.1.57 — Quality Pass XVIII
Bug Fixes
- AutoConfig: The manual restart countdown (
repeatGlobaltask) was never cancelled before callingBukkit.getServer().shutdown(). The task continued ticking through the shutdown sequence. Now theTaskHandleis stored in a final array ref and cancelled beforeshutdown()is dispatched. - AutoConfig:
backupDir.mkdirs()return value was ignored — a silently-failed directory creation produced a confusingFileNotFoundExceptionon the next line. Now logs a clear[AutoConfig] Could not create backup directoryerror and returnsnullearly so the caller skips the config apply.
New Features
- Disk I/O Throttler: Now fires two webhook events that admins can subscribe to in
webhooks.yml:disk_io_throttled— fires when the IOPS budget is exceeded and auto-save is suppressed. Includessaves_per_second,budget, andusage_percentplaceholders.disk_io_resumed— fires when I/O pressure eases and auto-save is restored. Includessaves_per_secondandbudgetplaceholders.
v1.1.56 — Quality Pass XVII
Bug Fixes
- Webhooks:
fire("server_stop", ...)inonDisable()is now wrapped in a try-catch soqueue.shutdown()(the 5-second drain giving webhooks time to deliver) always runs even if the payload build throws.
Improvements
- Performance Display: Now declares a soft
requires("monitor")dependency so a warning appears at startup if the monitor module is off — holograms fall back to?for all stats without it.
New PlaceholderAPI Placeholders
%performancex_tps_1m%: Explicit 1-minute TPS alias matching the{tps_1m}hologram placeholder name for consistency.%performancex_holograms%: Number of currently placed performance-display holograms (from theperf-displaymodule).%performancex_disk_io_deferred%:true/false— whether the Disk I/O Throttler is currently deferring writes due to IOPS budget exhaustion.
v1.1.55 — Performance Display Holograms
New Features
- Performance Display (
perf-display): New module — placeable, live-updating performance holograms for server admins.- Place with
/px display place [name], remove with/px display remove <name>, list with/px display list. - Shows TPS, MSPT, RAM usage, player count, entity count, and chunk count from the live monitor snapshot.
- Color-coded TPS and MSPT (green/yellow/red) via MiniMessage
{tps_color}and{mspt_color}placeholders. - Uses a single TextDisplay entity on 1.19.4+ (native multi-line); one ArmorStand per line on older versions.
- Updates every second by default — configurable via
update_interval_ticks. - Hologram positions are persisted in
perf-display.ymland respawn automatically on reload and restart. - Folia-compatible: entity spawning and updates dispatched on the correct region thread.
- Auto-respawns holograms when their chunk reloads via
ChunkLoadEvent.
- Place with
v1.1.54 — Quality Pass XVI
Improvements
- 67 Integrations: All remaining integration files with raw unvalidated numeric config reads now use
ConfigValidator— invalid values warn and fall back to safe defaults instead of silently misbehaving. - AbstractIntegration:
getCacheTtlMs()now validates the rawgetLongresult — values ≤ 0 fall back to 5000ms with a warning instead of returning zero or negative cache TTLs. - GriefPrevention:
claim_check_radiuswas read with a rawgetLongand no validation; now usesConfigValidatorwith a safe fallback.
v1.1.53 — Integration Config Validation
Config Validation
- Lands:
claim_cache_ttl_msnow validated — zero/negative logs a warning and falls back to 5000ms instead of silently clamping - Towny: same fix for
claim_cache_ttl_ms - Residence: same fix for
claim_cache_ttl_ms - GriefDefender: same fix for
claim_cache_ttl_ms - ASkyBlock:
island_cache_ttl_msnow validated — zero/negative logs a warning and falls back to 5000ms - IridiumSkyblock: same fix for
island_cache_ttl_ms - PlotSquared:
plot_cache_ttl_msnow validated — zero/negative logs a warning and falls back to 5000ms - ProtectionStones:
region_cache_ttl_msnow validated — zero/negative logs a warning and falls back to 5000ms - Veinminer:
context_ttl_msanddetection_radiusnow validated — zero/negative logs a warning and uses defaults - xPickup:
check_radiusnow validated — zero/negative logs a warning and falls back to 8 - AdvancedEnchantments:
min_level_to_protectnow validated — zero/negative logs a warning and falls back to 1
v1.1.52 — Quality Pass XIV
Config Validation
- Auto Updater:
check_interval_hours,timeout.connect_ms, andtimeout.read_msnow use ConfigValidator; removed a silentMath.maxclamp that suppressed the warning when the interval was set too low. - Benchmark:
cpu-test-seconds,ram-test-mb,disk-test-mb,network-test-bytes, andnetwork-timeout-msnow use ConfigValidator — zero values no longer produce misleading benchmark scores or cause immediate HTTP timeouts. - Block Logger:
max-query-results,max-radius,write-batch-size, andwrite-interval-secondsnow use ConfigValidator — zero values no longer silently empty all query results or spin the flush task every tick.
v1.1.51 — Quality Pass XIII
Config Validation
- Redstone Limiter:
lag_aware.tps_thresholdnow uses ConfigValidator — it was the only value in the method skipped by the existing validator instance. - Entity Limiter:
lag_aware.tps_thresholdandlag_aware.cap_multipliernow use ConfigValidator; removed a silent clamp that replaced out-of-range multipliers with no warning. - Log Shipping:
interval_seconds,max_buffered_warnings,connect_timeout_ms, andread_timeout_msnow use ConfigValidator; removed four silentMath.maxclamps. - View Distance Adjuster:
check_interval_seconds,default_view_distance, anddefault_simulation_distancenow use ConfigValidator; removed three silentMath.maxclamps.
v1.1.50 — Quality Pass XII
Config Validation
- Hopper Limiter: Per-world
transfer_interval_ticksoverrides now validated — a zero value no longer silently disables hopper throttling for that world. - Mob Clear:
sweep_interval_secondsanddefaults.here_radiusnow use ConfigValidator; removed two silentMath.maxclamps with no warning log. - Auto Backup:
save-wait-seconds,compression-level(clamped to 0–9),retention,notifications.watch-interval-seconds,restart-safety.max-delay-seconds, andrestart-safety.run-on-start-delay-secondsnow validated — zero values no longer risk data corruption or log spam. SFTP and FTPportvalues are now validated to the 1–65535 range. - Auto Config:
manual.ram-gb,manual.cpu-cores, andrestart.countdown-secondsnow use ConfigValidator — zero values no longer silently break hardware-tier detection or fire an instant restart with no warning.
v1.1.49 — Quality Pass XI
Bug Fixes
- Geyser Support: Fixed a UUID memory leak where
explosionCountsentries were never removed on player quit, causing permanent accumulation for every Bedrock player who triggered explosion protection.
Config Validation
- Packet Limiter:
packets_per_second,window_ms, andwarn_cooldown_msnow use ConfigValidator — zero values no longer silently kick every player or flood the log. - Geyser Support:
entity_cap,view_distance,simulation_distance,explosion_protection.radius,explosion_protection.max_per_second,explosion_protection.primed_tnt_cap, andfirework_suppression.radiusnow use ConfigValidator — zero/negative values no longer silently break Bedrock entity visibility or distance overrides. - Leaf Decay Optimizer:
max_per_chunk_per_tick,lag_aware.tps_threshold, andlag_aware.max_per_chunk_per_ticknow use ConfigValidator; removed two silent manual clamps. - Mob Griefing Optimizer:
lag_aware.tps_thresholdnow uses ConfigValidator — a value of 0 or less no longer permanently activates lag mode. - Sleep Manager:
percent_requirednow usesrangeInt(1, 100)andflat_requiredusesMath.max(0, ...)— replaced three silent manual clamps with logged validation.
v1.1.48 — Quality Pass X
Config Validation
- Entity Culling: All 6 numeric config values now validated — zero sweep interval, falling block age, or arrow age would cull entities instantly; zero player radius disabled idle vehicle detection entirely.
- Item Frame Optimizer:
sweep_interval_ticks, both visibility radii, andlag_aware.tps_thresholdnow validated — zero radii meant no frames were ever unfrozen; removed silent manual clamps. - Spawn Tick Optimizer:
check_interval_ticksand all per-tier values (tps_below, four multipliers) now validated — zero multipliers silently eliminated spawn tick reduction; negative TPS thresholds never matched. - Async Chunk Prefetch:
max_prefetch_per_player_per_second,prediction_distance_chunks, andlag_aware.tps_thresholdnow validated — zero values disabled prefetching entirely or permanently suppressed it during lag. - Drop Merge:
merge_radiusnow validated via ConfigValidator; removed silentif (< 0.5)clamp that gave no admin feedback. - Portal Cache:
cache_ttl_minutesnow validated — a zero or negative TTL caused all cached portals to expire immediately. - Disk IO Throttler:
defer_threshold_percentnow range-clamped to 0–100;max_chunk_saves_per_secondvalidated — out-of-range values silently broke throttle logic. - Random Tick Optimizer:
check_interval_ticksvalidated to prevent zero-tick scheduler spin;default_random_tick_speedrange-clamped to 0–4096 to prevent invalid game rule values.
v1.1.47 — Quality Pass IX
Bug Fixes
- Projectile Limiter: Fixed player UUID memory leak —
playerProjectileCountaccumulated entries for disconnected players indefinitely; now cleared on quit.
Config Validation
- Projectile Limiter:
cleanup_stuck_arrows.age_ticks,lag_aware.tps_threshold, andlag_aware.cap_multipliernow validated — zero age ticks cleaned every arrow instantly, negative TPS threshold kept lag mode permanently active, negative cap multiplier inverted projectile caps. - AFK Manager:
idle_threshold_secondsandsweep_interval_ticksnow validated — a zero/negative idle threshold flagged every player as AFK immediately. - Entity Tick Budget:
budget_ms,ai_radius_boost, andcooldown_ticksnow validated — zero budget exhausted every tick, zero cooldown fired on every check. - Physics Limiter:
max_per_chunk_per_tick,lag_aware.tps_threshold, andlag_aware.max_per_chunk_per_ticknow validated — zero caps blocked all block physics. - Fluid Flow Limiter: All four flow caps and
lag_aware.tps_thresholdnow validated via ConfigValidator; removed manualif (< 1)clamps. - Piston Limiter: All four piston caps and
lag_aware.tps_thresholdnow validated via ConfigValidator; removed manualif (< 1)clamps.
v1.1.46 — Quality Pass VIII
Config Validation
- Lag Actions: Per-threshold
cooldownvalues now validated — negative cooldowns caused the action to fire on every monitor cycle; now warns and falls back to 120s. - Spawn Limiter:
lag_aware.tps_thresholdandlag_aware.budget_multipliernow validated — a negative multiplier made all mob budgets go negative, treating every mob as over-cap during lag. - Mob AI Throttler:
lag_aware.tps_thresholdnow validated — a zero/negative value made AI throttling permanently active. Per-familyfull_ai,reduced_ai, andno_airange overrides also validated — zero values broke distance comparisons. - Portal Limiter:
lag_aware.tps_thresholdandlag_aware.cooldown_multipliernow validated — a negative multiplier made portal cooldowns negative, bypassing all protection during lag. - Explosion Optimizer:
lag_aware.tps_thresholdand all per-typeradius_multipliervalues now validated — a zero or negative multiplier produced broken explosion radius calculations. - World Pregen:
pause_tps_thresholdandresume_tps_thresholdnow clamped to ≥ 0.1 — zero values caused pre-generation to never pause during lag. - Performance Monitor:
cadence_ticksnow clamped to ≥ 1 — a zero value would cause the sampler to spin every tick. - View Distance Adjuster:
default_view_distanceanddefault_simulation_distancenow clamped to ≥ 1 — zero values passed invalid distances to Bukkit's world API.
v1.1.45 — Quality Pass VII
Bug Fixes
- Breeding Throttler: Fixed integration checks using
.isEnabled()instead of.isModuleEnabled()for all land-protection plugins (Lands, GriefPrevention, Towny, GriefDefender, BentoBox, SuperiorSkyblock2, ResourceWorld). Claim skips were applying even when the admin had disabled the integration in PerformanceX config.
Config
- Breeding Throttler: Added missing
integration_hookssection tobreeding-throttler.yml—skip_in_claimsandskip_in_resource_worldswere previously hardcoded to their defaults with no way to change them. - Mob Clear: Added
modelengineandeco_mobsto theskipsection inmob-clear.yml— these were always skipped but couldn't be toggled by admins.
Config Validation
- Farm Limiter: Added
ConfigValidatorcoverage for all 9 numeric values — spawner interval, check radius, mob cap, crop growth chance, breeding cooldown, egg chance, item flood cap, and both lag-aware multipliers. - Chunk Manager: Added
ConfigValidatorcoverage for all 8 numeric values — player radius, grace period, load rate limits, world chunk cap, sweep interval, and lag throttle limits. Previously used silentMath.max()fallbacks with no admin warning. - Hopper Limiter:
lag_aware.tps_threshold,lag_transfer_interval_ticks, andcheck_interval_secondsnow validated — zero values previously caused permanent lag mode or a broken scheduler task. - Villager Optimizer:
lag_aware.tps_thresholdnow validated — zero or negative values caused AI range reduction to be permanently active. - Entity Limiter:
xp_merge.radiusandxp_merge.max_valuenow validated — zero values silently disabled all XP orb merging. - Item Clear:
bypass_radius_blocksnow validated — zero silently disabled player bypass protection with no warning. - Item Despawn:
label.update_interval_ticksnow validated — zero or negative broke the label update loop.
v1.1.44 — Quality Pass VI
Bug Fixes
- Chunk Tick Budget: Fixed dead-entity UUID accumulation — mobs that died while AI-frozen stayed in the tracking set indefinitely until the next full thaw. The set is now purged of invalid UUIDs each sweep cycle.
Config Validation
- Chunk Tick Budget: All six numeric config values now validated (
budget_ms,recovery_ms,hot_chunk_threshold,max_frozen_chunks,sweep_interval_ticks,action_interval_ticks). Zero/negative values previously caused entities to be frozen permanently or broke the scheduler. - Redstone Limiter: Added ConfigValidator for all numeric values. Most critically,
tracking_window_seconds: 0previously caused a division by zero in the pulse rate calculation. - Anti-Lag Machine: Added ConfigValidator for all rate thresholds (
max_per_second,max_tnt_per_chunk, etc.). Zero values would have flagged all normal piston/fluid/TNT activity as spam. - Collision Limiter:
lag_aware.tps_thresholdnow validated — zero or negative values prevented lag mode from ever activating. - Spawn Limiter:
world_caps.defaultand per-world cap values now validated — zero/negative silently disabled world-cap enforcement with no warning. - Lag Actions:
spawn_throttle.duration_secondsandrecovery.required_consecutive_passesnow validated — zero values made spawn throttle a no-op and allowed instant recovery declaration. - RAM Optimizer:
cooldown_seconds(threshold GC),interval_minutes(scheduled GC), andcooldown_seconds(alert) now validated — zero values caused GC spam or a broken scheduler task.
Debug
/px debug chunks: Now shows Chunk Tick Budget hot chunk count and frozen chunk count alongside the existing Chunk Manager stats./px debug ram: New section showing current heap usage %, threshold-triggered GC count, scheduled GC count, and total GC count.
v1.1.43 — Quality Pass V
Bug Fixes
- View Distance Adjuster: Fixed a UUID memory leak — players who disconnected while ping-throttled stayed in the
pingReducedset indefinitely and were never GC'd. - Mob AI Throttler:
ConfigValidatorwas created after theactivation_rangesreads, meaning invalid values (e.g.no_ai: 0) could globally disable mob AI across the entire server. Ranges are now validated before use.
Improvements
- CPU Stabilizer: Added config validation for all numeric values (
threshold_percent,cooldown_seconds,max_errors,timeout_seconds,check_seconds). Invalid entries log a warning and fall back to safe defaults instead of causing undefined behavior. - Debug:
/px debug spawnsnow shows lifetimetotalSpawnsBlockedalongside the per-cycle count, giving admins a clearer picture of cumulative spawn limiter effectiveness.

