Back to Blog
hopperstpsoptimizationpaperspigotcontainersperformance

Minecraft Server Hopper & Container Optimization: Stop Hoppers from Destroying Your TPS

Published on August 24, 2026

# Minecraft Server Hopper & Container Optimization: Stop Hoppers from Destroying Your TPS

If you've ever profiled a heavily loaded Minecraft server and wondered why TPS is tanking without any obvious cause, hoppers are frequently the culprit. A single hopper checks for items to move every 8 game ticks by default — and a base with a few hundred hoppers in an automated farm can easily consume 10–20% of your server's total tick budget. This guide explains exactly what's happening under the hood and how to fix it.

Why Hoppers Are So Expensive

Every hopper on the server executes logic during the tile entity phase of the tick loop. This includes:

  • Checking the inventory above for items to pull
  • Scanning item entities in its collection area (a 1×1×1 block space above the hopper)
  • Pushing items into the container below or in the direction it faces
  • Cooldown tracking to throttle transfer speed

The problem compounds when players build large sorting systems, storage arrays, or item farms. A mid-sized survival server might have 5,000–20,000 hoppers loaded at once across all player bases. With default settings, each one ticks every 8 game ticks — that's 2.5 times per second per hopper. Multiply that by 10,000 hoppers and you're looking at 25,000 hopper tick operations per second, all on the main thread.

This is why hopper lag rarely shows up as a single massive spike — it's a slow, creeping drain that keeps your TPS persistently below 20.

Key Configuration Settings

bukkit.yml — Hopper Tick Rate

The most impactful setting is in bukkit.yml:

ticks-per:

hopper-transfer: 8

hopper-check: 1

  • hopper-transfer controls how many ticks between each item transfer attempt. The default is 8. Increasing this to 16 or even 24 significantly reduces hopper overhead with minimal gameplay impact on farms — items just move slightly slower.
  • hopper-check controls how often hoppers check for nearby item entities on the ground. Increasing this to 8 or 16 reduces entity scanning cost considerably. Most players won't notice items take a fraction of a second longer to get sucked in.

Recommended values for busy servers:

ticks-per:

hopper-transfer: 16

hopper-check: 8

paper-world.yml — Hopper-Specific Optimizations

Paper adds several hopper optimizations in paper-world.yml (per-world configuration in newer Paper versions):

hopper:

cooldown-when-full: true

disable-move-event: false

ignore-occluding-blocks: true

  • cooldown-when-full — When set to true, a hopper that tries to push items into a full container will enter a cooldown instead of retrying every tick. This is a massive win for full storage arrays and should always be enabled.
  • disable-move-event — Setting this to true disables the InventoryMoveItemEvent for hoppers. This breaks plugins that listen to hopper movements (like some shop or log plugins), but if you don't use any, it can cut hopper CPU cost by 30–50%. Check your plugin list before enabling.
  • ignore-occluding-blocks — Allows hoppers to collect items through certain blocks, which reduces the need for complicated farm designs and is enabled by default in recent Paper builds.

spigot.yml — Hopper and Container Merging

world-settings:

default:

hopper-amount: 1

hopper-can-load-chunks: false

  • hopper-can-load-chunks — Keep this false. If true, hoppers can force-load chunks, which is a serious performance issue when players build hopper lines near chunk borders.
  • hopper-amount — Controls items transferred per hopper operation. Increasing this (e.g., to 3 or 8) means fewer operations are needed to transfer the same amount of items, reducing total tick time. This is a great trade-off for servers where item throughput matters but tick cost is high.

Purpur and Pufferfish Extras

If you're running Purpur, check purpur.yml for:

world-settings:

default:

hopper:

cooldown-when-full: true

ignore-occluding-blocks: true

Pufferfish includes async hopper optimizations that offload some container scanning away from the main thread. If you're on a high-player-count server and haven't tried Pufferfish (or its fork Purpur-based builds), it's worth evaluating.

Practical Strategies to Reduce Hopper Count

Configuration alone won't save you if players build irresponsible farms. Consider these server-side approaches:

1. Per-Player or Per-Chunk Hopper Limits

Plugins like ClearLag, HopperLimiter, or custom Paper plugins can cap the number of hoppers per chunk or per player. A reasonable limit for survival servers is 64 hoppers per chunk.

2. Educate Your Players

Many players don't know that hopper pipes are expensive. Sharing a simple guide encouraging the use of:

  • Dropper chains (cheaper than hoppers for bulk movement)
  • Mod-based alternatives on modded servers (pipes, conveyor belts)
  • Condensed sorters using fewer hoppers through clever filter designs

...can make a meaningful difference on community servers.

3. WorldGuard Region Flags

Use WorldGuard to restrict hopper placement in certain zones — particularly near spawn or in public areas where uncontrolled farms could appear.

How to Diagnose Hopper Lag

Use spark to identify hopper-related lag:

/spark profiler --thread *

Look for HopperBlockEntity or TileEntityHopper in the profiler output. If it's consuming more than 5% of tick time, your hopper settings need attention.

Tools like [PulseNode](https://pulsenode.tech) can surface these patterns automatically — tracking TPS trends over time and flagging when tile entity overhead starts creeping up, so you catch the problem before players notice lag.

Recommended Config Summary

| File | Setting | Default | Recommended |

|------|---------|---------|-------------|

| bukkit.yml | hopper-transfer | 8 | 16 |

| bukkit.yml | hopper-check | 1 | 8 |

| paper-world.yml | cooldown-when-full | true | true |

| paper-world.yml | disable-move-event | false | true* |

| spigot.yml | hopper-amount | 1 | 3–8 |

| spigot.yml | hopper-can-load-chunks | false | false |

*Only if no plugins rely on InventoryMoveItemEvent

Final Thoughts

Hoppers are deceptively expensive because their cost is distributed and invisible until you profile deeply. The combination of increasing transfer tick intervals, enabling full-container cooldowns, disabling unnecessary inventory move events, and setting reasonable hopper limits can recover 5–15% of your total server tick budget — without any noticeable gameplay impact for most players.

Start with bukkit.yml and paper-world.yml changes, profile with spark before and after, and iterate from there. Small incremental wins on tile entity performance add up quickly on busy servers.

---

Want to know when hopper lag is building up before it ruins your players' experience? [PulseNode](https://pulsenode.tech) monitors your server's TPS, memory, and performance trends in real time — so you can spot creeping tile entity overhead the moment it starts, not after your players start complaining.

Optimize your server performance?

PulseNode monitors your Minecraft server in real-time and gives you AI-powered optimization tips.

Start for free
Minecraft Server Hopper & Container Optimization: Stop Hoppers from Destroying Your TPS — PulseNode Blog | PulseNode