autopickup-fabric-1.4.20+26.1.2.jar
Curse Maven Snippet
What's new
1.4.20: Code-review overhaul; TreeHarvester 10.x support (#31); FTB Ultimine support; per-player preference files
Fixed
- TreeHarvester 10.x crashed on block break (#31): logs and leaves are credited again and saplings are replanted per tree type. 9.x is still supported, and the drop hooks are optional so a future change cannot crash the game.
- Drop contexts leaked when hooked methods returned early or threw: Level.destroyBlock and FallingTree's falling-block tick now close at RETURN, the shear hook closes what it opened, TreeHarvester hooks use try/finally, 1.21.1 brushing closes at RETURN, and a tick-end safety net clears anything left open.
- Players without the mod got mob XP pickup by default; a player's own preference now only counts once it is set, else the server value.
- Non-ops editing themselves wrote admin overrides that outlived the allow_* flags; they now set their own preference.
- 1.21.0-1 was missing the on-stack drop fallback.
- Nested compat scopes lost their player (blockBreaker is now a stack).
- /autopickup global printed success for unknown or mis-cased keys and saved nothing; keys are now case-insensitive and unknown keys fail.
- Malformed config JSON crashed startup; the bad file is now backed up and defaults are used.
- Block XP was lost if a toggle flipped or the player left within the 2-tick Mending delay.
- Split with zero participants threw ArithmeticException.
- FallingTree leaf drops: hook the public forceBreakDecayLeaves instead of a synthetic lambda whose parameters did not match on 1.20.1.
- 1.16.5 Forge dev client launched on Java 21 and crashed.
Added
- FTB Ultimine support: it breaks blocks through the player's own break path, so ultimined blocks, merged drops and right-click crop harvests are collected with no dedicated code (1.20.1 to 26.1.2).
- /autopickup shows each player the value that applies to them and its source (admin override, your setting, server default); the server column reads CLIENT DECIDE (default: ON/OFF). The console sees the server column only.
- Players' own preferences are saved one file per player, preferences/<uuid>.json (worlds/<world>/preferences/ in singleplayer), whether set by command or synced by the client. Loaded on first use, written atomically only on change. A client sync that replaces a stored value tells the player.
- Pickup handler registry in AutoPickupApi; Traveler's Backpack and TreeHarvester register at init instead of mixing into AutoPickupApi.
- CI fetches the optional-mod jars from Modrinth and Maven by SHA-1 (gradle/compat-libs.json, ./gradlew fetchLibs) and builds every version with --continue.
- JUnit tests for core/ (59), including tests that lock the config file and wire formats.
- ./gradlew driftCheck lists files identical across version folders.
Changed
- The seven settings are one Toggle enum; config files, the sync bitmask, command keys and the client file are unchanged.
- One home for defaults; logic for directly spawned items moved into a shared ItemSpawnHook; shared ClientSession for loader clients, which only sync with servers that have the mod.
- TreeHarvester natamus/serilum mixin pairs merged; leaf ownership kept in a tick-expired side map instead of a BlockPos subclass; the serilum modules compile against TreeHarvester 10.3.
- Packages unified to com.lukarbonite.autopickup (1.16.5, 1.20.1, 1.21.0-1); files identical in 26.1 to 26.3 moved to shared/26+; per-version build boilerplate moved to a buildSrc convention plugin.
- Java sources normalized to LF (.gitattributes).
- README commands, defaults and compatibility list match the code; CI installs JDK 8, 17, 21 and 25 and uploads every loader jar.
Removed
- Dead code: no-op AutoPickupMixinPlugin, FLAG_ALLOW_CLIENT, unused FLAG_* re-exports and tryPickupBlockExperience, unused locals.
Fixes #31
This mod has no additional files

