Lodehost logoLodehost

Performance and fixes

Tune bukkit.yml, spigot.yml and the Paper config without breaking your farms

Once spark has shown that the world itself eats the tick, the next stop is a few YAML files most owners never open. A handful of keys decide how many mobs exist, how often distant entities think, how hoppers poll and how redstone dust updates. Each one trades work for a change in gameplay, so here is every default, what a new value does, and who will feel it.

9 min read

Three stacked configuration files with sliders beside a tick timer
Small changes in three files decide how much work fits into each 50 millisecond tick.

Which file holds what

Paper, and Purpur on top of it, spreads its settings over several files. The names below are the ones Paper 26.2 uses. None of these keys are on the Settings tab, which covers server.properties only, so you edit them on the Files tab.

FileWhat it holds for this guide
bukkit.ymlSpawn limits, spawn attempt intervals and the save interval
spigot.ymlEntity activation range, merge radius and hopper timing, under world-settings
config/paper-world-defaults.ymlPer-player spawns, despawn ranges, collisions, chunk saves, hopper and redstone options
world/dimensions/minecraft/the_nether/paper-world.ymlOverrides for one dimension, here the Nether
config/paper-global.ymlServer-wide Paper options; none of the keys below live here

A paper-world.yml only needs the keys that should differ; the rest comes from paper-world-defaults.yml.

Two links between files matter. spawn-limits and ticks-per-spawn in the Paper world config read -1, which means the numbers in bukkit.yml apply. In spigot.yml, a section named after a world key such as minecraft:the_nether overrides world-settings.default for that dimension.

Measure server performance, change one Paper setting and compare
Measure the actual problem before tuning settings. Change one setting at a time and compare under similar load; the graphic contains no benchmark results. View larger.

Take a baseline before you touch anything

A value only helps if you can show the difference. Paper ships spark from 1.21 on. Pick a busy moment you can repeat, such as the evening peak with players at the main farm, and record it:

Console tab, no leading slash

spark health
spark profiler start --timeout 300
spark tickmonitor --threshold-tick 50

Note the median and maximum tick durations and keep the profiler link. tickmonitor reports each tick over 50 milliseconds, so you see whether the trouble is steady or comes in spikes. The spark guide explains the report; here it matters whether entities, block entities or chunk saving lead the tree.

On the Files tab, press Download next to bukkit.yml, spigot.yml and the files in config first. Uploading the old file puts a bad change back exactly.

Entity activation range in spigot.yml

Inside the simulation distance every mob is loaded, but it does not have to think at full speed. Activation range is the distance in blocks around a player where entities tick normally. Further out they tick less often, woken now and then for a short burst. Vanilla has no such range, listed as 0.

Key under entity-activation-rangeDefaultCovers
animals32Cows, sheep, chickens and other passive mobs
monsters32Hostile mobs on the ground
raiders64Pillagers and the rest of a raid
misc16Dropped items and other small entities
water16Fish, squid and other water mobs
villagers32Villagers
flying-monsters32Phantoms, ghasts and other flyers

Lowering animals and monsters a few blocks cuts the cost of big pens and caves full of mobs nobody is near. Lowering misc has a catch the Paper documentation spells out: outside that range, items riding a water stream can stutter, rubber-band or seem to move backwards. Long item transport lines far from players show it first.

  • Farm players notice that mobs outside the range of the AFK spot act in bursts instead of steadily.
  • Raid farms keep raiders fully active up to 64 blocks away; a smaller number slows more of the raid.
  • `tick-inactive-villagers` is true, so villagers keep ticking outside their range. false saves work in large trading halls, but distant villagers then only tick during short wake-up bursts.

Item and experience merging

SettingFileDefaultRaising or enabling it
merge-radius.itemspigot.yml0.5Dropped items combine across a wider gap, so a pile becomes fewer entities
merge-radius.expspigot.yml-1 (off)Orbs combine when they appear; vanilla does not do this
experience-merge-max-valuepaper-world-defaults.yml-1 (no cap)A cap stops orbs from merging into one huge orb
only-merge-items-horizontallypaper-world-defaults.ymlfalseItems on different heights no longer merge, as in vanilla

