跳到正文

Simple AutoPickup

作者:Lukarbonite

使用 AutoPickup 模组,挖掘方块掉落的物品会直接进入背包,瞬间拾取。生物掉落物等均可配置!

收藏

截图

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

自动拾取

FabricNeoforgeForge
Minecraft
License

AutoPickup 是一款高度可配置的服务端模组,可自动收集物品和经验球。它具有会话追踪、多级权限系统,并兼容大量模组,确保掉落物归属于正确的玩家,即使使用高速采矿模组或参与团队战斗也不例外。


✨ 功能

核心功能

  • 🎒 无缝收集:破坏方块和击杀生物掉落的物品会立即加入你的物品栏
  • ⭐ 智能经验处理:经验会先缓存,并在短暂延迟后应用,确保工具先承受耐久损耗,之后才触发经验修补
  • 🚀 流畅运行:阻止物品和经验球实体生成,降低服务器负载
  • 📦 溢出保护:如果物品栏已满,物品会安全地掉落在你的脚边
  • 🔧 精细控制:可通过命令或配置界面独立切换各项功能

高级功能

  • 👥 生物战利品分配:将生物掉落物和经验值分享给附近参与击杀的玩家
  • 🎮 玩家独立权限:服务器管理员可以为特定玩家覆盖设置
  • 💾 客户端配置档案:为每个服务器/世界自动创建独立配置档案,方便切换服务器
  • 🔌 广泛的模组兼容性:可自动兼容 VeinMiner、LiteMiner、TreeHarvester、Traveler’s Backpack、FallingTree、Panda’s Falling Trees 等模组
  • 🚜 不影响自动化农场:只拾取由你自己的操作造成的掉落物。附近由活塞、水、骨粉/苔藓或投掷器运行的自动化农场,其产物绝不会被吸入你的物品栏

One-Block Mining


⚙️ 配置

AutoPickup 使用灵活的三级权限系统:

  1. 服务器默认设置 – 全局备用设置
  2. 管理员覆盖设置 – 针对单个玩家强制应用的设置(优先级最高)
  3. 客户端偏好设置 – 玩家个人选择(仅在服务器允许时生效,且必须等玩家的客户端发送设置后才会应用;未安装此模组的玩家将使用服务器默认设置)

🖥️ 配置菜单(客户端)

你可以通过菜单配置个人偏好设置。在 Fabric 上使用 Mod Menu 可快速访问。
否则,请使用 /autopickup gui

可用设置:

  • 总开关
  • 拾取方块掉落物
  • 拾取方块经验
  • 拾取生物战利品
  • 拾取生物经验
  • 分配生物战利品(与附近的攻击者分享掉落物)
  • 分配生物经验(与附近的攻击者分享经验)

注意:只有当服务器管理员为相应功能启用了“允许”设置时,客户端设置才会生效。

YACL Menu


📜 命令

所有人都可以运行 /autopickup 和 /autopickup gui。修改全局配置或其他
玩家的设置,需要拥有服务器管理员权限。

状态与菜单

| 命令 | 说明 |
|:——————|:————————————————-|
| /autopickup | 显示服务器设置;玩家还可以查看自己的设置(见下文) |
| /autopickup gui | 打开配置菜单(需要客户端模组) |

玩家会看到三列;控制台只会显示前两列:

Feature              | Server                       | You
Master Toggle        | CLIENT DECIDE (default: ON)  | ON  (server default)
Mob XP               | CLIENT DECIDE (default: OFF) | OFF (server default)
Mob Loot             | OFF                          | ON  (admin override)

CLIENT DECIDE 表示玩家可以自行选择该设置;在玩家选择之前,会使用默认值。
你显示对你生效的值及其来源:admin override、your setting
或 server default。

全局配置(管理员)

/autopickup global <key> <true|false> [silent] 用于设置一个全局值。键名不区分大小写;
silent 会隐藏确认消息。

| 键 | 说明 | 默认值 |
|:———————|:—————————————————–|:——–|
| master | 总开关:设为 false 时会完全禁用该模组 | true |
| blocks | 自动拾取被破坏方块掉落的物品 | true |
| blockXp | 自动拾取破坏方块获得的经验 | true |
| mobLoot | 自动拾取击杀生物掉落的物品 | false |
| mobXp | 自动拾取击杀生物获得的经验 | false |
| splitMobLoot | 在附近的攻击者之间分配生物掉落物 | false |
| splitMobXp | 在附近的攻击者之间分配生物经验 | false |
| allow_master | 允许玩家自行选择总开关 | true |
| allow_blocks | 允许玩家自行选择是否拾取方块掉落物 | true |
| allow_blockXp | 允许玩家自行选择是否拾取破坏方块获得的经验 | true |
| allow_mobLoot | 允许玩家自行选择是否拾取生物掉落物 | true |
| allow_mobXp | 允许玩家自行选择是否拾取生物经验 | true |
| allow_splitMobLoot | 允许玩家自行选择是否分配生物掉落物 | true |
| allow_splitMobXp | 允许玩家自行选择是否分配生物经验 | true |

