-
Notifications
You must be signed in to change notification settings - Fork 5
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.
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.
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.
You need a modern Paper server (Paper 1.20.5 or newer). That's it, no other plugins required.
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. |
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
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.
Getting started
Features
- Core Features
- Chat
- World and Mob Protections
- Moderation
- Events, Cooldowns and Tasks
- Utilities and Misc
- Hopper Optimization