How to Stop Hopper Lag (Limits, Optimizations)
Fix hopper lag minecraft server performance issues with Paper's hopper settings, chunk limits, and alternative item transport designs.
Why Hoppers Are Expensive
Hoppers are one of the most tick-intensive blocks in Minecraft. Every 8 game ticks (0.4 seconds), each hopper performs multiple operations: it checks for items above it, searches for an inventory to push items into, validates item stack sizes, and moves items between inventories. Each of these operations requires the server to load adjacent chunks, look up block states, and interact with the inventory system. A single hopper is negligible. A hundred hoppers in a sorting system are noticeable. A thousand hoppers across a server become a serious source of hopper lag minecraft server administrators must address.
On a typical survival server, hoppers are the number one tile entity performance cost. They often consume more tick time than all mob AI combined. The reason is simple: players build large sorting systems, item collectors under mob farms, and transport chains that span dozens of chunks. Each hopper ticks independently, and the work is synchronous on the main thread.
Paper's Hopper Optimizations
Paper includes several settings that dramatically reduce hopper lag minecraft server setups experience. The most important ones live in paper-world-defaults.yml:
# paper-world-defaults.yml
hopper:
disable-move-event: false # set to true for major perf gain
cooldown-when-full: true # already default
ignore-occluding-blocks: true # skip item search through solid blocks
disable-move-event
This is the single biggest optimization for hopper lag. When set to true, Paper skips firing the InventoryMoveItemEvent for every hopper transfer. This event is used by protection plugins (like GriefPrevention) to check whether a hopper is allowed to pull items from a container. If you do not use a plugin that relies on this event for hopper protection, set it to true. The performance difference is substantial, often 30-50% reduction in hopper-related tick time. If you do need hopper protection, check whether your protection plugin offers an alternative mechanism that does not require this event.
cooldown-when-full
When a hopper tries to push items into a full container, vanilla Minecraft keeps checking every 8 ticks regardless. Paper's cooldown-when-full option makes hoppers wait longer before rechecking a full destination. This prevents chains of hoppers from wasting tick time pushing against full inventories.
ignore-occluding-blocks
Normally, hoppers search for items above them even if a solid block (like stone) sits on top. With ignore-occluding-blocks: true, hoppers skip the item search when covered by a full block. This helps in builds where hoppers are buried under floors with no items to collect.
Limiting Hopper Counts
Config optimizations only reduce the cost per hopper. To truly solve hopper lag minecraft server performance problems, you also need to limit how many hoppers can exist in a given area. The Insights plugin lets you set per-chunk limits:
# Insights config
limits:
HOPPER:
limit: 64
message: "Hopper limit reached in this chunk (64 max)"
A limit of 64 hoppers per chunk is generous enough for reasonable sorting systems while preventing the 500-hopper mega-sorters that destroy TPS. Communicate this limit to your players in the rules or with a wiki page so they can plan builds accordingly.
Alternative Item Transport
Encourage players to use alternatives to hopper chains for long-distance item transport:
- Water streams: Moving items with water flow costs nearly zero tick time because items in water use simple physics rather than inventory operations. Water channels are faster than hopper chains for distances over 8 blocks.
- Dropper/hopper clocks: A single hopper feeding a dropper that shoots items into a water stream combines the collection capability of hoppers with the transport efficiency of water.
- Minecart hoppers: A minecart with hopper riding on powered rails can collect and transport items over long distances with a single entity. This is more efficient than a chain of 50 block hoppers.
- Plugin-based transport: Plugins like Transport Pipes or Slimefun cargo systems move items using scheduled tasks rather than tile entity ticking, which can be more efficient than vanilla hoppers for large setups.
Diagnosing Hopper Lag
To confirm hoppers are your bottleneck, run Spark and check the flame graph for HopperBlockEntity.tryMoveItems or HopperBlockEntity.suckInItems. If these methods appear in the top 10 of your tick profile, hoppers are a significant cost. You can also use /paper dumpentity to count tile entities per chunk and find the chunks with the most hoppers.
Another useful diagnostic is checking the tile entity tick time in Spark's summary view. If "Block Entity Ticking" takes more than 5ms per tick, hoppers are almost always the primary contributor.
Hopper Minecart Considerations
Hopper minecarts deserve special mention because they are entities, not tile entities, and they have a different performance profile. Each hopper minecart searches for items within its pickup range every tick (not every 8 ticks like block hoppers). Large arrays of hopper minecarts can be worse than block hoppers. If players use hopper minecarts, make sure they are moving on rails rather than sitting stationary, since stationary hopper minecarts searching for items continuously are pure waste. Entity-per-chunk limits (see our entity limits guide) help control this.
Fixing hopper lag is one of the highest-return optimizations for survival servers. Between Paper's built-in settings, per-chunk limits, and player education about water-based transport, you can cut hopper-related tick time by 70% or more. For the complete performance optimization walkthrough, check our 20 TPS guide.
Need a server built for performance? Astroworld Hosting runs NVMe SSDs with optimized Paper configs on every plan.