Skip to content

Hopper Optimization

Reece Williams edited this page Sep 2, 2026 · 2 revisions

Hopper Optimization

An experimental feature that cuts the CPU cost of idle hoppers by putting them to sleep until there's actually something to move.

Warning

This is experimental and off by default. Test it on a dev or staging server before you turn it on for your live server.

What it does

Vanilla hoppers tick constantly. Every loaded hopper keeps checking for items to move even when it's just sitting there doing nothing. On a busy redstone or storage server with thousands of hoppers, that idle checking eats a big chunk of your CPU every tick.

This feature puts idle hoppers to sleep and only wakes them when there's actually something to move. Hoppers that just did something stay awake and run at full speed. Everything else naps until work shows up. On laggy storage or redstone servers this can cut hopper lag a lot.

Transfers, sorting, filters, and item pickup all still work exactly like vanilla. The only thing that changes is idle hoppers stop burning CPU.

Safe by design

If it can't safely take over hopper handling on your server, it just leaves hoppers on vanilla and does nothing. No harm done.

And if you disable the feature, or the plugin stops for any reason, hoppers go back to normal vanilla behavior on their own shortly after. Nothing gets left frozen or broken.

Requirements

You need a modern Paper server (Paper 1.20.5 or newer). That's it, no other plugins required.

How to use it

The config lives under Hoppers.Optimize in config.yml:

Hoppers:
  Optimize:
    Enabled: false
    AwakeTicks: 60
    SleepTicks: 200
    ItemSweepInterval: 10
    TransferAmount: 1
    DisabledWorlds: []

What each option does:

Option Default What it does
Enabled false Turns the feature on or off. Off by default.
AwakeTicks 60 How long a hopper stays at full speed after it last did something, before going back to sleep. 20 ticks is 1 second.
SleepTicks 200 How long a sleeping hopper naps between checks. Keep it modest.
ItemSweepInterval 10 How often it looks for dropped items sitting on hoppers. Lower is snappier pickup but slightly more CPU.
TransferAmount 1 Items moved per transfer. This uses the server's per-world hopper setting, so it affects every hopper in that world, not just idle ones. Leave it at 1 if you don't want to change transfer speed.
DisabledWorlds [] Worlds to leave on vanilla hoppers. Case-insensitive.

/hopperopt command

Run /hopperopt to see live status and counters. Permission: hopperopt.use.

If the feature is off it just says so (either you left it disabled, or it couldn't safely take over hoppers on your server and stayed out of the way):

[Hoppers] optimizer is OFF.

When it's running it shows how many hoppers it's managing, the current settings, and some counters:

[Hoppers] optimizer ON
 managed: 12345 (hot 12, cold 12333)
 awake 60t, sleep 200t, sweep 10t, amount 1
 wakes: 84213 sweeps: 5120
  • managed: total hoppers being handled, split into awake and sleeping
  • the settings line echoes your current config values
  • wakes: how many times a sleeping hopper woke back up
  • sweeps: how many dropped-item checks have run

Test first

This is experimental, so don't flip Enabled: true on your live server without trying it on a dev or staging server first. Load up your actual builds (sorters, filter systems, big hopper chains, storage setups) and confirm items still flow the way you expect before you trust it in production.

Clone this wiki locally