AutoPickup is a highly configurable server-side mod that automates the collection of items and experience orbs. It features session tracking, a multi-tier permission system, and extensive mod compatibility to ensure drops are attributed to the correct players, even when using high-speed mining mods or engaging in group combat.

AutoPickup uses a flexible three-tier permission system:
You can configure your personal preferences via the menu. Use Mod Menu for a easy access on Fabric. Otherwise, use /autopickup gui
Settings available:
Note: Your client settings only apply if the server admin has enabled the corresponding "Allow" setting for that feature.

Server operators (OP Level 2+) can manage global defaults and player overrides using /autopickup.
| Command | Description |
|---|---|
/autopickup gui |
Access to configuration menu via command |
| Command | Description | Default |
|---|---|---|
/autopickup |
Display current configuration status | - |
/autopickup master <true|false> |
Master toggle - disables mod entirely if false | true |
/autopickup blocks <true|false> |
Autopickup items from broken blocks | true |
/autopickup blockxp <true|false> |
Autopickup experience from broken blocks | true |
/autopickup mobloot <true|false> |
Autopickup loot from killed mobs | false |
/autopickup mobxp <true|false> |
Autopickup experience from killed mobs | false |
/autopickup splitmobloot <true|false> |
Share mob loot among nearby attackers | false |
/autopickup splitmobxp <true|false> |
Share mob XP among nearby attackers | false |
These commands determine whether players can override server defaults with their client settings.
| Command | Description | Default |
|---|---|---|
/autopickup allow master <true|false> |
Allow clients to toggle master switch | false |
/autopickup allow blocks <true|false> |
Allow clients to toggle block item pickup | false |
/autopickup allow blockxp <true|false> |
Allow clients to toggle block XP pickup | false |
/autopickup allow mobloot <true|false> |
Allow clients to toggle mob loot pickup | false |
/autopickup allow mobxp <true|false> |
Allow clients to toggle mob XP pickup | false |
/autopickup allow splitmobloot <true|false> |
Allow clients to toggle mob loot splitting | false |
/autopickup allow splitmobxp <true|false> |
Allow clients to toggle mob XP splitting | false |
Force specific settings for individual players (overrides both server defaults and client preferences).
| Command | Description |
|---|---|
/autopickup override <player> master <true|false|default> |
Override player's master toggle |
/autopickup override <player> blocks <true|false|default> |
Override player's block pickup |
/autopickup override <player> blockxp <true|false|default> |
Override player's block XP |
/autopickup override <player> mobloot <true|false|default> |
Override player's mob loot |
/autopickup override <player> mobxp <true|false|default> |
Override player's mob XP |
/autopickup override <player> splitmobloot <true|false|default> |
Override player's loot splitting |
/autopickup override <player> splitmobxp <true|false|default> |
Override player's XP splitting |
/autopickup override <player> clear |
Remove all overrides for a player |
Use
defaultto remove a specific override while keeping others.
Server Config: config/AutoPickup/global_config.json
{
"autoPickup": true,
"autoPickupBlocks": true,
"autoPickupBlockXp": true,
"autoPickupMobLoot": false,
"autoPickupMobXp": false,
"autoPickupSplitMobLoot": false,
"autoPickupSplitMobXp": false,
"allowMaster": true,
"allowBlocks": true,
"allowBlockXp": true,
"allowMobLoot": true,
"allowMobXp": true,
"allowSplitMobLoot": true,
"allowSplitMobXp": true
}
Client Config: config/AutoPickup/client_default.toml (or per-server profiles in presets/)
# AutoPickup Client Configuration
master = true
blocks = true
blockXp = true
mobLoot = false
mobXp = false
splitMobLoot = false
splitMobXp = false
Player Overrides: config/AutoPickup/player_overrides.json
{
"player-uuid-here": {
"overrideMaster": true,
"overrideBlocks": null,
...
}
}
AutoPickup hooks into core Minecraft mechanics and works seamlessly with most mods out of the box.
| Mod | Status | Notes |
|---|---|---|
| VeinMiner | Full | All vein blocks picked up instantly with XP |
| TreeHarvester | Full | Logs/leaves collected; saplings auto-replanted if enabled |
| Traveler's Backpack | Full | Items route to backpack filter first (If the Auto Pickup upgrade is there it works) |
| FallingTree | Full | Tree items handle the different break modes |
| Panda's Falling Trees | Full | Tree items are handled by AutoPickup after fall animation |
| RightClickHarvest | Full | Right-click crop harvests (including tall sugarcane) picked up automatically |
| General Block Breakers | Compatible | Any mod using vanilla break hooks |
AutoPickup intercepts drops at these injection points:
Block.dropResources() - Primary block drop handlingServerLevel.addFreshEntity() - Item entity spawning and falling-block entity tracking (FallingTree and any mod that spawns drops directly)LivingEntity.dropFromLootTable() - Mob loot generationLivingEntity.dropExperience() - Mob XP orbsBlock.popExperience() - Block XP orbsExperienceOrb.award() - Captures XP spawned directly by block-breaking mods (e.g. VeinMiner)ServerPlayerGameMode.useItemOn() - Right-click harvesting (sweet berries, jukebox disc ejection, crops via the RightClickHarvest mod, etc.)ItemFrame.hurt() / hurtServer() - Items removed from item frames by left-clickingMob.interact() / ShearsItem.interactLivingEntity() - Shearing drops (wool, snow golem pumpkins, mooshroom mushrooms)BrushableBlockEntity.dropContent() - Brushing suspicious sand/gravelLivingEntity.dropFromEntityInteractLootTable() - Brushing armadillos for scutesThis broad compatibility means most mods work automatically without explicit support.

