LagScout
AvailableSpark tells you which code is slow. LagScout tells you which chunk, which farm and which coordinate — by counting real redstone updates, hopper transfers, spawns and chunk loads per chunk. And it keeps watching while nobody is: when the server falls behind at 03:40, it writes down what the worst chunks were at that moment, because by morning the farm has stopped and the chunk has unloaded.
- Admin & Performance
- Player Utilities
- performance
- diagnostics
- lag
- tps
- chunk analysis
- cleanup
What it does
It names the chunk, not the code
A profiler answers "ServerLevel.tickBlockEntities is eating 40% of your tick", which is true and unactionable. LagScout answers "world 312, -88 is firing 4,881 redstone updates a second, there are 46 hoppers in it, and here is the teleport". Events are counted where they happen, per chunk, so the output is somewhere you can walk to rather than a stack frame.
Measured and estimated are never mixed
Event counts are facts about work your server actually did. The entity census is a weighted guess about what it is holding. Every screen keeps them apart and in different colours, because presence is only a proxy for cost — two thousand idle armour stands are cheaper than fifty hoppers in a chain, and a tool that blurs the two is a tool you cannot check.
It works while you are asleep
A lag spike at 03:40 is unanswerable by morning. When TPS or MSPT breaches your thresholds for long enough, LagScout records the ranked chunks as they were at that instant and keeps them. /lagscout history reads it back weeks later, with coordinates. /lagscout snapshot records one on demand, so you can prove the whole path works before you need it to.
It publishes its own overhead
"Trust me, it is cheap" is not good enough from a plugin sold on finding overhead, so /lagscout status prints what LagScout costs. A switched-off meter is not registered with Bukkit at all rather than returning early, block physics is sampled because one piston door fires hundreds of events a tick, and on a quiet server it says "not measured yet" instead of extrapolating a number from three samples.
Cleanup that ships switched off
This is the only part that destroys player property and there is no undo, so nothing is swept until you turn it on and choose the caps. /lagscout preview shows exactly what a sweep would take using the same code path the sweep uses. Named, tamed, leashed, ridden and persistent entities are never removable, nor are armour stands, item frames, paintings, displays, boats or minecarts — and none of that is configurable.
Every diagnostic works from a phone
/lagscout menu is a native Bedrock form with Floodgate installed and a chest menu without it, and every button runs the same command a Java admin would type, so the two cannot drift apart. Coordinates are always printed as plain text next to the clickable teleport, because chat click events do not work on Bedrock.
Compatibility
- Measured per chunk
- Redstone, physics, hopper transfers, spawns, item drops, explosions, chunk loads
- Window
- A sliding 60 seconds by default, in twelve five-second buckets
- Storage
- SQLite for spike history — optional, and losing it costs nothing else
- Dependencies
- None. Floodgate optional, for native Bedrock forms
- Overhead
- Self-measured and printed in /lagscout status
Commands
Permissions default to true for player commands and op for admin ones.
| Command | What it does | Permission |
|---|---|---|
/lagscout | Server health, what is being measured, and what LagScout itself costs. | lagscout.use |
/lagscout scan [world] [count] | Rank the worst chunks right now, with the evidence and a teleport. | lagscout.use |
/lagscout chunk | Everything known about the chunk you are standing in. | lagscout.use |
/lagscout who (player) [radius] | What the area around a player is costing. Proximity, never ownership. | lagscout.use |
/lagscout history [count|#id] | Spikes recorded while nobody was watching, and the chunks behind each one. | lagscout.use |
/lagscout preview · /lagscout clean [items|mobs|all] [world] | What a sweep would remove, and then actually removing it. Same code path. | lagscout.use · lagscout.clean |
/lagscout report [count] | A plain-text report in the plugin folder, for pasting into a support thread. | lagscout.use |
/lagscout watch | Live TPS and MSPT on your action bar while you walk around looking. | lagscout.use |
/lagscout snapshot | Record a spike entry right now, exactly as a real one would be recorded. | lagscout.use |
Before you buy
I already run Spark. Does this replace it?
No, and you should keep Spark — it is excellent and free. Spark samples the JVM and answers "which code is slow". LagScout counts game events per chunk and answers "which farm, at which coordinate, and whose". They are complementary: Spark tells you block entities are the problem, LagScout tells you which forty-six hoppers. Nothing here tries to be a profiler, because doing that badly would be worse than not doing it.
What is the score, in milliseconds?
It is not milliseconds, and LagScout will never pretend it is. Attributing real tick time to an individual chunk is not possible through the Bukkit API — anything claiming to do it is either sampling the JVM or making it up. The score exists to put chunks in order; the counts printed underneath it are the evidence. Retune the weights and the order changes, while the evidence does not.
What does the monitoring itself cost?
Ask it: /lagscout status prints LagScout’s own measured overhead. Three things keep it small — a meter you switch off is never registered with Bukkit, so it costs no dispatch rather than a skipped handler; block physics is sampled one in eight by default because it is by far the highest-volume event in Minecraft; and counting uses a single-entry cache in front of the map, because events arrive in bursts from the same chunk.
Will it delete my players’ things?
Not unless you switch it on, and not the things that matter even then. Automatic cleanup ships off. Anything with a custom name, anything tamed or leashed, anything carrying a passenger, anything the server has marked as not despawning, and every armour stand, item frame, painting, display entity, boat and minecart is permanently excluded — not by a default you can change, but by the code. Preview first: it uses the same code path as the sweep.
Does /lagscout who tell me who built a farm?
No. Minecraft does not record that anywhere, so nothing can. It tells you what the chunks near a player are costing right now, and it prints that caveat every single time it runs. Use it to find machinery — never as grounds for a punishment, because standing near an expensive chunk is not evidence of having made it.
What happens if the database will not open?
LagScout carries on and tells you. You lose the spike history and nothing else — measuring, ranking, cleanup and alerts all still work. Refusing to start over it would take a working diagnostic tool away from you at the exact moment you came looking for one, which is the wrong trade for this plugin even though it is the right one for a plugin that keeps a ban list.