
简单自动拾取
使用Auto Pickup模组,立即将从开采方块中获得的物品直接收集到你的背包中。生物掉落及更多内容均可配置!
AutoPickup
[](https://img.shields.io/badge/minecraft-1.20 -- 26.2-green?style=for-the-badge)
[](https://img.shields.io/badge/license-AGPL 3.0-lightgrey?style=for-the-badge)
AutoPickup 是一款高度可配置的服务端模组,可自动拾取物品和经验球。它具备会话追踪、多层级权限系统以及广泛的模组兼容性,确保掉落物能正确归属于对应玩家,即使在使用高速挖掘模组或参与团队战斗时也是如此。
✨ 功能特性
核心功能
- 🎒 无缝拾取: 破坏方块和击杀生物掉落的物品将立即加入你的背包
- ⭐ 智能经验处理: 经验会被缓存并在短暂延迟后应用,确保工具先消耗耐久度,然后 再触发经验修补
- 🚀 无延迟体验: 阻止物品和经验球实体生成,降低服务器负载
- 📦 溢出保护: 如果你的背包已满,物品会安全地掉落在你脚下
- 🔧 精细控制: 通过命令或配置界面独立开关各项功能
高级功能
- 👥 生物战利品分配: 与参与击杀的附近玩家共享生物掉落物和经验
- 🎮 每玩家权限: 服务器管理员可为特定玩家覆盖设置
- 💾 客户端配置档案: 自动为每个服务器/世界保存配置档案,实现无缝切换
- 🔌 广泛的模组兼容性: 自动兼容 VeinMiner、TreeHarvester、Traveler's Backpack、FallingTree、Panda's Falling Trees 等模组

⚙️ 配置说明
AutoPickup 采用灵活的三层权限系统:
- 服务器默认设置 - 全局后备设置
- 管理员覆盖 - 针对单个玩家的强制设置(优先级最高)
- 客户端偏好 - 玩家个人选择(仅在服务器允许时生效)
🖥️ 配置菜单(客户端)
你可以通过菜单配置个人偏好。在 Fabric 上使用 Mod Menu 以便快速访问。否则,使用 /autopickup gui 命令。
可用设置项:
- 总开关
- 方块物品拾取
- 方块经验拾取
- 生物战利品拾取
- 生物经验拾取
- 生物战利品分配(与附近攻击者共享掉落物)
- 生物经验分配(与附近攻击者共享经验)
注意: 你的客户端设置仅在服务器管理员启用了相应功能的"允许"设置时才生效。

📜 命令(服务器管理员)
服务器管理员(OP 等级 2+)可以使用 /autopickup 命令管理全局默认设置和玩家覆盖。
菜单访问
| 命令 | 描述 |
|---|---|
/autopickup gui |
通过命令访问配置菜单 |
全局配置
| 命令 | 描述 | 默认值 |
|---|---|---|
/autopickup |
显示当前配置状态 | - |
/autopickup master <true|false> |
总开关 - 设为 false 时完全禁用模组 | true |
/autopickup blocks <true|false> |
自动拾取破坏方块掉落的物品 | true |
/autopickup blockxp <true|false> |
自动拾取破坏方块获得的经验 | true |
/autopickup mobloot <true|false> |
自动拾取击杀生物掉落的战利品 | false |
/autopickup mobxp <true|false> |
自动拾取击杀生物获得的经验 | false |
/autopickup splitmobloot <true|false> |
在附近攻击者之间分配生物战利品 | false |
/autopickup splitmobxp <true|false> |
在附近攻击者之间分配生物经验 | false |
客户端控制权限
这些命令决定玩家是否可以用客户端设置覆盖服务器默认设置。
| 命令 | 描述 | 默认值 |
|---|---|---|
/autopickup allow master <true|false> |
允许客户端切换总开关 | false |
/autopickup allow blocks <true|false> |
允许客户端切换方块物品拾取 | false |
/autopickup allow blockxp <true|false> |
允许客户端切换方块经验拾取 | false |
/autopickup allow mobloot <true|false> |
允许客户端切换生物战利品拾取 | false |
/autopickup allow mobxp <true|false> |
允许客户端切换生物经验拾取 | false |
/autopickup allow splitmobloot <true|false> |
允许客户端切换生物战利品分配 | false |
/autopickup allow splitmobxp <true|false> |
允许客户端切换生物经验分配 | false |
每玩家覆盖
强制设置单个玩家的特定配置(覆盖服务器默认设置和客户端偏好)。
| 命令 | 描述 |
|---|---|
/autopickup override <player> master <true|false|default> |
覆盖玩家的总开关 |
/autopickup override <player> blocks <true|false|default> |
覆盖玩家的方块拾取设置 |
/autopickup override <player> blockxp <true|false|default> |
覆盖玩家的方块经验设置 |
/autopickup override <player> mobloot <true|false|default> |
覆盖玩家的生物战利品设置 |
/autopickup override <player> mobxp <true|false|default> |
覆盖玩家的生物经验设置 |
/autopickup override <player> splitmobloot <true|false|default> |
覆盖玩家的战利品分配设置 |
/autopickup override <player> splitmobxp <true|false|default> |
覆盖玩家的经验分配设置 |
/autopickup override <player> clear |
移除玩家的所有覆盖设置 |
使用
default可移除特定覆盖设置,同时保留其他覆盖设置。
📂 配置文件
服务器配置: 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
}
客户端配置: config/AutoPickup/client_default.toml(或 presets/ 中的每服务器配置档案)
# AutoPickup 客户端配置
master = true
blocks = true
blockXp = true
mobLoot = false
mobXp = false
splitMobLoot = false
splitMobXp = false
玩家覆盖: config/AutoPickup/player_overrides.json
{
"player-uuid-here": {
"overrideMaster": true,
"overrideBlocks": null,
...
}
}
可选但推荐的客户端依赖项
- Mod Menu - 在游戏中访问配置界面
- YetAnotherConfigLib (YACL) - YACL 配置界面所需(有原版 GUI 作为后备)
✅ 兼容性
AutoPickup 挂钩核心 Minecraft 机制,开箱即可与大多数模组无缝协作。
🔧 明确支持的模组
| 模组 | 状态 | 备注 |
|---|---|---|
| VeinMiner | 完整 | 所有矿脉方块被立即拾取并附带经验 |
| TreeHarvester | 完整 | 收集原木/树叶;若启用则自动补种树苗 |
| Traveler's Backpack | 完整 | 物品优先路由到背包过滤器(如果安装了 Auto Pickup 升级则生效) |
| FallingTree | 完整 | 树类物品可处理不同的破坏模式 |
| Panda's Falling Trees | 完整 | 树类物品在掉落动画后由 AutoPickup 处理 |
| RightClickHarvest | 完整 | 右键收获的作物(包括高甘蔗)自动拾取 |
| 通用方块破坏器 | 兼容 | 任何使用原版破坏钩子的模组 |
📋 技术细节
AutoPickup 在以下注入点拦截掉落物:
Block.dropResources()- 主要方块掉落处理ServerLevel.addFreshEntity()- 物品实体生成和下落方块实体追踪(FallingTree 以及任何直接生成掉落物的模组)LivingEntity.dropFromLootTable()- 生物战利品生成LivingEntity.dropExperience()- 生物经验球Block.popExperience()- 方块经验球ExperienceOrb.award()- 捕获由方块破坏模组(如 VeinMiner)直接生成的经验ServerPlayerGameMode.useItemOn()- 右键收获(甜浆果、唱片机唱片弹出、通过 RightClickHarvest 模组的作物等)ItemFrame.hurt()/hurtServer()- 左键点击从物品展示框中取出的物品Mob.interact()/ShearsItem.interactLivingEntity()- 剪刀剪下的掉落物(羊毛、雪傀儡南瓜、哞菇蘑菇)BrushableBlockEntity.dropContent()- 刷可疑的沙砾/沙子LivingEntity.dropFromEntityInteractLootTable()- 刷犰狳获取鳞甲
这种广泛的兼容性意味着大多数模组无需显式支持即可自动工作。

🎮 生物战利品分配
当启用 生物战利品分配 或 生物经验分配 时,击杀生物获得的奖励将在参与者之间共享:
工作原理
- 伤害追踪: 模组追踪对每只生物造成过伤害的最后 10 名独特玩家
- 资格检查: 生物死亡时,只有满足以下条件的玩家才能参与分配: - 在线且未处于旁观模式
- 已启用总开关
- 已启用特定的生物拾取功能
- 已启用特定的分配功能
- 与击杀者处于同一世界
- 分配机制: - 物品平均分配;击杀者获得余数
- 经验平均分配;击杀者获得余数
- 背包放不下的物品会掉落在生物死亡位置
示例
玩家 A(击杀者)、B 和 C 都对一只僵尸造成了伤害。设置如下:
- 玩家 A: 总开关 ✅、生物战利品 ✅、生物战利品分配 ✅
- 玩家 B: 总开关 ✅、生物战利品 ✅、生物战利品分配 ✅
- 玩家 C: 总开关 ✅、生物战利品 ✅、生物战利品分配 ❌
结果: 只有 A 和 B 会获得分配的战利品。玩家 C 因禁用了分配功能而不会获得任何物品。
👩💻 开发者 API
添加为依赖项
Gradle:
dependencies {
compileOnly(files("libs/autopickup-platform-x.x.x.jar"))
}
使用 API
import com.lukarbonite.autopickup.AutoPickupApi;
public class QuestRewards {
public void giveReward(Player player, List<ItemStack> items, int xp) {
if (!isModLoaded("autopickup")) {
// 后备方案:手动掉落
items.forEach(stack -> player.dropItem(stack, false));
player.addExperience(xp);
return;
}
// AutoPickup 处理:
// - 背包插入
// - Traveler's Backpack 路由
// - 配置检查(总开关、方块等)
List<ItemStack> remaining = AutoPickupApi.tryPickup(player, items);
// 掉落未放入背包的物品
remaining.forEach(stack -> player.dropItem(stack, false));
// AutoPickup 处理:
// - 经验修补计算
// - 配置检查
AutoPickupApi.tryPickupBlockExperience(player, xp);
}
// 用于生物相关奖励
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);
}
}
API 方法
| 方法 | 描述 |
|---|---|
tryPickup(PlayerEntity, List<ItemStack>) |
拾取方块掉落的物品(遵守总开关 + 方块设置) |
tryPickupFromMob(PlayerEntity, List<ItemStack>) |
拾取生物掉落的物品(遵守总开关 + 生物战利品设置) |
tryPickupBlockExperience(PlayerEntity, int) |
给予方块经验(遵守总开关 + 方块经验设置) |
tryPickupMobExperience(PlayerEntity, int) |
给予生物经验(遵守总开关 + 生物经验设置) |
isMasterEnabled(PlayerEntity) |
检查该玩家的自动拾取是否已启用 |
isBlocksEnabled(PlayerEntity) |
检查方块物品拾取设置 |
isBlockXpEnabled(PlayerEntity) |
检查方块经验拾取设置 |
isMobLootEnabled(PlayerEntity) |
检查生物战利品拾取设置 |
isMobXpEnabled(PlayerEntity) |
检查生物经验拾取设置 |
注意: 所有
try*方法都会返回无法拾取(背包已满)的物品列表。
📜 许可证
本项目采用 GNU Affero 通用公共许可证 v3.0(AGPL-3.0)授权。
你可以自由:
- ✅ 在整合包中使用
- ✅ 个人使用修改
- ✅ 分发修改版本(也必须基于 AGPL-3.0)
完整详情请参阅 LICENSE 文件。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。