Tags
Creators
Details
1.1.0
Compatibility
Required content
Changes
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; that version is preserved on the 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) inblacklistand the newwhitelist, plus per-itemmaxStackSizeoverrides. - New config:
enabled,mergeOnSpawn,maxScanInterval,maxMergePerPass,ageInheritance,labelMode, andradius/verticalRadius. ExistingscanRadiusX/Y/Zconfigs 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: merge-on-spawn, stack cap and remainder handling, blacklist by id and by tag, per-item overrides, hot reload, pickup-delay and infinite-lifetime guards, and named-item exclusion.
The periodic tick scan and the adaptive backoff have had less coverage than the rest — a dev server with no player connected does not tick item entities, so those paths were exercised manually rather than systematically. Please open an issue if you see anything off.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:H9T1wmJJ:8FeUVekV"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:H9T1wmJJ:8FeUVekV"
}