When Split Mob Loot or Split Mob XP is enabled, rewards from mob kills are shared among participants:
Player A (killer), B, and C all damaged a zombie. Settings:
Result: Only A and B receive split loot. Player C gets nothing because they disabled splitting.
Gradle:
dependencies {
compileOnly(files("libs/autopickup-platform-x.x.x.jar"))
}
import com.lukarbonite.autopickup.AutoPickupApi;
public class QuestRewards {
public void giveReward(Player player, List<ItemStack> items, int xp) {
if (!isModLoaded("autopickup")) {
// Fallback: manual drops
items.forEach(stack -> player.dropItem(stack, false));
player.addExperience(xp);
return;
}
// AutoPickup handles:
// - Inventory insertion
// - Traveler's Backpack routing
// - Config checks (Master, Blocks, etc.)
List<ItemStack> remaining = AutoPickupApi.tryPickup(player, items);
// Drop items that didn't fit
remaining.forEach(stack -> player.dropItem(stack, false));
// AutoPickup handles:
// - Mending calculations
// - Config checks
AutoPickupApi.tryPickupBlockExperience(player, xp);
}
// For mob-related rewards
public void giveMobReward(Player player, List<ItemStack> loot, int xp) {
List<ItemStack> remaining = AutoPickupApi.tryPickupFromMob(player, loot);
remaining.forEach(stack -> player.dropItem(stack, false));
AutoPickupApi.tryPickupMobExperience(player, xp);
}
}
| Method | Description |
|---|---|
tryPickup(PlayerEntity, List<ItemStack>) |
Pickup items from blocks (respects Master + Blocks settings) |
tryPickupFromMob(PlayerEntity, List<ItemStack>) |
Pickup items from mobs (respects Master + MobLoot settings) |
tryPickupBlockExperience(PlayerEntity, int) |
Give block XP (respects Master + BlockXP settings) |
tryPickupMobExperience(PlayerEntity, int) |
Give mob XP (respects Master + MobXP settings) |
isMasterEnabled(PlayerEntity) |
Check if autopickup is enabled for player |
isBlocksEnabled(PlayerEntity) |
Check block item pickup setting |
isBlockXpEnabled(PlayerEntity) |
Check block XP pickup setting |
isMobLootEnabled(PlayerEntity) |
Check mob loot pickup setting |
isMobXpEnabled(PlayerEntity) |
Check mob XP pickup setting |
Note: All
try*methods return lists of items that could not be picked up (full inventory).
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
You are free to:
See the LICENSE file for full details.