Frostyh Plugins

Plugins / LagCleaner

LagCleaner Coming soon

Finds the chunk that is actually lagging you, takes you there, then keeps it from filling up.

Get LagCleaner

Coming soon Not on sale yet. This page gets a buy button the day it is.

Try it live

LagCleaner runs on a public demo server, set up so you can use it yourself. Join, try it, then decide.

Address: try.zeropvp.xyz:25570 (Java Edition 1.21.11)

In Minecraft: Multiplayer, Add Server, paste the address, Join. Type /demo go lagcleaner to land at its booth, or right-click the compass and pick it. The world resets every night.

Overview

LagCleaner

Find the exact chunk that is lagging your server, jump to it, and stop it filling up again

"There are 4,000 entities" helps nobody. LagCleaner tells you that chunk -42, 17 in world holds 900 dropped items and 60 minecarts, puts a button next to it that teleports you there, and then stops that chunk from filling up again.

A sweep is coming: boss bar and chat warn players to pick up their items.

Latest version
1.1.0
Server
Paper or Purpur, Java 21
BuiltByBit
coming soon
What changed in 1.1.0
  • Sweep countdown bar: a boss bar counts down the last 30 seconds before the timed sweep, so nobody loses their drops by surprise. Players in ignored worlds do not see it. Settings: sweep.boss-bar (on), sweep.boss-bar-seconds (30), sweep.boss-bar-colour (YELLOW). It can also be switched on and off from the /lagcleaner panel.
  • PlaceholderAPI support (optional): %lagcleaner_next_sweep%, %lagcleaner_next_sweep_formatted% (m:ss), %lagcleaner_last_sweep%, %lagcleaner_tps%, %lagcleaner_items%, %lagcleaner_mobs%, %lagcleaner_entities%, %lagcleaner_removed_items%, %lagcleaner_removed_mobs% and %lagcleaner_merged%. Put "Next clear in %lagcleaner_next_sweep_formatted%" on your scoreboard.
  • Tab completion for /lagcleaner sweep loud.
  • The new settings and messages work without touching your config.yml. The countdown bar is on for existing servers too after this update; set sweep.boss-bar: false to keep the old behaviour.

Features

Why server owners pick it

What makes it different

Works with

What you get

Hotspots: the busiest chunks, what fills them, and a button to go there.

The lag panel

The lag panel: TPS, entities per world, next sweep, one-click clean-up.

FAQ

Which servers does it run on?

Paper or Purpur 1.21.11, with Java 21.

Do I need other plugins?

No. It runs on its own.

Is there DRM or a licence key?

No. There is nothing to activate and no licence server to reach, and the code is not obfuscated.

How long does setup take?

Drop the jar into /plugins and restart. The setup guide above has 5 short steps.

Can I try it before I buy?

Yes. This page has a test server with the plugin installed.

Where do I get help?

In the active support Discord, in the discussion tab on this page, or in the documentation.

Do players get a warning before items are cleared?

Yes. A boss bar counts down the last 30 seconds before every timed sweep (sweep.boss-bar).

Updates

Released on September 16, 2026 and updated 4 times since. The latest version is v1.2.0 (October 16, 2026). Every update is free, new Minecraft versions included.

Also by Frostyh

If this plugin helps your server, a short review on this page would mean a lot. Thank you!

Installation

Requirements

Server software
Paper, or a Paper fork such as Purpur. Spigot and CraftBukkit are not supported: the plugin uses Paper-only APIs.
Minecraft version
plugin.yml api-version 1.21; built against Paper API 1.21.11
Java
21 or newer
Required plugins
none
Optional plugins
PlaceholderAPI

Steps

  1. Download LagCleaner.jar from BuiltByBit. There is no licence key to enter.
  2. Stop the server and put the jar into the plugins folder.
  3. Start the server. The plugin creates plugins/LagCleaner/config.yml with the defaults shown under Configuration.
  4. Edit config.yml to suit your server.
  5. Apply the changes with /lagcleaner reload (Read config.yml again), or restart the server.

Setup guide

  1. Drop LagCleaner.jar into /plugins and restart.
  2. Run /lagcleaner and look at the hotspots screen before you change anything.
  3. Set items-per-chunk and mobs-per-chunk to numbers your farms can live with.
  4. Add anything precious to protect.items, and any entity type you never want touched to protect.types.
  5. Leave the throttles at 0 unless a specific farm is the problem. They change how machines behave.