Merging pays at item farms that drop hundreds of items on one spot, since every separate item is an entity to move and check. Raise the item radius in small steps: the larger it gets, the further stacks travel to join, and players at a collection point see drops hop across the floor.

chunks.entity-per-chunk-save-limit in the Paper world config caps how many entities of one type a chunk saves and loads. It reads -1, no limit, for experience orbs, snowballs, ender pearls, arrows, fireballs and small fireballs, and any entity type can be added. A limit on arrows keeps a skeleton farm floor from reloading every stray arrow; whatever is over the limit is gone after the next load.

Spawn limits, spawn intervals and per-player spawns

bukkit.yml, the defaults

spawn-limits:
    monsters: 70
    animals: 10
    water-animals: 5
    water-ambient: 20
    water-underground-creature: 5
    axolotls: 5
    ambient: 15
ticks-per:
    animal-spawns: 400
    monster-spawns: 1
    water-spawns: 1
    water-ambient-spawns: 1
    water-underground-creature-spawns: 1
    axolotl-spawns: 1
    ambient-spawns: 1
    autosave: 6000

A spawn limit is the mob cap for that group, scaled by the loaded chunks around players divided by 289, the 17 by 17 square around one player. ticks-per counts the ticks between spawn attempts: 1 tries every tick, animals only every 400 ticks, 20 seconds.

per-player-mob-spawns in the Paper world config is true, unlike vanilla. The cap is counted per player, so one person's dark caves cannot use up everyone's monsters, with about the same total spread more fairly.

ChangeWhat it savesWho notices
monsters from 70 to 50Fewer hostile mobs loaded at onceMob farm owners: fewer drops per hour
monster-spawns from 1 to 2Half as many spawn attemptsMob farms fill more slowly; caves feel emptier
ambient from 15 to 5Fewer batsAlmost nobody
water-ambient from 20 to 10Fewer fish in oceansPlayers with fish farms
animal-spawns above 400Very little, it already waits 20 secondsUsually not worth it

Farms are built for the vanilla numbers

Farm tutorials quote rates for the vanilla cap. Tell your builders what you lowered, or the first complaint will be that a proven design is broken.

Despawn ranges in the Paper world config

Vanilla removes a mob outright once it is more than 128 blocks from every player, and beyond 32 blocks it may disappear at random. Fish and other water ambient mobs go at 64 instead of 128. Paper sets both numbers per mob category under entities.spawning.despawn-ranges: hard is the outright distance, soft the random one, and both read default until changed.

config/paper-world-defaults.yml

entities:
  spawning:
    despawn-ranges:
      monster:
        hard: 96
        soft: 32

A lower hard range clears hostile mobs sooner after players walk off, so the cap is not held by mobs nobody will meet. despawn-range-shape stays ELLIPSOID, the vanilla shape; CYLINDER checks height apart from a round horizontal range.

Sky farms and perimeter farms

Natural spawning still reaches 128 blocks from a player. A farm with its AFK spot high above the spawning floor, or beside a dug out perimeter, needs mobs to survive at that distance. Measure from the AFK spot to the far platforms before going under 128.

Hoppers and redstone

SettingFileDefaultEffect of changing it
ticks-per.hopper-transferspigot.yml8Ticks between item moves; higher makes every hopper slower
ticks-per.hopper-checkspigot.yml1Ticks between checks for items to pull
hopper-amountspigot.yml1Items moved per transfer, up to a stack
hopper.cooldown-when-fullpaper-world-defaults.ymltrueA full hopper waits instead of retrying every tick
hopper.disable-move-eventpaper-world-defaults.ymlfalseMuch faster hoppers, but protection plugins stop seeing hopper moves
hopper.ignore-occluding-blockspaper-world-defaults.ymlfalseHoppers skip containers hidden inside solid blocks

