All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Drop Stacker

Drop Stacker

by suwizx_ • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Drop Stacker

A Fabric mod for Minecraft that automatically stacks dropped item entities on the ground into a single entity, reducing entity lag and keeping your world tidy.

Features

  • Instant Merging: New drops are absorbed into a nearby pile the moment they spawn — in the same tick, not after a scan interval. A mob's drops collapse before you see them land.
  • Whole-Pile Collapse: Each merge pass drains every compatible neighbour at once, so a 100-item pile becomes one entity in a single pass instead of one item per pass.
  • Limitless Piles: Stacks beyond vanilla's 64-item limit — up to your configured maxStackSize, with per-item overrides.
  • Visual Feedback: Colorful stack count label displayed above items (configurable thresholds).
  • Despawn Timer: Optional countdown on the label with urgency-based color coding (supports infinite items with ∞).
  • Adaptive Scanning: Idle piles progressively back off from scanning (up to maxScanInterval), so a world full of settled items costs almost nothing. Safe because new drops push into piles on spawn rather than waiting to be polled.
  • Item Rules: Blacklist, whitelist, and per-item stack-size overrides — all accepting item tags (#minecraft:logs) as well as exact ids.
  • Runtime Control: /dropstacker reloads config, reports stats, and tunes settings without a restart.
  • Respects Named Items: An item entity with its own custom name is never relabelled or silently absorbed into another pile.
  • Vanilla Parity: Merging honours vanilla's infinite-lifetime, near-despawn, and infinite-pickup-delay guards, and keeps the longest pickup delay so merging can't shorten it.
  • Server-Side Only: All logic runs on the server. Vanilla clients see counts and timers with no mod installed.

Requirements

Commands

/dropstacker requires permission level 2 (gamemasters).

Command Description
/dropstacker reload Reload the config file from disk
/dropstacker stats Merge passes, entities collapsed, and current settings
/dropstacker resetstats Reset the counters
/dropstacker toggle Enable/disable stacking at runtime
/dropstacker set maxStackSize <n> Change the stack cap
/dropstacker set scanInterval <n> Change the scan interval
/dropstacker set radius <n> Change the horizontal scan radius
/dropstacker set verticalRadius <n> Change the vertical scan radius

Configuration

The config file is created automatically at .minecraft/config/drop-stacker.json (or config/drop-stacker.json on a server). Fields update automatically on restart if you upgrade the mod.

{
  "enabled": true,
  "mergeOnSpawn": true,
  "maxStackSize": 1000,
  "radius": 5.0,
  "verticalRadius": 2.0,
  "scanInterval": 5,
  "maxScanInterval": 100,
  "maxMergePerPass": 64,
  "ageInheritance": "YOUNGEST",
  "labelMode": "ALWAYS",
  "showDespawnTimer": true,
  "countLowThreshold": 64,
  "countHighThreshold": 500,
  "hideSingleItemLabel": false,
  "despawnTicks": 6000,
  "blacklist": [],
  "whitelist": [],
  "overrides": {}
}
Field Description Default
enabled Master switch for all stacking true
mergeOnSpawn Merge new drops instantly as they spawn true
maxStackSize Maximum items per stacked entity 1000
radius Horizontal scan radius (blocks) 5.0
verticalRadius Vertical scan radius (blocks) 2.0
scanInterval Ticks between merge scans for an active pile 5
maxScanInterval Slowest scan rate an idle pile backs off to 100
maxMergePerPass Max neighbours absorbed in one pass 64
ageInheritance Despawn timer on merge: YOUNGEST, KEEP_RECEIVER, or OLDEST YOUNGEST
labelMode When to show the label: ALWAYS, STACKED_ONLY, or NEVER ALWAYS
showDespawnTimer Show despawn countdown on the label true
countLowThreshold Count at which the label turns Yellow 64
countHighThreshold Count at which the label turns Red 500
hideSingleItemLabel Hide the label if the stack only has 1 item false
despawnTicks World despawn rate (matches timer to server settings) 6000
blacklist Items that are never stacked []
whitelist If non-empty, only these items are stacked []
overrides Per-item stack caps {}

Item rules

blacklist, whitelist, and overrides all accept exact item ids and item tags (prefixed with #):

{
  "blacklist": ["minecraft:elytra", "#minecraft:shulker_boxes"],
  "overrides": {
    "minecraft:cobblestone": 5000,
    "#minecraft:logs": 512
  }
}

A note on ageInheritance

The default YOUNGEST means a pile inherits the longest remaining lifetime when it absorbs a drop — so a pile next to a farm keeps resetting its despawn timer and effectively never despawns. That is convenient, but on a busy server it lets item piles accumulate indefinitely. Set KEEP_RECEIVER for vanilla despawn behaviour.

Building

./gradlew build

Output JAR is in build/libs/. Gradle provisions the required Java 25 toolchain automatically.

License

MIT — see LICENSE.


[!CAUTION] I am not great at Kotlin and this project was built with AI assistance. There may be bad code, wrong patterns, or things that could be done much better. If you spot anything — please open an issue or a pull request. I genuinely appreciate it and will learn from it. Thank you.

How to Install Drop Stacker (Mod)

Drop Stacker by suwizx_ is verified for Fabric across Minecraft versions 1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6 (latest release: 1.3.0, file size: 84 KB). Follow the steps below to install it safely from ModCraft.tv:

  1. Click the Download button above and select your Minecraft version (1.21.1, 1.21.10, 1.21.11, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6) and platform (Fabric).
  2. Make sure you have the compatible loader or environment installed for Fabric.
  3. Move the downloaded Drop Stacker file into your Minecraft .minecraft/mods folder and launch the game.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3
Fabric
7d ago 1
1.21.x
Fabric
2mo ago 1
26.3
Fabric
2mo ago 1
26.2
Fabric
3mo ago 1
26.1.2
Fabric
6mo ago 1
26.1.2
Fabric
7mo ago 1
[1.3.0] Drop Stacker 1.3.0 by suwizx_ on Oct 31, 2026
Download
Feature and fix release for **Minecraft 26.3**. It is still **server-side only**: install it on the server, and players need nothing.

  • Big thanks to [@Skyfay](https://github.com/Skyfay) (Manu), who wrote both pull requests below**, including the gametests that reproduce each bug. 🙏

## Fixed ([#4](https://github.com/suwizx/drop-stacker/pull/4))
Piles above an item's normal stack size reached vanilla code that never expects them. Each case below has a gametest that fails on the previous version.

  • Items were deleted when something picked up a pile.** A hopper under 640 cobblestone kept 64 and deleted 576. Hopper minecarts, villagers, allays and piglins lost items the same way. Dolphins, pandas and raiders took a whole pile into a hand slot that cannot be saved above 99. Every pickup, players included, now takes one vanilla-sized stack at a time and the rest stays on the ground.
  • Logging mods such as Ledger failed on piles** (Value must be within range [1;99]). Pickups now only see vanilla-sized stacks, and a freshly dropped item joins the pile around it instead of swallowing it, so the dropped entity still holds exactly what was dropped.
  • Thrown items vanished into a pile mid-air.** An item you throw (Q, or a villager or piglin handing it over) now flies and lands first, and only then joins a pile.
  • A single item could pull a whole pile across the ground.** The biggest pile in range now takes the others in, as vanilla does.
  • Labels froze after a restart or chunk reload**, and those piles never merged again. The label is now recognised as the mod's own after loading.
  • Drops reserved for one player** (target) no longer merge with public drops, or the other way round.

## Added ([#5](https://github.com/suwizx/drop-stacker/pull/5))
The defaults render exactly the label you have today, so existing setups are unchanged.

  • labelFormat / timerFormat:** build the label from placeholders ({count}, {stacks}, {countColor}, {timer}, {time}, {timerColor}) and & codes, including &#RRGGBB. A format without a timer no longer rebuilds the label every second, so it only sends an update when the count changes.
  • labelMode: OVERSIZED_ONLY:** label a pile only once it holds more than one vanilla stack of its item (2 totems, 65 planks). Smaller piles look like vanilla drops.
  • labelThroughWalls:** set to false to hide labels behind blocks. Clients using Entity Culling need minecraft:item in its entityWhitelist, see the README.

## Also
  • A format with a signed hex colour such as &#-1abcd is now kept as plain text instead of being read as a colour.
  • 24 server gametests now run with every build, including a check that the hidden-label flag reaches the packets actually sent.

## Upgrading
Replace the jar; no config changes are needed. Pickups of a big pile now happen one stack per touch, so collecting a very large pile takes a few touches.

## Requirements
Minecraft 26.3, Fabric Loader 0.19.5+, Fabric API, Fab
...
Drop Stacker backported to **Minecraft 1.21.1**, as requested in #1. It has the same features and fixes as [v1.2.1](https://github.com/suwizx/drop-stacker/releases/tag/v1.2.1) for 26.3.

It is still **server-side only**: install it on the server, and players need nothing. Vanilla clients see stack counts and despawn timers without the mod.

## Requirements

## Version numbering
The version is 1.2.1+1.21.1: Drop Stacker 1.2.1, built for Minecraft 1.21.1. The 26.3 build stays 1.2.1. The source for this line is on the [1.21.1](https://github.com/suwizx/drop-stacker/tree/1.21.1) branch.

## What's included
Everything from v1.2.1:
  • New drops merge into nearby piles the moment they spawn, and a periodic scan picks up piles that have moved.
  • Stack sizes up to 1000 by default (maxStackSize), with per-item and per-tag overrides.
  • Blacklist and whitelist by item id or tag (#minecraft:logs).
  • [×count | m:ss] labels showing pile size and despawn timer.
  • /dropstacker reload | stats | resetstats | toggle | set <field> <value> (permission level 2).
  • Piles of more than 99 items survive saving and loading.** On 1.21.1 vanilla can't save a stack over 99 at all, so without this fix saving a big pile would fail.
[1.2.1] Drop Stacker 1.2.1 by suwizx_ on Sep 19, 2026
Download
Bug-fix release for **Minecraft 26.3**. **Anyone on v1.2.0 or v1.1.0 should update.**

It is still **server-side only**: install it on the server, and players need nothing.

## Fixed
  • Piles of more than 99 items were deleted when the world saved and loaded again.** That covers server restarts, chunk unload/reload (walking away and coming back), /data merge entity, and item piles moving between dimensions.

Vanilla's save format only allows 1–99 items per stack, so larger piles failed to save and were thrown away. Drop Stacker now saves a vanilla-valid stack capped at 99, plus the true count in an extra DropStackerCount field, and restores the true count on load.

  • Vanilla clients are unaffected. The limit only exists in the save file, not in what the server sends to players.
  • If the mod is ever removed, those piles load as 99 items instead of disappearing completely.
  • Piles already lost under earlier versions can't be recovered, because they were saved with no item data.

If you had set maxStackSize 99 as a workaround, you can raise it again.

## Requirements
Minecraft 26.3, Fabric Loader 0.19.5+, Fabric API, Fabric Language Kotlin, and Java 25. These are unchanged from v1.2.0.

[1.1.0] Drop Stacker 1.1.0 by suwizx_ on Jul 31, 2026
Download
Drop Stacker v1.1.0 now targets **Minecraft 26.2**, merges drops instantly instead of on a scan interval, and cuts the cost of the neighbour scan considerably.

Still **server-side only** — vanilla clients see stack counts and despawn timers with no mod installed.

## Minecraft 26.2

Requires Minecraft 26.2, Fabric Loader 0.19.3+, Fabric API, Fabric Language Kotlin, and Java 25.
Minecraft 26.1.2 users stay on [v1.0.1](https://github.com/suwizx/drop-stacker/releases/tag/v1.0.1); that version is preserved on the [26.1.2](https://github.com/suwizx/drop-stacker/tree/26.1.2) branch.

## Instant merging

Merging is now push-based: a new drop is absorbed into a nearby pile in the tick it spawns, rather than waiting for the next scan. Each pass also drains every compatible neighbour instead of one per scan — collapsing a 100-item pile previously took roughly 500 ticks no matter how low scanInterval was set, and is now a single pass.

## Performance

  • Blacklist, whitelist and overrides resolve to registry references once at load. The scan predicate previously allocated a string for every candidate of every scan, even with an empty blacklist.
  • Neighbour queries use a shared scratch list with a hard limit, instead of allocating a list of every match to then keep one.
  • Scans stagger per entity, so a mob's drops no longer all scan on the same tick.
  • Idle piles progressively back off to maxScanInterval, which is safe now that new drops push into piles on spawn.
  • Vanilla's own 40-tick merge scan is cancelled, so only one merge system runs.
  • The name-tag label is rebuilt only when its rendered text would actually change.

## Fixes

  • Merged counts never synced to clients.** Counts were mutated in place, but the entity data tracker compares by equality, so the change was never sent. Merging now builds a new stack and goes through setItem, as vanilla's own merge does.
  • Items could not merge for the first half-second after being dropped — the pickup-delay check was stricter than vanilla's.
  • Large stacks bypassed vanilla's infinite-lifetime and near-despawn guards; both are re-asserted.
  • Item entities with their own custom name are no longer relabelled or silently absorbed into a neighbouring pile.

## New

  • /dropstacker reload | stats | resetstats | toggle | set <field> <value> (permission level 2) — tune and reload without a restart.
  • Item **tags** (#minecraft:logs) in blacklist and the new whitelist, plus per-item maxStackSize overrides.
  • New config: enabled, mergeOnSpawn, maxScanInterval, maxMergePerPass, ageInheritance, labelMode, and radius/verticalRadius. Existing scanRadiusX/Y/Z configs migrate automatically on first load.

### Note on ageInheritance

The default YOUNGEST preserves 1.0.x behaviour: a pile inherits the longest remaining lifetime when it absorbs a drop, so a pile fed by a farm never despawns. Set KEEP_RECEIVER for vanilla despawn behaviour.

## Testing

Verified on a live 26.2 server: m
...
[1.0.1] Drop Stacker 1.0.1 by suwizx_ on May 03, 2026
Download
Release v1.0.1: Build script cleanup and version bump.
[1.0.0] Drop Stacker 1.0.0 by suwizx_ on Apr 16, 2026
Download
## Drop Stacker v1.0.0

First release — automatically stacks dropped item entities on the ground to reduce entity lag.

### Features
  • Dropped items of the same type and NBT merge automatically within a configurable radius
  • Stacks beyond vanilla's 64-item limit — up to your configured maxStackSize
  • Colorful stack count label above items (green / yellow / red by stack size)
  • Optional despawn countdown timer on the label (green → yellow → red as time runs out)
  • Server-side merge logic only, no client-side desync
  • New config fields are added to the file automatically on server restart

### Config (config/drop-stacker.json)
``json
{
"maxStackSize": 1000,
"scanRadiusX": 5.0,
"scanRadiusY": 2.0,
"scanRadiusZ": 5.0,
"scanInterval": 5,
"showDespawnTimer": true
}
``

### Requirements
  • Minecraft 26.1.2
  • Fabric Loader 0.19.1+
  • Fabric API
  • Fabric Language Kotlin
  • Java 25+
Drop Stacker Icon
Download Drop Stacker
Select game version
Select platform