Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
Optimization you can measure. Nothing that breaks your server. And when it lags - you find out why.
Most "optimization" plugins either repeat settings Paper already has, or save CPU by switching the game off. TickWarden shows you where the lag actually is, keeps a journal of every lag incident with what was going on at that moment, tells you which settings fix it, and handles the things a config file cannot. Free, no required dependencies, no telemetry. One jar for Paper, Purpur and Folia, 1.21.4 - 1.21.11 and 26.x.
The usual tricks
Lag plugins tend to save CPU in ways players notice first:
- cancelling all mob spawning when TPS dips - breeding and spawners included
- switching redstone off, stopping hoppers and water flow under load
- rewriting gamerules such as
randomTickSpeed, which then stay in your world save - per-chunk projectile limits that stop bows working once a few arrows lie on the ground
- deleting mobs and items on a timer, farms included
- replacing mob AI through server internals, which breaks with every Minecraft update
- re-implementing options Paper already ships as a single config line
- sending telemetry and profiler data home by default
TickWarden does none of these.
How TickWarden is different
- Paper API only. No NMS, no reflection. Nothing to break when Minecraft updates - the same jar runs on 1.21.4 and on 26.2.
- Nothing is saved into your worlds. Remove the plugin and the server is exactly as it was. The one setting it changes on the fly - simulation distance under heavy lag - is announced to admins, restored by itself and never written to disk.
- The effect is visible.
/tickwarden reportshows tick times and what every module did. - No network requests. No telemetry, no update checker. The only request it can ever make is a Discord webhook - if you set one yourself.
Lag incident journal - "why did it lag?"
"The server lagged last night" is useless without knowing where. When the server stalls, TickWarden takes a snapshot of the world at that moment and keeps it:
- the most crowded chunks and which player stood next to them
- new chunks being generated, and near whom - an elytra flight into fresh terrain is one of the most common causes
- redstone activity and running clocks
- players online, entities and chunks per world
Then it names the likely cause in plain words: "139 new chunks generated in world near Steve", "crowded chunk world 120, -40: 1400 entities, mostly Chicken", "redstone - 48000 updates a second, busiest world 60, 60 (a clock, never stops)". When nothing in the world stands out, it says so honestly and points you to spark - a lag from a plugin is not something a world snapshot can see.
- A run of spikes from the same cause is one incident, not forty lines of spam.
- Online admins get a chat message when an incident starts - click it for the details, click a chunk to teleport there.
/tickwarden incidentslists the incidents since start,/tickwarden incident <n>shows one in full.- Every incident is written to
plugins/TickWarden/incidents/<date>.log, old files are cleaned up after 14 days. - Optional: each finished incident is posted to a Discord channel.
A snapshot costs about 1 ms per 1000 entities and is taken once per incident, not every tick.
Tick monitor - /tickwarden report
Average, 95th percentile and worst tick over the last 10 seconds, 1, 5 and 15 minutes, with real TPS for each window. Below them - lag spikes, incidents and what every module did since start, so "it lagged a minute ago" becomes a number you can compare after every change.
Lag scanner - /tickwarden scan
The chunks with the most entities, the most block entities (hoppers, chests, furnaces) and the most redstone, with a breakdown by type - "93: 60 chickens, 33 items". Click a line to teleport there. Read-only: it shows you where to look and never decides whose farm has to go.
Redstone watch
A clock left running in a forgotten corner of a base keeps the server busy day and night, long after its owner stopped caring. TickWarden counts redstone signal changes and piston moves in every chunk. A chunk that stays busy nearly every second for 30 seconds is a clock - it shows up in /tickwarden scan with "nonstop for 2h 14m" and in lag incidents.
Farms driven by a clock (kelp, bamboo) show up too, on purpose: look first, then decide. If you want, TickWarden can break clocks that ran nonstop for 10 minutes - the busiest repeater, comparator or observer drops as an item and admins are told where. That option is off by default: it breaks players' builds.
Measured: 640 observer clocks (49 000 updates a second) - the cost of watching them is lost in measurement noise.
Adaptive simulation distance
When the server keeps falling behind - the average tick over 50 ms for 20 seconds - chunks around players tick in a smaller radius: one step down, then another if that was not enough, never below 5. When the load drops, the distance comes back one step a minute. Admins get a chat message each way.
Players see the world as before - view distance is not touched - but crops, mobs and farms at the edge of the radius pause until the distance is back. A single long freeze, such as a world save, does not count - only lag that lasts. Nothing is written to server.properties or the worlds: after a restart, or /tickwarden reload, the distance is your own again. Turn it off with one line if you prefer the server to just lag.
Config advisor - /tickwarden advise
The biggest performance gains on Paper come from its configuration, not from plugins. The advisor reads server.properties, bukkit.yml, spigot.yml and both Paper configs and runs 38 checks: simulation distance, entity activation and tracking ranges, entity collisions, spawn limits, despawn ranges, redstone implementation, hopper events, villager sensors, treasure map searches, chunk save limits and more.
Every recommendation says three things: what the setting costs the server, what to set it to, and what players will notice after the change - so you decide with your eyes open. Hover a line in chat for the explanation. It never edits your files: Paper's configs are full of comments, and the change needs a restart anyway.
Per-world overrides in paper-world.yml are detected and reported. Checks are verified against the default configs of every supported version; a check that does not exist in your Paper version is skipped, not guessed.
Impact ratings follow measurements, not folklore. Lowering max-entity-collisions from 8 to 2 - a favourite of every optimization guide - cut about 10% of the tick in cramming-style pens (40 animals in 3×3 blocks) and nothing at all in ordinary pens where animals have room. So the advisor rates it medium and says exactly where it helps.
Crowd control
In a pen with sixty cows every one of them keeps choosing a random spot, pathfinding to it and pushing its neighbours - none of it visible, all of it paid for every tick. When a chunk holds 16 or more farm animals, TickWarden makes them stand still instead.
Everything that matters still works exactly as in vanilla, because it is done with Paper's own mob goal API: breeding, following a player holding food, panicking when hit, floating in water, sheared sheep eating grass to regrow wool. Babies and pets are never touched. The goal is not saved to the world - restart or remove the plugin and the animals behave as before.
Measured on a test server (960 animals in 16 packed pens, animals active as if a player stood next to them, three alternating 60-second runs each way):
| Average tick | |
|---|---|
| Crowd control off | 8.75 ms |
| Crowd control on | 7.17 ms |
That is 18% of the whole tick on that server, and about 60% of what wandering animals cost. On 1.21.4 - 26.1.2 the same test gave 14-21%. We also verified with it on: animals set to breed produced calves, hit animals ran, sheared sheep regrew wool, and settled cows and sheep turned and followed a player holding wheat.
It only matters for pens near players - vanilla already stops animals wandering when nobody is within 32 blocks. But that is exactly where your players are: next to their farms.
Breed cap
The biggest entity lag on a survival server is rarely monsters. It is the pen someone has fed wheat for months. When there are already 64 animals of the same type within 16 blocks (96 for chickens), breeding and thrown eggs produce no babies - and the player feeding them sees why in the action bar, in their own language, instead of reporting a bug.
Folia
The same jar runs on Folia - with every module, not a cut-down mode. Folia has no single server tick: regions tick in parallel, each on its own thread. So everything TickWarden measures "per server" on Paper, it measures per region there:
/tickwarden reportshows all region ticks together (average, p95, worst, how many ran behind schedule) and a table of regions - TPS, MSPT, where it is and which players are in it. Lagging regions come first; click one to teleport.- Lag incidents name the region that lagged, and count entities and chunks in the lagging regions only. Spikes in several regions at once are one incident with the list of regions. The global region (console, commands, time and weather) falling behind is caught too.
/tickwarden scanlets every region count its own chunks. A region lagging so hard that it does not answer in 5 seconds is left out - and the scan says so.- Adaptive simulation distance is decided per region: only the players of the lagging region get a lower distance, the worlds keep theirs. Leave that region and your normal distance is back within a second.
- Redstone watch counts on the region threads; a clock is broken on the thread of its own region.
- Placeholders
tpsandmsptare of the player's own region. - Crowd control and the breed cap work as on Paper.
Still Paper API only: no Folia-specific dependency and no server internals. Tested on Folia 1.21.11 and 26.2 with several regions ticking in parallel.
PlaceholderAPI
Optional. With PlaceholderAPI installed, put server health on a scoreboard, in TAB or on a hologram:
| Placeholder | Value |
|---|---|
%tickwarden_tps% |
TPS over the last minute (on Folia - of the player's region) |
%tickwarden_mspt% |
Average tick over the last minute, ms (on Folia - of the player's region, over 5 s) |
%tickwarden_mspt_color% |
The same, colored green / yellow / red |
%tickwarden_incidents_today% |
Lag incidents since midnight (survives restarts) |
%tickwarden_last_incident% |
Time since the last lag incident ended |
%tickwarden_simdistance% |
Current simulation distance |
%tickwarden_redstone_clocks% |
Redstone clocks running now |
On 26.x use PlaceholderAPI 2.12 or newer - older versions do not start there.
Commands
| Command | What it does |
|---|---|
/tickwarden report |
Tick times, lag spikes, incidents, what the modules did |
/tickwarden incidents |
Lag incidents since start |
/tickwarden incident [n] |
One incident in full: cause, crowded chunks, players nearby |
/tickwarden scan |
Chunks with the most entities, block entities and redstone |
/tickwarden advise |
Settings worth changing (all for minor ones too) |
/tickwarden reload |
Apply config changes without a restart |
Alias /tw. Permissions: tickwarden.admin - the commands, tickwarden.notify - chat messages about lag incidents, simulation distance and broken clocks. Both are op by default.
Configuration
incidents:
enabled: true
spike-ms: 150 # a single tick this long opens an incident
sustained-mspt: 50 # ...and so does a 5-second average this high
notify-admins: true
discord-webhook: "" # empty = off
keep-days: 14
redstone:
enabled: true
clock-seconds: 30
break-clocks: false
adaptive-distance:
enabled: true
lag-mspt: 50
min-distance: 5
crowd-control:
enabled: true
crowd-size: 16
entity-types: [COW, MOOSHROOM, SHEEP, PIG, CHICKEN]
breed-cap:
enabled: true
radius: 16
limit: 64
limits:
CHICKEN: 96
advisor:
language: en # or ru
ignore: [] # checks you decided to keep as they are
Every message is in the config. English and Russian - config-ru.yml lands next to your config on first start, including Russian explanations for every advisor check.
Requirements
| Server | Paper, Purpur or Folia 1.21.4 - 1.21.11, 26.1 - 26.2 |
| Tested on | Paper 1.21.4, 1.21.8, 1.21.11, 26.1.2, 26.2; Folia 1.21.11, 26.2 |
| Java | 21 or newer |
| Dependencies | none; PlaceholderAPI optional |
What it does not do
- It does not delete entities, clear ground items or kill mobs on a timer. If you want that, the scanner shows you where to do it by hand.
- It does not touch redstone, spawning or gamerules when TPS drops. The only automatic reaction to lag is the simulation distance, and it is announced and undone by itself.
- It is not a profiler. For "which plugin is slow", use spark - TickWarden answers "where in my world is the load, what was going on when it lagged, and what do I change".
Support
Bug reports are welcome and get priority over feature requests. A report with your config, /tickwarden report output, the incident from /tickwarden incident and the relevant log lines gets fixed fastest.


