Features
Counting Modesโ
HopperLimiter supports three independent counting strategies. Choose based on how you want to treat block hoppers vs. hopper minecarts.
COMBINEDโ
A single numeric cap covers all hopper types together.
Chunk cap: 50
Block hoppers: 30 + Hopper minecarts: 15 = 45 total โ
Block hoppers: 30 + Hopper minecarts: 25 = 55 total โ โ blocked
Best for simplicity. Players must manage their total hopper footprint without caring about the split.
SEPARATEโ
Block hoppers and hopper minecarts each have their own independent limit.
Block hopper limit: 30 โ current: 28 (OK), placing 3 more โ blocked at 30
Hopper minecart limit: 20 โ current: 19 (OK), placing 2 more โ blocked at 20
Best when you want to allow more of one type than the other.
WEIGHTEDโ
Each hopper type has a cost (weight). The chunk's total weight score must stay at or below the configured maximum.
block-hopper-weight: 1
hopper-minecart-weight: 2
max-weight: 50
20 block hoppers (1ร20) + 10 minecarts (2ร10) = weight 40 โ
20 block hoppers (1ร20) + 16 minecarts (2ร16) = weight 52 โ โ blocked
Best when hopper minecarts are significantly laggier than block hoppers on your setup.
Placement Preventionโ
When a player tries to place a hopper that would exceed the limit, the BlockPlaceEvent is cancelled. The player receives a configurable message showing the current count and cap.
โ You cannot place more than 50 hoppers in this chunk! (50/50)
The block is never actually placed โ no items are lost.
Overflow Handling & Removal Priorityโ
During periodic validation, if a chunk is found to be over its limit, excess hoppers are removed based on the configured removal-priority:
| Priority | Behaviour |
|---|---|
distance | Hoppers farthest from the chunk center are removed first |
y-level | Lowest Y-level hoppers are removed first |
age | Oldest hoppers (by load order) are removed first |
The overflow-action controls what happens to removed hoppers:
| Action | Behaviour |
|---|---|
BREAK | Hopper breaks naturally, dropping its contents as items |
REMOVE | Hopper is silently deleted with no drops |
Use BREAK on survival servers so players don't lose items. Use REMOVE on creative or restricted servers for clean removal.
Periodic Validationโ
A background scanner runs every validation-interval seconds across all loaded chunks. This catches hoppers placed via:
- Commands (e.g.
/setblock) - Pistons pushing hoppers between chunks
- Other plugin interference
The scanner processes chunks-per-tick chunks per scheduler tick to avoid TPS spikes.
Permission Bypassโ
Players with hopperlimiter.bypass can always place hoppers regardless of the chunk limit. This is intended for trusted builders or staff who need freedom without completely disabling the limiter.
Performance Designโ
- No per-tick scanning โ the plugin is purely event-driven for placement prevention
- O(1) chunk lookups โ per-chunk counts are cached in memory; no repeated scans needed
- Configurable validation rate โ spread background scans across ticks to minimize impact