At 8 ticks a hopper moves 2.5 items per second, the vanilla speed sorters, hopper clocks and storage systems are timed around. At 16, hoppers move items half as often and every sorter runs at half speed or backs up. Raising hopper-amount alongside keeps throughput but moves items in lumps that single-item filters do not expect. Redstone players notice either change on the first test run.

Keep disable-move-event off on any server with claims or a block logger, because those plugins use that event to stop hoppers draining protected chests.

misc.redstone-implementation is VANILLA. ALTERNATE_CURRENT and EIGENCRAFT compute redstone dust with far fewer block updates, which helps when long dust lines show up in the profile. Both change dust behaviour. Alternate Current makes the update order independent of where a wire sits, where vanilla's depends on location. It aims to stay close to vanilla, but builds tuned to vanilla update order may act differently.

Collisions and chunk saves

collisions.max-entity-collisions is 8, where vanilla has no practical limit. Past that many, the server stops processing further collisions for an entity, which counts in crowded pens and mob chambers. A lower number saves more, but crowded mobs push each other less, so farms that rely on mobs shoving each other into a water stream can slow down. An old max-entity-collisions in spigot.yml is taken over by Paper.

collisions.only-players-collide is false. Set to true, a collision is only calculated when a player is one of the two, which ends mob against mob pushing everywhere, farms and sorters included.

Saving is disk work inside the tick. ticks-per.autosave in bukkit.yml is 6000 ticks, five minutes, and chunks.auto-save-interval follows it while it reads default. chunks.max-auto-save-chunks-per-tick is 24, against 200 in vanilla, so a save spreads over more ticks. If tickmonitor shows a spike every five minutes, lower that number first. Nobody notices this one in game.

A careful order to change them

  1. Start with what players cannot see

    Lower max-auto-save-chunks-per-tick if saves spike, lower the ambient limit, and check that hopper.cooldown-when-full is still true. Press Restart and repeat the baseline.

  2. Then activation range

    Bring animals and monsters down a few blocks at a time. Leave misc and water alone where items travel through water.

  3. Then merging and save limits

    Raise the merge radius a little and add limits for the entity types that pile up in your farms.

  4. Spawn limits and despawn ranges with notice

    These change farm rates. Announce the numbers, change one, and measure the same moment as the baseline.

  5. Hoppers, collisions and redstone last

    Try these on a copy of the server with the builds that matter before the live world gets them.

Change one file per restart and write down what changed. A broken YAML indent can stop the server from starting, so watch the console after each save. If ticks stay slow, look at how far the world ticks around players and terrain generated while players explore.

Written and checked by the Lodehost team, last reviewed on 14 September 2026.

FAQ

Questions about Paper lag settings

What entity activation range should I use in spigot.yml?

There is no single right number. Start from 32 for animals and monsters, lower them a few blocks at a time while comparing tick times, and stop when farm owners report sluggish mobs.

Where is paper.yml in new Paper versions?

It is no longer one file. Paper uses config/paper-global.yml for server-wide options, config/paper-world-defaults.yml for world options, and a paper-world.yml in a dimension folder for overrides.

Does Alternate Current break redstone?

It replaces the location-dependent update order of vanilla dust. It aims to stay close to vanilla, but contraptions tuned to that order can behave differently, so test important builds on a copy.

Do these settings work on Purpur?

Yes. Purpur runs on Paper and reads bukkit.yml, spigot.yml and the Paper config files the same way, with its own purpur.yml on top.

Why is my mob farm slower on Paper than in singleplayer?

Check four keys before rebuilding it: per-player mob spawns, the monster spawn limit, entity activation range and the collision limit of 8.

Every config file one tab away.

The Files tab opens spigot.yml, bukkit.yml and the Paper config in an editor, and the Console tab runs spark without a slash.

See the features