Commands

From plugin.yml. "Not set" in the permission column means plugin.yml attaches no permission to the command itself; the nodes the plugin checks are listed under Permissions.

CommandAliasesUsageDescriptionPermission
/lagcleaner/lag, /clearlag, /lc/lagcleaner [status|hotspots|sweep|trim|reload]The lag panel and its tools.not set

Subcommands in detail

/lagcleaner              The panel.
/lagcleaner status       TPS and entity counts per world.
/lagcleaner hotspots     The busiest chunks.
/lagcleaner sweep [loud] Clear dropped items now.
/lagcleaner trim         Bring every chunk under its limits and merge items.
/lagcleaner reload       Read config.yml again.

Permissions

From plugin.yml.

NodeDefaultDescriptionChildren
lagcleaner.adminoperatorsSee the panel, sweep, trim and reload.none

Placeholders

Registered with PlaceholderAPI under the identifier lagcleaner (LagCleanerPlaceholders.java). PlaceholderAPI must be installed for these to work.

PlaceholderReturns
%lagcleaner_next_sweep%seconds until the timed sweep, or the "never" message when it is off
%lagcleaner_next_sweep_formatted%the same as m:ss
%lagcleaner_last_sweep%items the last sweep took
%lagcleaner_tps%TPS over the last minute, one decimal
%lagcleaner_items%dropped items on the server
%lagcleaner_mobs%living entities, players not counted
%lagcleaner_entities%every entity, players not counted
%lagcleaner_removed_items%items the limits removed since the last reset
%lagcleaner_removed_mobs%entities the limits removed since the last reset
%lagcleaner_merged%stacks merged since the last reset

Configuration reference

The default files as they ship in the jar, with their comments. The plugin writes them to plugins/LagCleaner/ on first start.

config.yml

Top-level keys:

KeyDefaultComment above it
menutrueBare /lagcleaner opens the panel instead of printing the numbers.
ignored-worlds[] (empty list)Worlds this plugin leaves completely alone.
limitssection, 6 keysnone
mergesection, 4 keysnone
sweepsection, 8 keysnone
protectsection, 6 keysWhat is never removed, whatever a chunk looks like.
throttlesection, 3 keysThese change how machines behave, so they are off. Turn one on only when a farm is the problem.
hotspotssection, 1 keynone
themesection, 11 keysEvery message below is written against these names, not against hex codes: <accent>Open</accent> rather than <#7ed957>Open</#7ed957>. Change a colour here and it changes on every screen at once. Ordinary MiniMessage still works, so <gradient:#a:#b> and...
messagessection, 47 keysnone
review-remindertrueOne thank-you line with the BuiltByBit review link: once in the console after install and once in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
plugins/LagCleaner/config.yml
# LagCleaner - entity limits, item merging, a timed sweep, and a hotspot finder.
#
# Everything that deletes something is careful on purpose: named, tamed, leashed and ridden
# entities are skipped, the sweep only touches items that have been lying around, and the throttles
# that change how farms behave are off until you turn them on.

# Bare /lagcleaner opens the panel instead of printing the numbers.
menu: true

# Worlds this plugin leaves completely alone.
ignored-worlds: []

limits:
  every-ticks: 200            # how often the chunks are checked (200 = ten seconds)
  items-per-chunk: 64         # 0 turns the limit off
  mobs-per-chunk: 48
  other-per-chunk: 32         # armour stands, minecarts, boats, projectiles
  only-below-tps: false       # true = only enforce when the server is actually struggling
  tps-threshold: 18.0

merge:
  enabled: true
  every-ticks: 100
  radius: 3.0                 # blocks between two stacks that should become one
  max-stack: 0                # 0 = the item's own stack size

sweep:
  enabled: true
  every-minutes: 15           # 0 turns the timer off
  announce: true
  warn-seconds: [60, 30, 10, 5]
  min-age-ticks: 200          # an item has to have lain there ten seconds before a sweep takes it
  # A boss bar that counts down the last seconds before a timed sweep. false hides it.
  boss-bar: true
  boss-bar-seconds: 30        # how long before the sweep the bar appears
  boss-bar-colour: YELLOW     # PINK, BLUE, RED, GREEN, YELLOW, PURPLE, WHITE

