- 09/11/2025
Complete Minecraft Performance Optimization Guide
Spigot, Paper, Pufferfish, Purpur β Essential Settings, Plugins, and Best Practices
ββββββββββββββ
Introduction
ββββββββββββββ
The performance of a Minecraft server depends as much on hardware quality as on how precisely it is configured.
This guide is for administrators who want to get the best out of their setup, whether for a survival, minigame, roleplay, or semi-RP server.
Weβll cover recommended settings for key configuration files (bukkit.yml, spigot.yml, paper.yml, purpur.ymlβ¦), along with tips on Java, hardware, and useful plugins.
The goal: maintain a stable 20 TPS, reduce CPU load, and ensure a smooth experience even with many players or entities.
.
Choosing the Right Base: Spigot, Paper, Pufferfish, or Purpur?
ββββββββββββββ
Spigot: the historical baseβstable and compatible with most plugins, but its optimizations are limited and outdated.
Paper: now the standard choice, offering better multithreading and many configurable optimizations.
Pufferfish: a performance-focused fork of Paper (pathfinding, memory, hoppers). Ideal for large servers.
Purpur: built on Pufferfish, adds hundreds of customization options without sacrificing stability.
In short:
β’ Standard server β Paper
β’ Heavily loaded server β Pufferfish
β’ Custom server β Purpur
β’ Avoid βmiracleβ or paid JARs claiming unreal performance.
.
Render & Simulation Distances
ββββββββββββββ
Key parameters:
β’ simulation-distance β distance where AI, redstone, and entities are active (CPU impact).
β’ view-distance β distance of chunks visible to players (network/rendering impact).
Recommended starting points:
β’ Overworld: simulation 4 / view 8β10
β’ Nether/End: simulation 3β4 / view 6β8
β’ Keep view-distance β₯ simulation-distance for smooth visuals without excess AI.
Where to adjust:
β’ server.properties β simulation-distance & view-distance (global values).
β’ Paper (per world) β paper-world-defaults.yml or each βworldβ file.
β’ mob-spawn-range β spigot.yml β world-settings β default β mob-spawn-range
# spigot.yml (example) world-settings: default: mob-spawn-range: 4 # Recommended 3β6, never above simulation-distance
Why adjust it?
β’ Smaller radii concentrate mobs near players, reducing total entity count.
β’ Keeping mob-spawn-range β€ simulation-distance avoids spawns in inactive chunks.
Additional Paper/Pufferfish options:
β’ prevent-moving-into-unloaded-chunks: true β prevents elytra freeze issues.
β’ delay-chunk-unloads-by: 10s β prevents constant chunk loading/unloading.
.
Optimizing the bukkit.yml File
ββββββββββββββ
The bukkit.yml file controls mob spawn limits and frequency. Default values are often too high.
spawn-limits: sets the maximum number of active mobs per player.
Values that are too high quickly overload the server, especially with multiple players.
spawn-limits: monsters: 40 animals: 8 water-animals: 5 water-ambient: 5 ambient: 1
ticks-per: defines how often Minecraft tries to spawn mobs.
Increasing these values spreads out spawn cycles and relieves CPU load.
ticks-per: animal-spawns: 400 monster-spawns: 10 water-spawns: 20 water-ambient-spawns: 20 ambient-spawns: 20 autosave: 6000
The goal is to reduce unnecessary scans while keeping natural mob activity.
.
Optimizing the spigot.yml File
ββββββββββββββ
spigot.yml contains key parameters influencing entities and redstone.
entity-activation-range:
Defines the distance at which entities become βactive.β
The fewer entities active far from players, the better your performance.
entity-activation-range: animals: 16 monsters: 24 raiders: 48 misc: 8 tick-inactive-villagers: false
entity-tracking-range:
Distance at which entities are visible to players.
Slightly larger than activation-range to prevent pop-ins.
entity-tracking-range: players: 48 animals: 48 monsters: 48 misc: 32 display: 128 other: 64
merge-radius:
Merges ground items and XP to reduce entity count.
merge-radius: item: 4.0 exp: 6.0
Other recommendations:
β’ mob-spawn-range: 4β6
β’ nerf-spawner-mobs: true (disables AI for mobs from spawners)
β’ max-entity-collisions: 2
β’ arrow-despawn-rate: 300
β’ item-despawn-rate: 4000
Combine these settings with balanced spawn limits for smooth performance.
.
Optimizing the paper.yml File
ββββββββββββββ
paper.yml adds extra optimizations for redstone, hoppers, entities, and chunks.
Saving & spawns:
β’ max-auto-save-chunks-per-tick: 6
β’ per-player-mob-spawns: true (balances mob spawns per player)
Despawn ranges:
despawn-ranges: soft: 28 hard: 96
Redstone and hopper optimization:
redstone-implementation: ALTERNATE_CURRENT use-faster-eigencraft-redstone: true hopper: cooldown-when-full: true disable-move-event: true amount: 1
Enable the Alternate Current redstone engine to greatly reduce CPU load from circuits.
.
Optimizing pufferfish.yml & purpur.yml Files
ββββββββββββββ
Pufferfish and Purpur inherit from Paper but offer deeper optimization settings.
Main recommendations:
region-file-cache-size: 256 enable-async-mob-spawning: true entity-collision-optimization: true use-faster-block-entity-ticking: true
Purpur-specific:
villager-brain-ticks: 2 entities-can-use-portals: false
These reduce the impact of complex entities (villagers, ticking blocks, collisions, etc.).
.
Useful Performance Plugins
ββββββββββββββ
β’ Spark β real-time CPU/memory profiling.
β’ FarmLimiter / FarmControl β limits entities in farms.
β’ Plan β overall performance statistics.
Avoid so-called βmiracleβ plugins (LagRemover, UltimateLagFixer, etc.) β theyβre often useless or harmful.
.
Conclusion & Best Practices
ββββββββββββββ
β’ Use Paper, Pufferfish, or Purpur.
β’ Fine-tune distances, AI, and redstone.
β’ Analyze with Spark and monitor your TPS.
β’ Restart properly and back up before updates.
β’ Limit heavy entities (villagers, farms).
Avoid:
β’ βMiracleβ plugins
β’ Extreme settings
β’ Outdated Java versions
In summary:
A proper balance between hardware, configuration, and maintenance = steady 20 TPS and happy players!