当某个 allow_* 键设为 false 时,对于没有单独覆盖设置的玩家,将应用服务器设置。

玩家个人设置

/autopickup setPlayerConfig <targets> <key|all> <true|false|reset> [silent]

  • 管理员可为任意玩家设置覆盖值,该值优先于服务器值和玩家自己的偏好设置。reset可移除覆盖值。
  • 其他玩家只能以自己为目标,且只能修改allow_*键值为true的设置。这会设置他们自己的偏好,而不是覆盖值。设置会被保存,因此重启后仍然有效;没有安装该模组的玩家可以通过这种方式进行选择。玩家的偏好就是他们最后设置的值,无论是通过此命令还是模组的配置菜单设置的。当菜单中的设置替换了通过命令设置的值时,玩家会收到提示:“你的 AutoPickup 设置已从客户端更新”。

键名与上文相同,但不包括allow_开头的键;all可一次应用于所有设置。

模组客户端还会使用一些内部命令(ap_config_sync、check_perm、query_global、

query_player)与服务器同步。这些命令不是供玩家手动输入的。


📂 配置文件

服务端配置: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/preferences/<player-uuid>.json,每位玩家一个文件
(单人游戏中,文件位于config/AutoPickup/worlds/<world>/preferences/)。仅保存
玩家通过模组配置菜单或对自己使用setPlayerConfig所选择的设置:

{
   "mobXp": true
}

玩家覆盖设置:config/AutoPickup/player_overrides.json

{
   "player-uuid-here": {
      "overrideMaster": true,
      "overrideBlocks": null,
      ...
   }
}

1.12.2 必需前置

  • MixinBooter(11.0 或更高版本)- 为 Forge 1.12.2 提供 Mixin

可选但推荐的客户端前置

  • 模组菜单 – 在游戏中打开配置界面
  • YetAnotherConfigLib (YACL) – 使用 YACL 配置界面的必需前置(也可使用原版界面作为备用)

✅ 兼容性

AutoPickup 接入了 Minecraft 的核心机制,开箱即用,并能与大多数模组无缝配合。

🔧 明确支持的模组

| 模组 | 状态 | 备注 |
|:—————————|:———-:|:————————————————————————————|
| VeinMiner | 完全支持 | 整条矿脉都会被采集并获得经验值,长度不限(见下方说明) |
| TreeHarvester | 完全支持 | 原木和树叶都会被采集;启用后会自动重新种植树苗 |
| Traveler’s Backpack | 完全支持 | 物品会优先存入背包筛选器(如果装有 Auto Pickup 升级,则可正常工作) |
| FallingTree | 完全支持 | 树木物品会处理不同的破坏模式 |
| Panda’s Falling Trees | 完全支持 | 树木物品会在倒下动画结束后由 AutoPickup 处理 |
| RightClickHarvest | 完全支持 | 右键收获的作物(包括高大的甘蔗)会自动拾取 |
| LiteMiner | 完全支持 | 整条矿脉都会被采集并获得经验值,长度不限 |
| FTB Ultimine | 完全支持 | 使用 Ultimine 挖掘的方块、合并后的掉落物以及右键收获的作物,都会被采集并获得经验值 |
| Butchery | 完全支持 | 被玩家击杀的生物掉落的尸体会作为生物战利品交给击杀者 |
| General Block Breakers | 兼容 | 任何会破坏方块并将破坏归因于玩家的模组或机制 |

VeinMiner 的处理方式会根据 Minecraft 版本而有所不同。VeinMiner 2.12.1+ 会通过原版玩家路径(ServerPlayerGameMode.destroyBlock)破坏矿脉中的每个方块,因此 AutoPickup 会像处理任何通用方块破坏器一样自动捕获掉落物,无需专门编写代码。目前 Minecraft 版本的 AutoPickup 运行于 2.12.1+,并依赖此隐式支持,因此已移除显式兼容性 Mixin,改用此方式。在较旧的 Minecraft 版本中,VeinMiner 仅更新至 2.12.0,AutoPickup 仍保留专用的 VeinMiner 兼容性 Mixin。无论哪种情况,整条矿脉都会被采集并获得经验值。