# What is never removed, whatever a chunk looks like.
protect:
  named: true                 # anything with a custom name
  tamed: true
  leashed: true
  carrying-passengers: true
  types: [ARMOR_STAND, ITEM_FRAME, GLOW_ITEM_FRAME, PAINTING, END_CRYSTAL]
  items: [NETHER_STAR, DRAGON_EGG, ELYTRA, TOTEM_OF_UNDYING, BEACON, SHULKER_BOX]

# These change how machines behave, so they are off. Turn one on only when a farm is the problem.
throttle:
  hopper-moves-per-chunk-per-second: 0
  redstone-changes-per-chunk-per-second: 0
  spawner-mobs-per-chunk-per-second: 0

hotspots:
  report-above: 25            # a chunk needs this many entities before it is worth listing

# ------------------------------------------------------------------------------------------------
# THEME
# ------------------------------------------------------------------------------------------------
# Every message below is written against these names, not against hex codes: <accent>Open</accent>
# rather than <#7ed957>Open</#7ed957>. Change a colour here and it changes on every screen at
# once. Ordinary MiniMessage still works, so <gradient:#a:#b> and <#ff0000> are fine anywhere.
theme:
  accent: "#7ed957"     # your colour: headings and anything the player is meant to click
  accent2: "#b8eaa3"    # a lighter accent, for a second level of emphasis
  title: "#f4f7ff"      # screen titles
  text: "#c2ccdd"       # ordinary prose
  muted: "#6b7a94"      # hints, separators, anything the eye should skip
  value: "#ffffff"      # the numbers and names the player opened the screen to read
  good: "#57e08a"
  warn: "#ffc857"
  bad: "#ff6b6b"
  small-caps: false     # ᴇхᴀᴍᴘʟᴇ - a garnish; whole menus in it read badly
  # Real Minecraft item pictures beside the buttons and in the chest screens. Drawn from the
  # client's own textures, so there is nothing to install and no resource pack: it needs a
  # 1.21.9 or newer client, and older ones simply see the buttons as words.
  item-icons: true

messages:
  prefix: "<accent><bold>Lag</bold></accent> <muted>»</muted> "
  no-permission: "<bad>You cannot do that.</bad>"
  reloaded: "<value>Config reloaded.</value>"
  never: "never"
  help: "<text>/lagcleaner · status · hotspots · sweep · trim · reload</text>"
  sweep-warning: "<text>Dropped items are cleared in </text><value>{seconds}s</value><text>. Pick up what you want.</text>"
  sweep-bar: "<warn>Dropped items are cleared in </warn><value>{seconds}s</value>"
  sweep-done: "<text>Cleared </text><value>{count}</value><text> dropped item(s).</text>"
  swept: "<text>Cleared </text><value>{count}</value><text> item(s).</text>"
  trimmed: "<text>Removed {items} item(s) and {mobs} entity(s), merged {merged} stack(s).</text>"

  # The panel. Every line here is a screen title, a button label or a tooltip.
  # The icon rows: a small item beside a bold name and a grey line, so the panel can be scanned.
  row-world: "<accent><bold>{world}</bold></accent>"
  row-world-detail: "<text>{items} items · {mobs} mobs · {other} other · {chunks} chunks</text>"
  row-sweep: "<accent><bold>Next sweep</bold></accent>"
  row-sweep-detail: "<text>in {time}</text>"
  row-removed: "<accent><bold>Cleaned up</bold></accent>"
  row-removed-detail: "<text>{items} items, {mobs} mobs, {merged} stacks merged</text>"
  menu-title: "<value>LagCleaner</value>"
  menu-close: "<white><icon:close></white><text>Close</text>"
  menu-back: "<white><icon:back></white><text>Back</text>"
  menu-back-tip: "<text>Back to the first screen.</text>"
  menu-tps: "<text>Server at </text><value>{tps} TPS</value><text> · {chunks} chunk(s) hitting a throttle</text>"
  menu-world: "<value>{world}</value><text>: {items} items · {mobs} mobs · {other} other · {chunks} chunks loaded</text>"
  menu-next-sweep: "<text>Next sweep in </text><value>{time}</value>"
  menu-removed: "<text>Since the last reset: {items} items and {mobs} entities removed, {merged} stacks merged</text>"
  menu-hotspots: "<white><icon:compass></white><accent>Hotspots</accent>"
  menu-hotspots-tip: "<text>The busiest chunks on the server.</text>"
  menu-hotspots-title: "<value>Hotspots</value>"
  menu-spot: "<value>{world} {x},{z}</value><text> · {total} entities · mostly {worst}</text>"
  menu-spot-go: "<white><icon:teleport></white><value>Go to {x},{z}</value>"
  menu-spot-go-tip: "<text>Teleport above that chunk.</text>"
  menu-no-spots: "<text>No chunk is busy enough to worry about.</text>"
  menu-sweep: "<white><icon:clean></white><value>Clear dropped items now</value>"
  menu-sweep-tip: "<text>Runs the sweep at once, with its warning.</text>"
  menu-trim: "<white><icon:clean></white><value>Trim and merge now</value>"
  menu-trim-tip: "<text>Bring every chunk back under its limits.</text>"
  menu-reset: "<white><icon:dot></white><text>Reset the counters</text>"
  menu-reset-tip: "<text>Start counting removals again from zero.</text>"
  menu-reload: "<white><icon:reload></white><text>Reload config</text>"
  menu-reload-tip: "<text>Read config.yml again.</text>"
  switch-sweep: "Timed sweep"
  switch-sweep-tip: "<text>The clear on a timer, with its warnings.</text>"
  switch-sweep-bar: "Sweep countdown bar"
  switch-sweep-bar-tip: "<text>A boss bar counts down the last seconds before the sweep.</text>"
  switch-merge: "Item merging"
  switch-merge-tip: "<text>Two stacks of the same thing become one.</text>"
  switch-on: "<white><icon:yes></white><good><bold>ON</bold></good>  <value>{title}</value>"
  switch-off: "<white><icon:no></white><bad><bold>OFF</bold></bad> <text>{title}</text>"

