{"id":110153,"date":"2026-06-06T14:21:33","date_gmt":"2026-06-06T11:21:33","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/"},"modified":"2026-06-06T14:21:33","modified_gmt":"2026-06-06T11:21:33","slug":"neurolag","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/","title":{"rendered":"NeuroLag"},"content":{"rendered":"<div align=\"center\">\n<p><img decoding=\"async\" src=\"https:\/\/cdn.modrinth.com\/data\/neurolag\/icon.png\" width=\"120\" alt=\"NeuroLag Icon\"\/><\/p>\n<p># NeuroLag<\/p>\n<p>**Smart TPS-aware mob AI optimizer for Paper 1.21+**<\/p>\n<p>![Modrinth](https:\/\/modrinth.com\/user\/Duong2012G)<br \/>\n![Paper](https:\/\/papermc.io)<br \/>\n![Java](https:\/\/adoptium.net)<br \/>\n![License](LICENSE)<\/p>\n<p>*Protect your TPS before the lag even starts \u2014 then quietly undo everything when the server recovers.*<\/p>\n<p>\ud83d\udce5 Download \u2022 \ud83d\udc1b Report a Bug \u2022 [\ud83d\udcc4 Changelog](CHANGELOG.md)<\/p>\n<\/div>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcd6 Table of Contents<\/p>\n<p>* \u2728 Features<br \/>\n* \ud83d\udd01 How It Works<br \/>\n* \ud83d\udce6 Requirements<br \/>\n* \ud83d\ude80 Installation<br \/>\n* \u2328\ufe0f Commands &#038; Permissions<br \/>\n* \ud83d\udd27 Configuration<br \/>\n* \ud83c\udf10 Web Dashboard<br \/>\n* \ud83d\udd17 Multi-Server Sync<br \/>\n* \ud83d\udee1\ufe0f Protected Zones<br \/>\n* \ud83d\uddc2\ufe0f Config Profiles<br \/>\n* \ud83d\udcbe Backup System<br \/>\n* \ud83e\udde9 Developer API<br \/>\n* \ud83d\udd0d Troubleshooting<br \/>\n* \u2753 FAQ<br \/>\n* \ud83d\udcc4 Credits<\/p>\n<p>&#8212;<\/p>\n<p>## \u2728 Features<\/p>\n<p>### \ud83e\udde0 Intelligent TPS State Machine<\/p>\n<p>NeuroLag continuously samples TPS, CPU load, heap usage, player count, and predictive trend data to decide which of three states to apply per world:<\/p>\n<p>| State | Default Trigger | Effect |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| `NORMAL` | TPS \u2265 18.0 | No restrictions; full AI restored |<br \/>\n| `MEDIUM` | TPS < 18.0 | Follow-range scaled, pathfinding limited, tick-throttle on |\n| `CRITICAL` | TPS < 15.0 | Full AI disable, spawn suppression, smart culling |\n\nAll thresholds are configurable per-world and can be overridden by config profiles. A **hysteresis buffer** (default 0.5 TPS) prevents oscillation at the boundary.\n\n---\n\n### \u26a1 31 Optimization Features\n\n#### F1 \u2014 CPU Throttle Penalty\nMonitors JVM CPU usage. When usage exceeds the configured threshold (default 80%), a 1.5 TPS penalty is applied to the effective TPS calculation, triggering stricter mob optimizations before the server thread becomes saturated.\n\n#### F2 \u2014 Region-Based Pathfinding Cutoff\nDivides each world into configurable regions. Mobs beyond the pathfinding distance threshold (`disable-pathfinding-distance-chunks: 8`) have their `FOLLOW_RANGE` attribute zeroed, eliminating expensive A* pathfinding for mobs no player will ever see.\n\n#### F3 \u2014 Chunk-Based AI Toggle\nMobs outside a configurable chunk radius from any player (`distance-chunks: 4`) have their AI disabled entirely during CRITICAL state. Mobs within range always retain full AI regardless of server state.\n\n#### F4 \u2014 Velocity Freeze\nDistant AI-disabled mobs have their velocity zeroed to prevent passive drift. Configurable minimum chunk distance (`freeze-distance-chunks: 6`).\n\n#### F5 \u2014 Spawn Suppression\nDuring MEDIUM and CRITICAL states, monster and animal spawn limits are reduced (`monster-limit: 30`, `animal-limit: 10`) to slow mob population growth while the server is already under load.\n\n#### F6 \u2014 Smart Culling\nWhen the per-world entity count exceeds `max-entities-per-world` during CRITICAL state, the lowest-priority mobs are removed. Supports three culling strategies:\n\n| Strategy | Behaviour |\n|---|---|\n| `FAR_FROM_PLAYER` | Remove mobs furthest from any player first |\n| `GROUP` | Remove mob types that have the most instances |\n| `RANDOM` | Shuffle and remove |\n\nProtected-zone mobs and named \/ tamed mobs (if whitelisted) are **never** culled.\n\n#### F7 \u2014 Tick Throttling\nDuring MEDIUM state, non-priority mobs have their AI ticked only once every N game ticks (`ticks-per-ai-tick: 4`) instead of every tick. This halves or quarters AI cost without fully disabling mobs.\n\n#### F8 \u2014 Mob Weight System\nEach entity type is assigned a weight score. Culling prioritizes heaviest entities first. Fully configurable (`zombies.yml`-style block in `features.yml`).\n\n| Entity | Default Weight |\n|---|---|\n| Bat | 0.3 |\n| Bee | 0.5 |\n| Zombie | 1.0 |\n| Skeleton | 1.2 |\n| Creeper | 1.5 |\n| Enderman | 2.0 |\n| Wither | 3.0 |\n| Ender Dragon | 4.0 |\n\n#### F9 \u2014 AI Difficulty Scaling\nAdjusts the effective TPS threshold based on world difficulty, so optimization triggers earlier on Easy (players care less) and later on Hard (players want full mob behaviour).\n\n| Difficulty | TPS Offset |\n|---|---|\n| Peaceful | +3.0 (never optimizes) |\n| Easy | \u22121.0 (optimizes sooner) |\n| Normal | 0.0 |\n| Hard | +1.0 (defers optimization) |\n\n#### F10 \u2014 Memory Pressure Penalty\nMonitors JVM heap usage ratio. When used heap exceeds the configured threshold (default 80%), a configurable TPS penalty is added, pre-emptively triggering optimizations before a GC pause hits.\n\n#### F11 \u2014 Predictive Scheduler\nTracks historical TPS over a sliding window and a configurable set of peak hours. If a downward TPS trend is detected early (before the threshold is crossed), an `earlyOffset` penalty is applied to trigger optimizations proactively.\n\nConfigurable peak hours example:\n```yaml\npeak-hours: \"17:00-19:00,19:00-22:00\"\n```\n\n#### F12 \u2014 Protected Zones\nMobs inside defined cuboid zones (or WorldGuard regions) are **never** throttled, culled, or have their attributes modified. Follow range is always restored to default when a mob is found inside a protected zone.\n\n#### F13 \u2014 Smart Group Culling\nInstead of culling random mobs, groups entities by type and only targets types with more than `min-type-before-cull` instances, preserving ecological diversity while reducing the highest-density populations.\n\n#### F14 \u2014 Per-Player Action Bar Notifications\nPlayers near affected mobs receive an action-bar warning during MEDIUM\/CRITICAL states. Configurable radius (`radius-blocks: 64`).\n\n#### F15 \u2014 Alert System\nAdmin action-bar broadcasts on state transitions. Optional Discord webhook and in-game sound alerts.\nSound names, particle types, particle count, and whether to show an action-bar alert are all\nconfigurable in `monitors.yml` under `alerts.*`. Includes per-player cooldown to prevent sensory\nspam on multi-world servers.\n\n#### F16 \u2014 Player-Count Scaling\nTPS thresholds dynamically tighten as more players join. Configure `min-players`, `max-players`, and `max-threshold-offset` to have the plugin optimize more aggressively during peak player counts.\n\n#### F17 \u2014 Animation Freezing\nFreezes the velocity of mobs beyond `freeze-distance-chunks` during CRITICAL state, preventing physics drift without requiring NMS or packet-level access.\n\n#### F18 \u2014 Config Auto-Backup\nAutomatically creates timestamped ZIP bundles of all NeuroLag YAML files (including `lang\/`) on a\nconfigurable schedule and keeps the N most recent copies. Each backup is accompanied by a\n`.sha256` checksum file that is verified before any restore. Protects against zip-bomb\nattacks with per-entry (10 MB) and total-restore (50 MB) size caps.\n\n#### F19 \u2014 Safe Mode for Critical State\nWhen enabled in the critical TPS tier configuration, Safe Mode selectively disables only\ndangerous AI components while preserving essential game mechanics. Prevents over-optimization\nthat would break villager trading, mob escaping water, and other critical behaviors.\n\n#### F20 \u2014 Mob Importance Scoring System\nAssigns importance scores to all mobs based on type, naming, tamed status, equipment,\nand leash status. Named mobs (10x), tamed mobs (20x), and equipped mobs (1.5x) receive\nhigher priority. System protects important mobs during culling operations.\n\n#### F21 \u2014 Mob Behavior Groups\nCategorizes mobs into behavior groups for targeted optimization:\n- PASSIVE (low priority): Cows, pigs, sheep, chickens\n- AGGRESSIVE (high priority): Zombies, skeletons, creepers\n- NEUTRAL (medium priority): Endermen, iron golems\n- SPECIAL (preserve): Villagers, bosses, named mobs\n- AQUATIC (water-based): Dolphins, guardians, squids\n\n#### F22 \u2014 Dynamic Region Sizing\nAutomatically adjusts region size based on player count for optimal performance:\n- 0-5 players: 16 chunks (large regions)\n- 6-20 players: 8 chunks (medium regions)\n- 21-50 players: 4 chunks (small regions)\n- 50+ players: 2 chunks (very small regions)\n\n#### F23 \u2014 Hot Region Decay\nRegions gradually cool down when players leave, preventing regions from staying\nhot indefinitely. Heat decays at 5% per second when no players are present.\n\n#### F24 \u2014 EWMA Prediction Algorithm\nExponentially Weighted Moving Average provides better short-term TPS prediction by\ngiving more weight to recent samples. Alpha smoothing factor of 0.3 for optimal\nresponsiveness.\n\n#### F25 \u2014 Linear Regression Trend Analysis\nDetects downward TPS trends using linear regression to predict lag before it occurs.\nCombines with simple average and EWMA for robust prediction accuracy.\n\n#### F26 \u2014 Annotation-Based Config Validation\n`@ConfigValidation` annotation allows field-level validation rules for configuration\nvalues. Validates numeric ranges, required fields, and boundary warnings with clear\nerror messages.\n\n#### F27 \u2014 Config Migration System\nAutomatic version checking and stepwise migrations for config files. Creates backups\nbefore migration and supports rollback. Migrates config.yml, features.yml, monitors.yml,\nand systems.yml while preserving user settings.\n\n#### F28 \u2014 Event-Driven Architecture\nEventBus pattern decouples optimization logic from the main engine. Components can\nregister as `OptimizationListener` to react to optimization state changes, enabling\nplugins\/addons to extend functionality.\n\n#### F29 \u2014 Refactored Optimizer Classes\nOptimization logic extracted into dedicated classes following Single Responsibility\nPrinciple:\n- `MobCuller` - Entity culling with importance scoring\n- `AIThrottler` - AI throttling and tick management\n- `SpawnSuppressor` - Spawn rate adjustment logic\n\n#### F30 \u2014 Comprehensive Config Guide\n`CONFIG-GUIDE.md` provides detailed explanations for all configuration options,\nincluding usage examples, recommended values, and troubleshooting tips organized by\nfunctional areas.\n\n#### F31 \u2014 Enhanced Config Comments\nAll YAML configuration files (config.yml, features.yml, monitors.yml, systems.yml)\ninclude detailed inline comments, section headers, and security notes for better\nunderstanding and configuration management.\n\n---\n\n### \ud83d\udcca Monitoring &#038; Reporting\n\n| Feature | Description |\n|---|---|\n| **BossBar Dashboard** | Real-time TPS, state, CPU, and heap display for admins |\n| **Web Dashboard** | Embedded HTTP server at configurable port with JSON API |\n| **ASCII Graph** | `\/nlag graph` \u2014 TPS history chart in chat |\n| **HTML Audit Reports** | On-demand or auto-generated reports covering server specs, plugin list, chunk stats, and mob analysis. Entity collection is capped at 5 000 per world to avoid main-thread spikes. Full HTML escaping prevents XSS. |\n| **Lag Reports** | Logged when critical events last more than the minimum duration |\n| **Metrics API** | Plugin-message channel (`neurolag.api`) for third-party integrations |\n\n---\n\n### \ud83d\udd17 Multi-Server Sync\n\nPropagates TPS state across a network in real time. Supports:\n\n- **Redis** (recommended) \u2014 sub-100 ms latency via Pub\/Sub\n- **MySQL** \u2014 polling-based, works with any shared database\n\nCascade warnings alert local admins when a peer server enters CRITICAL state.\n\n---\n\n### \ud83d\uddc2\ufe0f Config Profiles\n\nSwitch between named configuration presets at runtime:\n\n```\n\/nlag profile survival\n\/nlag profile event\n\/nlag profile clear\n```\n\nProfiles override `critical-tps`, `medium-tps`, and `max-entities` without touching your base config files.\n\n---\n\n### \ud83e\udde9 Developer API\n\n```java\nNeuroLagAPI api = NeuroLagAPI.getInstance();\n\napi.getCurrentTps();\napi.getWorldState(\"world\");           \/\/ \"NORMAL\" | \"MEDIUM\" | \"CRITICAL\"\napi.isManualOverride();\napi.getCriticalActivationCount();\napi.getMediumActivationCount();\n```\n\n---\n\n## \ud83d\udd01 How It Works\n\n```\nEvery check-interval seconds (default: 10):\n\n  Raw TPS\n    \u2502\n    \u251c\u2500 Memory pressure penalty  (if heap > threshold)<br \/>\n    \u251c\u2500 CPU throttle penalty     (if CPU > threshold)<br \/>\n    \u251c\u2500 Predictive offset        (if downward trend detected)<br \/>\n    \u2514\u2500 Difficulty scaling       (per-world adjustment)<br \/>\n            \u2502<br \/>\n            \u25bc<br \/>\n       Effective TPS<br \/>\n            \u2502<br \/>\n   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n   \u2502  Hysteresis FSM  \u2502   NORMAL \u2194 MEDIUM \u2194 CRITICAL<br \/>\n   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<br \/>\n            \u2502<br \/>\n   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510<br \/>\n   \u2502  Per-world optimization pass            \u2502<br \/>\n   \u2502  \u2022 Collect targets (cached 4 ticks)     \u2502<br \/>\n   \u2502  \u2022 Spawn suppression                    \u2502<br \/>\n   \u2502  \u2022 Smart culling (if CRITICAL)          \u2502<br \/>\n   \u2502  \u2022 Batched AI\/range update (\u2264 50\/batch) \u2502<br \/>\n   \u2502  \u2022 Admin + player notifications         \u2502<br \/>\n   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/p>\n<p>On recovery to NORMAL:<br \/>\n  \u2192 restoreWorld() \u2014 full AI + default FOLLOW_RANGE for all mobs<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udce6 Requirements<\/p>\n<p>| Component | Version | Notes |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| Java | 21+ | Required |<br \/>\n| Paper | 1.21+ | Required; Spigot is **not** supported |<br \/>\n| WorldGuard | 7.x | Optional \u2014 enables WG region integration |<br \/>\n| Redis | Any recent | Optional \u2014 for multi-server sync |<br \/>\n| MySQL | 8.x | Optional \u2014 alternative sync backend |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\ude80 Installation<\/p>\n<p>1. Download `NeuroLag-1.5.2.jar` from Modrinth.<br \/>\n2. Place it in your `plugins\/` folder.<br \/>\n3. Start the server once to generate all config files.<br \/>\n4. Edit the files in `plugins\/NeuroLag\/`:<\/p>\n<p>   | File | Purpose |<br \/>\n   |&#8212;|&#8212;|<br \/>\n   | `config.yml` | TPS thresholds, target rules, per-world overrides |<br \/>\n   | `features.yml` | Toggle and tune each optimization feature |<br \/>\n   | `monitors.yml` | Dashboard, web API, alerts, Discord, audit |<br \/>\n   | `systems.yml` | Sync, zones, profiles, backup, validator |<\/p>\n<p>5. Run `\/nlag validate` to catch configuration errors.<br \/>\n6. Run `\/nlag status` to confirm everything is active.<\/p>\n<p>> \u26a0\ufe0f Do **not** use `\/reload`. Always do a full server restart or use `\/nlag reload` for NeuroLag-specific changes.<\/p>\n<p>&#8212;<\/p>\n<p>## \u2328\ufe0f Commands<\/p>\n<p>| Command | Description | Permission |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| `\/nlag status` | TPS, CPU, heap, per-world states, activation counts | `neurolag.admin` |<br \/>\n| `\/nlag graph` | ASCII TPS history chart (last 60 samples) | `neurolag.admin` |<br \/>\n| `\/nlag toggle` | Pause \/ resume monitoring and mob optimizations | `neurolag.admin` |<br \/>\n| `\/nlag simulate <tps|clear>` | Force a TPS value for testing (0\u201320) | `neurolag.admin` |<br \/>\n| `\/nlag dashboard [off]` | Show \/ hide BossBar dashboard | `neurolag.dashboard` |<br \/>\n| `\/nlag audit` | Generate an HTML audit report | `neurolag.audit` |<br \/>\n| `\/nlag zone` | Show loaded protected zones | `neurolag.zone` |<br \/>\n| `\/nlag profile [name|clear]` | Switch or clear a config profile | `neurolag.profile` |<br \/>\n| `\/nlag validate` | Validate all config values and report errors | `neurolag.validate` |<br \/>\n| `\/nlag backup` | Create a manual backup ZIP now | `neurolag.backup` |<br \/>\n| `\/nlag backup list` | List available backups | `neurolag.backup` |<br \/>\n| `\/nlag backup restore [file]` | Restore from latest or named backup | `neurolag.backup` |<br \/>\n| `\/nlag stresstest [count] [min]` | Spawn test mobs for load testing | `neurolag.stresstest` |<br \/>\n| `\/nlag sync` | Show multi-server peer TPS states | `neurolag.admin` |<br \/>\n| `\/nlag reload` | Hot-reload all NeuroLag config files | `neurolag.admin` |<\/p>\n<p>Aliases: `\/neurolag`, `\/nl`, `\/neuromob`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd10 Permissions<\/p>\n<p>| Permission | Description | Default |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| `neurolag.admin` | Full control; grants all sub-commands | OP |<br \/>\n| `neurolag.dashboard` | Use `\/nlag dashboard` | OP |<br \/>\n| `neurolag.audit` | Use `\/nlag audit` | OP |<br \/>\n| `neurolag.zone` | Use `\/nlag zone` | OP |<br \/>\n| `neurolag.profile` | Use `\/nlag profile` | OP |<br \/>\n| `neurolag.validate` | Use `\/nlag validate` | OP |<br \/>\n| `neurolag.backup` | Use `\/nlag backup` | OP |<br \/>\n| `neurolag.stresstest` | Use `\/nlag stresstest` | OP |<br \/>\n| `neurolag.web` | Web dashboard access control (outside Bukkit) | OP |<br \/>\n| `neurolag.api` | Read plugin metrics via NeuroLagAPI | `true` |<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd27 Configuration<\/p>\n<p>NeuroLag uses a split-config layout. All files are in `plugins\/NeuroLag\/`.<\/p>\n<p>### `config.yml` \u2014 Core Settings<\/p>\n<p>&#8220;`yaml<br \/>\nsettings:<br \/>\n  language: en                # en, vi, es, fr, de, ja, zh<br \/>\n  check-interval: 10          # seconds between TPS samples<br \/>\n  enable-logging: true<br \/>\n  hysteresis-buffer: 0.5      # TPS gap before state recovers<\/p>\n<p>tiers:<br \/>\n  medium:<br \/>\n    tps-trigger: 18.0<br \/>\n    range-multiplier: 0.5     # scale mob FOLLOW_RANGE to 50% in MEDIUM<br \/>\n  critical:<br \/>\n    tps-trigger: 15.0<\/p>\n<p>targets:<br \/>\n  hostile-mobs: true<br \/>\n  passive-mobs: false<br \/>\n  water-mobs: true<br \/>\n  whitelist-types: [WARDEN, ELDER_GUARDIAN, ENDER_DRAGON, WITHER]<br \/>\n  protect-named-mobs: true<br \/>\n  protect-tamed-mobs: true<br \/>\n&#8220;`<\/p>\n<p>### `features.yml` \u2014 Optimization Toggles<\/p>\n<p>&#8220;`yaml<br \/>\nculling:<br \/>\n  enabled: true<br \/>\n  max-entities-per-world: 500<br \/>\n  priority: &#8220;FAR_FROM_PLAYER&#8221;   # FAR_FROM_PLAYER | GROUP | RANDOM<\/p>\n<p>chunk-ai:<br \/>\n  enabled: true<br \/>\n  distance-chunks: 4<\/p>\n<p>tick-throttle:<br \/>\n  enabled: true<br \/>\n  ticks-per-ai-tick: 4<\/p>\n<p>spawn-suppression:<br \/>\n  enabled: true<br \/>\n  monster-limit: 30<br \/>\n  animal-limit: 10<\/p>\n<p>cpu-throttling:<br \/>\n  enabled: true<br \/>\n  cpu-threshold: 80<br \/>\n  mode: THROTTLE_TASKS<\/p>\n<p>memory-pressure:<br \/>\n  enabled: true<br \/>\n  percent: 0.80               # 80% heap used = apply penalty<br \/>\n  offset: 0.5<\/p>\n<p>smart-culling:<br \/>\n  enabled: true<br \/>\n  cull-in-groups: true<br \/>\n  min-type-before-cull: 2<br \/>\n  removal-particle: POOF<br \/>\n&#8220;`<\/p>\n<p>### `monitors.yml` \u2014 Dashboard &#038; Alerts<\/p>\n<p>&#8220;`yaml<br \/>\ndashboard:<br \/>\n  enabled: true<br \/>\n  type: BOSSBAR<br \/>\n  update-interval: 2<br \/>\n  bossbar:<br \/>\n    name: &#8220;Server Health&#8221;<br \/>\n    color: BLUE<\/p>\n<p>web-dashboard:<br \/>\n  enabled: true<br \/>\n  port: 8080<br \/>\n  auth:<br \/>\n    token: &#8220;change-this-token-now&#8221;<br \/>\n    require-auth: true<br \/>\n    allow-query-token: false    # keep false for security<\/p>\n<p>discord:<br \/>\n  enabled: false<br \/>\n  webhook-url: &#8220;&#8221;<br \/>\n  notify-on-critical: true<br \/>\n  notify-on-recovery: true<\/p>\n<p>audit-reports:<br \/>\n  enabled: true<br \/>\n  generate-on: CRITICAL_EVENT<br \/>\n  output-format: HTML<br \/>\n&#8220;`<\/p>\n<p>### `systems.yml` \u2014 Maintenance &#038; Sync<\/p>\n<p>&#8220;`yaml<br \/>\nstress-test:<br \/>\n  enabled: false<br \/>\n  max-mob-count: 2000<br \/>\n  cooldown-seconds: 300<br \/>\n  max-mobs-per-chunk: 80          # NEW 1.5.2 \u2014 crash-prevention density cap<br \/>\n  entity-types:<br \/>\n    &#8211; ZOMBIE<br \/>\n    &#8211; SKELETON<br \/>\n    &#8211; CREEPER<\/p>\n<p>multi-server:<br \/>\n  enabled: false<br \/>\n  backend: REDIS              # REDIS or MYSQL<\/p>\n<p>zone-protection:<br \/>\n  enabled: false<br \/>\n  integrate-worldguard: false<br \/>\n  zones:<br \/>\n    &#8211; &#8220;world 0 60 0 100 200 100&#8221;<\/p>\n<p>config-profiles:<br \/>\n  enabled: true<br \/>\n  profiles:<br \/>\n    survival:<br \/>\n      critical-tps: 15.0<br \/>\n      medium-tps: 18.0<br \/>\n      max-entities: 500<\/p>\n<p>auto-backup:<br \/>\n  enabled: true<br \/>\n  backup-interval-minutes: 60<br \/>\n  keep-backups: 10<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd12 Security (v1.5.2)<\/p>\n<p>NeuroLag 1.5.2 ships with three security improvements to the web dashboard:<\/p>\n<p>| Feature | Default | Config Key |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| **Auto-generated secure token** | Enabled (replaces placeholder on every `start()` call, even when dashboard is disabled) | `web-dashboard.auth.token` in `monitors.yml` |<br \/>\n| **Per-IP rate limiting** | 60 req\/min | `web-dashboard.rate-limit` in `monitors.yml` |<br \/>\n| **IP allow-list** | Disabled | `web-dashboard.ip-whitelist` in `monitors.yml` |<\/p>\n<p>On first startup, if the token is still `&#8221;change-this-token-now&#8221;`, NeuroLag automatically generates a cryptographically secure random token, saves it to `monitors.yml` (creating the file if needed), and prints it to the console. Use it as your `Authorization: Bearer <token>` header.<\/p>\n<p>> **1.5.2 fix:** Token generation now runs before the `enabled` check, so the placeholder is replaced even if you have `web-dashboard.enabled: false`. Previously, flipping the dashboard on after initial setup could expose the default token until the next restart.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83c\udf10 Web Dashboard<\/p>\n<p>The embedded HTTP server exposes a live dashboard and JSON API.<\/p>\n<p>**Routes:**<\/p>\n<p>| Route | Method | Description |<br \/>\n|&#8212;|&#8212;|&#8212;|<br \/>\n| `\/` | GET | HTML live dashboard (auto-refreshes) |<br \/>\n| `\/api\/status` | GET | JSON metrics snapshot |<br \/>\n| `\/api\/cmd` | POST | Limited command bridge |<\/p>\n<p>**Allowed commands via `\/api\/cmd`:** `reload`, `status`, `graph`, `validate`<\/p>\n<p>**Authentication:**<\/p>\n<p>Always use the `Authorization: Bearer <token>` request header. The `?token=&#8230;`<br \/>\nquery-string fallback is **disabled by default** (`allow-query-token: false`) because<br \/>\ntokens in URLs appear in server access logs and browser history.<\/p>\n<p>&#8220;`bash<br \/>\n# Correct<br \/>\ncurl -H &#8220;Authorization: Bearer my-secret-token&#8221; http:\/\/localhost:8080\/api\/status<\/p>\n<p># Works but insecure \u2014 only if allow-query-token: true<br \/>\ncurl &#8220;http:\/\/localhost:8080\/api\/status?token=my-secret-token&#8221;<br \/>\n&#8220;`<\/p>\n<p>> \u26a0\ufe0f Always change the default token and never expose the web dashboard port publicly without a reverse proxy or firewall rule.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd17 Multi-Server Sync<\/p>\n<p>Share TPS state across a network so operators can see the health of every node from one place.<\/p>\n<p>### Redis (recommended)<\/p>\n<p>&#8220;`yaml<br \/>\nmulti-server:<br \/>\n  enabled: true<br \/>\n  backend: REDIS<br \/>\n  cascade-warnings: true<br \/>\n  redis:<br \/>\n    host: localhost<br \/>\n    port: 6379<br \/>\n    password: &#8220;&#8221;<br \/>\n&#8220;`<\/p>\n<p>### MySQL<\/p>\n<p>&#8220;`yaml<br \/>\nmulti-server:<br \/>\n  enabled: true<br \/>\n  backend: MYSQL<br \/>\n  mysql:<br \/>\n    host: localhost<br \/>\n    port: 3306<br \/>\n    database: neurolag<br \/>\n    user: root<br \/>\n    password: &#8220;&#8221;<br \/>\n&#8220;`<\/p>\n<p>Use `\/nlag sync` to see live peer states:<\/p>\n<p>&#8220;`<br \/>\n[NeuroLag] This server: MyServer_25565<br \/>\n  &#8211; LobbyServer_25565  \u2192  19.8 TPS  [NORMAL]<br \/>\n  &#8211; SurvivalNode_25566 \u2192  16.2 TPS  [MEDIUM]<br \/>\n&#8220;`<\/p>\n<p>> **v1.5.1:** Redis subscriber now exits cleanly on reload. MySQL reconnect uses exponential back-off to avoid log spam during DB outages.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udee1\ufe0f Protected Zones<\/p>\n<p>Define cuboid zones where mobs are **never** optimized, throttled, or culled.<\/p>\n<p>&#8220;`yaml<br \/>\nzone-protection:<br \/>\n  enabled: true<br \/>\n  integrate-worldguard: false   # set true to also protect WorldGuard regions<br \/>\n  zones:<br \/>\n    &#8211; &#8220;world 0 60 0 100 200 100&#8221;       # world minX minY minZ maxX maxY maxZ<br \/>\n    &#8211; &#8220;world_nether -50 0 -50 50 128 50&#8221;<br \/>\n&#8220;`<\/p>\n<p>Protected mobs always have:<br \/>\n&#8211; AI enabled<br \/>\n&#8211; `FOLLOW_RANGE` restored to Minecraft default<br \/>\n&#8211; Velocity unfrozen<br \/>\n&#8211; Immunity from smart culling<\/p>\n<p>> **v1.5.1:** `FOLLOW_RANGE` is now **unconditionally** restored for protected mobs on every optimization pass, not just when the mob happens to re-enter the zone.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\uddc2\ufe0f Config Profiles<\/p>\n<p>Switch between named presets at runtime without editing files.<\/p>\n<p>&#8220;`yaml<br \/>\nconfig-profiles:<br \/>\n  enabled: true<br \/>\n  profiles:<br \/>\n    survival:<br \/>\n      critical-tps: 15.0<br \/>\n      medium-tps: 18.0<br \/>\n      max-entities: 500<br \/>\n    event:<br \/>\n      critical-tps: 14.0<br \/>\n      medium-tps: 17.0<br \/>\n      max-entities: 900<br \/>\n    minigame:<br \/>\n      critical-tps: 12.0<br \/>\n      medium-tps: 16.0<br \/>\n      max-entities: 1000<br \/>\n&#8220;`<\/p>\n<p>&#8220;`<br \/>\n\/nlag profile event     \u2014 switch to event profile<br \/>\n\/nlag profile clear     \u2014 return to base config<br \/>\n\/nlag profile           \u2014 show all profiles + current active<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcbe Backup System<\/p>\n<p>Automatic backups save all NeuroLag `.yml` files (including `lang\/`) as timestamped ZIP bundles.<\/p>\n<p>&#8220;`yaml<br \/>\nauto-backup:<br \/>\n  enabled: true<br \/>\n  backup-interval-minutes: 60<br \/>\n  keep-backups: 10<br \/>\n&#8220;`<\/p>\n<p>Backups are stored in `plugins\/NeuroLag\/backups\/`.<\/p>\n<p>&#8220;`<br \/>\n\/nlag backup                                          \u2014 create now<br \/>\n\/nlag backup list                                     \u2014 list all<br \/>\n\/nlag backup restore                                  \u2014 restore latest<br \/>\n\/nlag backup restore config-bundle-2026-04-18_12-00-00.zip<br \/>\n&#8220;`<\/p>\n<p>**v1.6.0 security improvements:**<br \/>\n&#8211; Each backup ZIP is accompanied by a `.sha256` checksum file.<br \/>\n&#8211; Restore verifies the checksum before extracting; a mismatch aborts with a `SEVERE` log.<br \/>\n&#8211; Zip-bomb protection: 10 MB per-entry cap and 50 MB total-restore cap.<br \/>\n&#8211; Backup list is cached in memory; `purgeOld()` uses filename-based sort \u2014 no filesystem stat calls.<\/p>\n<p>> **v1.5.1:** The `lang\/` subdirectory is included in all backup bundles so custom language files are not lost on restore.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83e\udde9 Developer API<\/p>\n<p>&#8220;`java<br \/>\n\/\/ Get the API instance<br \/>\nNeuroLagAPI api = NeuroLagAPI.getInstance();<\/p>\n<p>\/\/ Read current TPS and world state<br \/>\ndouble tps       = api.getCurrentTps();<br \/>\nString state     = api.getWorldState(&#8220;world&#8221;);     \/\/ &#8220;NORMAL&#8221; | &#8220;MEDIUM&#8221; | &#8220;CRITICAL&#8221;<br \/>\nboolean override = api.isManualOverride();<\/p>\n<p>\/\/ Read lifetime counters<br \/>\nint critCount    = api.getCriticalActivationCount();<br \/>\nint medCount     = api.getMediumActivationCount();<br \/>\n&#8220;`<\/p>\n<p>Subscribe to state changes via the plugin-message channel `neurolag.api` (requires `neurolag.api` permission set to `true` on the target player).<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udd0d Troubleshooting<\/p>\n<details>\n<summary><b>Stress test crashes the server when spawning many mobs at spawn<\/b><\/summary>\n<p>Fixed in **1.5.2**. The stress test now checks per-chunk mob density (7\u00d77 chunk grid around<br \/>\nthe spawn point) against `stress-test.max-mobs-per-chunk` (default 80) before spawning.<br \/>\nIf the limit would be exceeded, the count is reduced automatically. Update to 1.5.2.<\/p>\n<\/details>\n<details>\n<summary><b>Web dashboard token was still the default placeholder after enabling the dashboard<\/b><\/summary>\n<p>Fixed in **1.5.2**. Token generation now runs before the `enabled` check, so the placeholder<br \/>\nis always replaced regardless of whether the dashboard starts or not. Update to 1.5.2.<\/p>\n<\/details>\n<details>\n<summary><b>MySQL log spam: &#8220;connection lost \u2014 reconnecting&#8221; floods console during DB outage<\/b><\/summary>\n<p>Fixed in **1.5.2**. Reconnect log messages are now suppressed using the same power-of-2 streak<br \/>\nfilter used for SQL errors (logs on streak 1, 2, 4, 8, 16 \u2026). Update to 1.5.2.<\/p>\n<\/details>\n<details>\n<summary><b>Entity count stays above maxEntities permanently when zone protection is active<\/b><\/summary>\n<p>Fixed in **1.5.2**. The culling pass now pre-filters protected mobs before calculating the<br \/>\nremoval count, so the math is correct and the engine converges to the target entity count<br \/>\neven when a subset of mobs is zone-protected. Update to 1.5.2.<\/p>\n<\/details>\n<details>\n<summary><b>Mobs are frozen after \/nlag toggle or \/nlag reload<\/b><\/summary>\n<p>Fixed in **1.5.1**. In-flight batch tasks were re-applying AI restrictions after `restoreAll()` ran.<br \/>\nUpdate to 1.5.1 and the issue is resolved. If you are running 1.4.0, trigger a full server restart as a workaround.<\/p>\n<\/details>\n<details>\n<summary><b>TPS keeps spiking on a mob-heavy server even with NeuroLag active<\/b><\/summary>\n<p>Make sure `collectTargets` caching is active (1.5.1+). On older versions, the entity scan ran every tick.<br \/>\nAlso lower `check-interval` and reduce `max-entities-per-world` in `features.yml`.<\/p>\n<\/details>\n<details>\n<summary><b>FOLLOW_RANGE stays reduced after server recovers to NORMAL<\/b><\/summary>\n<p>Fixed in **1.5.1**. Protected-zone mobs and mobs in worlds returning to NORMAL now always<br \/>\nhave `FOLLOW_RANGE` reset to the Minecraft default via the new `restoreWorld()` call.<\/p>\n<\/details>\n<details>\n<summary><b>Redis\/MySQL exceptions flooding the log on reload<\/b><\/summary>\n<p>Fixed in **1.5.1**. Redis subscriber now joins before pool close. MySQL reconnect uses<br \/>\nexponential back-off so errors only log at streaks 1, 2, 4, 8, 16, \u2026<\/p>\n<\/details>\n<details>\n<summary><b>Web dashboard token showing in server access logs<\/b><\/summary>\n<p>Set `allow-query-token: false` (now the default in 1.5.1) and use the<br \/>\n`Authorization: Bearer <token>` header instead.<\/p>\n<\/details>\n<details>\n<summary><b>Custom language files lost after backup restore<\/b><\/summary>\n<p>Fixed in **1.5.1**. Backup bundles now include the `lang\/` subdirectory.<br \/>\nRestore from a 1.5.1 backup to get language files back.<\/p>\n<\/details>\n<details>\n<summary><b>Mobs inside protected zones being removed by smart culling<\/b><\/summary>\n<p>Fixed in **1.5.1**. The `cull()` method now checks `zoneManager.isProtected()` before<br \/>\nremoving any mob. Update to 1.5.1.<\/p>\n<\/details>\n<details>\n<summary><b>No optimization happening at all<\/b><\/summary>\n<p>1. Run `\/nlag validate` \u2014 look for config errors.<br \/>\n2. Run `\/nlag status` \u2014 check that `Override` shows `OFF`.<br \/>\n3. Check `ignored-worlds` in `config.yml` \u2014 your world may be excluded.<br \/>\n4. Use `\/nlag simulate 10` to force CRITICAL state and verify mobs respond.<br \/>\n5. Check `targets` in `config.yml` \u2014 `hostile-mobs` and `water-mobs` must be `true`.<\/p>\n<\/details>\n<details>\n<summary><b>Web dashboard returns 401 even with the correct token<\/b><\/summary>\n<p>Ensure you are sending the token in the `Authorization` header, not the query string<br \/>\n(`allow-query-token` is `false` by default). Example:<\/p>\n<p>&#8220;`bash<br \/>\ncurl -H &#8220;Authorization: Bearer your-token-here&#8221; http:\/\/localhost:8080\/api\/status<br \/>\n&#8220;`<\/p>\n<\/details>\n<details>\n<summary><b>\/reload breaks the plugin<\/b><\/summary>\n<p>Use `\/nlag reload` instead of the server-level `\/reload` command.<br \/>\nServer `\/reload` can leave dangling tasks and broken event registrations in any plugin.<\/p>\n<\/details>\n<p>&#8212;<\/p>\n<p>## \u2753 FAQ<\/p>\n<p>### Does NeuroLag affect player behaviour?<\/p>\n<p>No. It only modifies non-player mob AI and attribute values (`FOLLOW_RANGE`). Players,<br \/>\ntheir items, and their abilities are never touched.<\/p>\n<p>### Will mobs stay frozen permanently?<\/p>\n<p>No. NeuroLag always restores full AI and default attributes when the server returns to<br \/>\nNORMAL state, when the plugin is disabled, or when `\/nlag toggle` is used to pause monitoring.<\/p>\n<p>### Does it support multiple worlds?<\/p>\n<p>Yes. Each world is tracked independently with its own state machine. Per-world TPS thresholds<br \/>\ncan be configured in `config.yml` under `world-settings`.<\/p>\n<p>### Does it support Folia?<\/p>\n<p>No. NeuroLag uses the Bukkit scheduler API which is not compatible with Folia&#8217;s per-region threading. Folia support is planned for a future release.<\/p>\n<p>### Can I use it alongside other optimization plugins?<\/p>\n<p>Yes, but ensure culling and AI-disable settings do not conflict. NeuroLag is designed to<br \/>\ncoexist with plugins like Spark, ClearLag, and Chunky.<\/p>\n<p>### How do I know it&#8217;s working?<\/p>\n<p>Run `\/nlag status` \u2014 you will see current TPS, CPU, heap, per-world states, and lifetime<br \/>\nactivation counts. Run `\/nlag simulate 10` to force CRITICAL state and watch mobs respond<br \/>\nin real time.<\/p>\n<p>### Is the config validator mandatory?<\/p>\n<p>No, but strongly recommended. Run `\/nlag validate` after every manual config edit to catch<br \/>\ntype mismatches, out-of-range values, and missing fields before they cause runtime errors.<\/p>\n<p>### What happens to mobs when I do \/nlag reload?<\/p>\n<p>As of 1.5.1: all pending batch tasks are cancelled, `restoreAll()` runs (mobs get full AI<br \/>\nback), then all services restart with the new config. No mobs are left in a restricted state.<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udcc4 Credits<\/p>\n<p>**Author:** Duong2012G<br \/>\n**License:** Apache 2.0<br \/>\n**Modrinth:** https:\/\/modrinth.com\/user\/Duong2012G<\/p>\n<p>*Open source \u2014 contributions welcome.*<\/p>\n<p>&#8212;<\/p>\n<p>## \ud83d\udccb Changelog<\/p>\n<p>See [CHANGELOG.md](CHANGELOG.md) for a full version history.<\/p>\n<p>**Recent highlights:**<br \/>\n&#8211; **1.5.2** \u2014 5 targeted bug fixes: wrong `api-version` in `plugin.yml`, web token not generated when disabled, culling count wrong with protected zones, AI update scheduler saturation, stress test crash on dense spawn areas, MySQL reconnect log spam<br \/>\n&#8211; **1.5.1** \u2014 4 critical + 5 high bug fixes: task leak, mob freeze, entity scan cache, FOLLOW_RANGE restore, query-token security, Redis\/MySQL stability, zone culling, lang backup<br \/>\n&#8211; **1.4.0** \u2014 Lifecycle overhaul, zone protection, backup bundles, web auth improvements<br \/>\n&#8211; **1.3.0** \u2014 Predictive scheduler, zone manager, web dashboard, multi-server sync, config profiles, backup system, developer API<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A smart, resource-aware optimization plugin that dynamically adjusts Mob AI based on server TPS and RAM to ensure a lag-free SMP experience<\/p>\n","protected":false},"featured_media":110154,"template":"","meta":{"_minecraft_slug":"neurolag","_minecraft_project_id":"NQv4Mv8q","_minecraft_author":"Duong2012G","_minecraft_license":"Apache-2.0","_minecraft_downloads":259,"_minecraft_follows":4,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"neurolag.zip","_minecraft_size_bytes":55284838,"_minecraft_version_count":17,"_minecraft_updated_at":"2026-05-16T12:38:46.850108Z","_minecraft_date_created":"2026-03-09T20:55:35.830639Z","_minecraft_date_modified":"2026-05-11T17:23:05.204480Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/neurolag","_minecraft_icon_attachment_id":110154,"_minecraft_imported_at":"2026-06-06T11:21:35+00:00","_minecraft_import_hash":"ee3f5bd85139b984ca5af093bd8b6346","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[124,126,137,90,127,128,129,92],"mod_loader":[130,132,133,134],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82,859],"class_list":["post-110153","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-bukkit","mod_category-management","mod_category-mobs","mod_category-optimization","mod_category-paper","mod_category-purpur","mod_category-spigot","mod_category-utility","mod_loader-bukkit","mod_loader-paper","mod_loader-purpur","mod_loader-spigot","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9","minecraft_version-1-5-1"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>NeuroLag - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"NeuroLag - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A smart, resource-aware optimization plugin that dynamically adjusts Mob AI based on server TPS and RAM to ensure a lag-free SMP experience\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.modrinth.com\/data\/neurolag\/icon.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/\",\"name\":\"NeuroLag - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp\",\"datePublished\":\"2026-06-06T11:21:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp\",\"width\":96,\"height\":79},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/neurolag\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"NeuroLag\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"NeuroLag - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/","og_locale":"en_US","og_type":"article","og_title":"NeuroLag - Minecraft","og_description":"A smart, resource-aware optimization plugin that dynamically adjusts Mob AI based on server TPS and RAM to ensure a lag-free SMP experience","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/","og_site_name":"Minecraft","og_image":[{"url":"https:\/\/cdn.modrinth.com\/data\/neurolag\/icon.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/","name":"NeuroLag - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp","datePublished":"2026-06-06T11:21:33+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/neurolag-icon-f2cb44524581dfeb80c9e9d0a4e576fdc75561cd_96.webp","width":96,"height":79},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/neurolag\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"NeuroLag"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/110153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/110154"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=110153"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=110153"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=110153"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=110153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}