📋 技术详情

AutoPickup 会在以下注入点拦截掉落物:

  • Block.dropResources() – 方块掉落物的主要处理方式
  • ServerPlayerGameMode.destroyBlock() – 追踪玩家亲自破坏方块的行为,并将该次破坏标记为“正在调用栈中”,因此由这次破坏同步触发的掉落(连锁挖掘、植物柱倒塌)会归属到该玩家,而独立农场产生的掉落则不会
  • Level.destroyBlock() – 由模组或原版触发的非玩家破坏(例如 LiteMiner 这类连锁挖掘模组,以及竹子、甘蔗或仙人掌的底部被破坏后导致整柱倒塌)
  • ServerLevel.addFreshEntity() – 追踪物品实体的生成和下落方块实体(包括 FallingTree 以及任何直接生成掉落物的模组)
  • LivingEntity.dropFromLootTable() – 生物战利品生成
  • LivingEntity.die() – 将玩家击杀限定在对应范围内,使死亡过程中直接生成的掉落物(装备,以及 Butchery 等模组在死亡事件中生成的尸体)也计为生物战利品。尸体会持续追踪到下一刻,因此被拴住的生物届时掉落的拴绳也会被收集
  • LivingEntity.dropExperience() – 生物经验球
  • Block.popExperience() – 方块经验球
  • ExperienceOrb.award() – 捕获绕过原版经验处理流程、由破坏方块的模组直接生成的经验
  • ServerPlayerGameMode.useItemOn() – 右键采集(甜浆果、唱片机弹出的唱片、通过 RightClickHarvest 模组采集作物等)
  • ItemFrame.hurt() / hurtServer() – 左键点击物品展示框时取出的物品
  • Mob.interact() / ShearsItem.interactLivingEntity() – 剪刀采集的掉落物(羊毛、雪傀儡的南瓜、哞菇的蘑菇)
  • BrushableBlockEntity.dropContent() – 刷洗可疑的沙子/沙砾
  • LivingEntity.dropFromEntityInteractLootTable() – 刷洗犰狳以获取犰狳鳞甲

在1.12.2中,方块和生物掉落物由 Forge 的 HarvestDropsEvent、LivingDropsEvent 和 LivingExperienceDropEvent 处理,其余则由上述钩子在 1.12.2 中的对应方法处理(PlayerInteractionManager.tryHarvestBlock() / processRightClickBlock()、World.destroyBlock()、WorldServer.spawnEntity()、Block.dropXpOnBlockBreak()、EntityItemFrame.attackEntityFrom()、ItemShears.itemInteractionForEntity())。EntityLivingBase.onDeath() 会从其在 attackEntityFrom() 中的调用开始限定追踪范围,因此,马、驴、羊驼和猪在掉落事件之后产生的掉落物(物品栏物品、箱子、鞍)也会计为生物战利品;尸体在下一刻掉落的拴绳也会以同样方式收集。上述模组兼容性不适用于此版本。

如此广泛的兼容性意味着,大多数模组无需专门适配即可自动生效。

MultiBlock Mining


🎮 生物战利品分配

启用分配生物战利品或分配生物经验后,击杀生物获得的奖励将由参与者共享:

工作原理

  1. 伤害追踪:模组会追踪对每只生物造成伤害的最近 10 名不同玩家
  2. 资格检查:生物死亡时,仅以下玩家符合条件:
  • 在线且未处于旁观模式
  • 已启用大师
  • 已启用对应的生物拾取功能
  • 已启用对应的分配功能
  • 与击杀者位于同一世界
  1. 分配:
  • 物品会平均分配;击杀者获得剩余部分
  • 经验会平均分配;击杀者获得剩余部分
  • 无法放入物品栏的物品会掉落在生物所在位置

示例

玩家 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")) {
         // 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);
   }
}

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 文件。

常见问题

Simple AutoPickup 支持哪些 Minecraft 版本?

Simple AutoPickup 支持 Minecraft Java 版 1.12.2–26.3,共 26 个版本,可用的加载器:Fabric / Forge / NeoForge。下载时注意选择和你游戏版本一致的文件。

Simple AutoPickup 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge / NeoForge,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:仅服务端。

评论

登录后评论和评分

Lukarbonite 的其他作品

查看全部 →