# One thank-you line with the BuiltByBit review link: once in the console after install and once
# in chat for the first operator who joins. It never repeats and sends nothing anywhere. false turns it off.
review-reminder: true

Config guide

The annotated summary from the store page. Where it and the default file above differ, the file is what the plugin ships.

menu: true
ignored-worlds: []
limits:
  every-ticks: 200
  items-per-chunk: 64       0 turns it off
  mobs-per-chunk: 48
  other-per-chunk: 32
  only-below-tps: false     true = only when the server is struggling
  tps-threshold: 18.0
merge:
  enabled: true
  radius: 3.0
sweep:
  every-minutes: 15         0 turns the timer off
  warn-seconds: [60, 30, 10, 5]
  min-age-ticks: 200
protect:
  named: true
  tamed: true
  leashed: true
  types: [ARMOR_STAND, ITEM_FRAME, GLOW_ITEM_FRAME, PAINTING, END_CRYSTAL]
  items: [NETHER_STAR, DRAGON_EGG, ELYTRA, TOTEM_OF_UNDYING, BEACON, SHULKER_BOX]
throttle:
  hopper-moves-per-chunk-per-second: 0
  redstone-changes-per-chunk-per-second: 0
  spawner-mobs-per-chunk-per-second: 0

FAQ

Which servers and versions does it run on?

It needs Paper or a Paper fork such as Purpur, because it uses Paper-only APIs (the dialog API for its menus, Adventure text components). Spigot and CraftBukkit are not supported. plugin.yml declares api-version 1.21, the jar is built against Paper API 1.21.11, and it needs Java 21 or newer.

Does it need other plugins?

No other plugin is required (plugin.yml has no hard dependencies). Optional: PlaceholderAPI (plugin.yml softdepend), used when present.

How do I apply config changes?

Edit plugins/LagCleaner/config.yml and run /lagcleaner reload (read config.yml again). A restart works too.

Does it run on Folia, or for Bedrock players?

Not tested on Folia, and plugin.yml does not declare folia-supported. Bedrock players (through Geyser) have not been tested either.

What licence do I get?

The licence terms are the BuiltByBit EULA shown on the listing. There is no licence key to enter, and the plugin never contacts a licence server.