Suite

概览

Pickup 拾取模块功能概览

Pickup 拾取模块

模块简介

Pickup 是 Suite 的物品拾取增强模块,通过 ArcartX UI 提供两种工作模式:通知模式(拾取时弹出 HUD 提示)与扫描模式(禁用自动拾取,面板展示附近掉落物,按键交互拾取)。所有界面均基于 ArcartX 客户端 MOD 渲染,服务端通过 PacketBridge 与客户端通信。

通知模式下,玩家正常拾取地面掉落物,HUD 以滚动队列展示最近 N 条拾取记录,每条包含物品图标、名称与数量,超时后自动消失。扫描模式下,模块周期性扫描玩家周围掉落物实体,经五维过滤引擎筛选后推送到客户端 HUD 面板,玩家通过按键打开透明交互菜单,使用鼠标点击或滚轮切换选中并拾取目标物品,可选联动 Warehouse 模块将拾取物自动存入仓库。

  • 模块 IDpickup
  • 版本:1.4.4
  • 配置版本:3(当前 schema)
  • 源码主类xuanmo.arcartxsuite.pickup.PickupModule
  • 配置文件config.yml
  • 消息文件messages.yml

功能特性

功能说明
拾取通知 HUD通知模式下,玩家拾取物品时在屏幕右下角弹出提示,包含物品图标、名称与数量,支持多条堆叠与自动消失
掉落物扫描面板扫描模式下,周期性扫描玩家附近掉落物,以半透明面板竖向展示,每项包含图标、名称与数量
选中高亮扫描面板当前选中项以蓝色高亮,支持滚轮循环切换
鼠标点击拾取直接点击面板上的物品条目即可拾取对应物品
交互菜单按自定义交互键打开透明菜单捕获鼠标光标,用于精确操作
五维过滤材质黑/白名单、物品名称正则、Lore 正则、NBT 键匹配、最小堆叠数量
合并显示同名同类物品合并为一条,显示总数量
拾取延迟掉落物落地一定时间后才开始显示,防止刚扔出的物品立即出现
仓库联动扫描模式拾取后可选自动存入 Warehouse 仓库模块
玩家开关玩家可通过 /pickup 命令随时开关个人拾取功能

依赖表

依赖类型说明
ArcartX 客户端 MOD硬依赖提供 UI 渲染、PacketBridge 通信、客户端包处理与按键事件
Warehouse 模块可选扫描模式拾取后自动存入仓库(WarehouseAutoDepositable Capability)
NeigeItems / MythicMobs / MMOItems可选识别对应物品来源的显示名与序列化数据

Pickup 模块在 module.yml 中声明 depends: [],不强制依赖其他模块。运行时依赖 ArcartX 客户端 MOD 提供 UI 渲染能力,客户端未安装时 HUD 无法显示。

模式对比

特性通知模式(notification)扫描模式(scanner)
拾取行为正常自动拾取,不拦截 EntityPickupItemEvent禁用自动拾取,拦截 EntityPickupItemEvent
HUD 功能显示拾取通知(滚动队列)实时展示附近掉落物列表
交互方式无交互按键拾取 / 鼠标点击 / 滚轮切换
过滤系统材质 + 名称 + Lore + NBT + 数量五维过滤
仓库联动无(仅补发 HUD 提示)可选自动存入仓库
UI 界面AXS:pickup_hud(1 套)AXS:loot_panel + AXS:loot_interact(2 套)
按键注册注册宿主全局按键回调(优先级 10)

拾取机制

通知模式流程

  1. 玩家拾取地面掉落物,触发 EntityPickupItemEventHIGHEST 优先级,ignoreCancelled = true
  2. PickupService 监听事件,将物品序列化为 JSON 并构造 payload(itemJson + amount
  3. 若玩家 HUD 已打开,延迟 1 tick 发送 pick 包到客户端;否则先调用 openUi 打开 HUD,将 payload 排入待发队列,HUD 打开确认后 flush
  4. 客户端 pickup_hud.ymlpacketHandler.pick 接收包,将新条目插入队列首位,旧条目依次下移
  5. HUD tick 动作每帧检查各条目是否超过 entry-ttl-ms,超时则隐藏
  6. 拾取事件同时通过 EventBus 发布 axs.pickup.item_pickup 事件,供其他模块订阅

通知模式下,若 Warehouse 模块以 LOWEST 优先级取消了 EntityPickupItemEvent(自动入库),本模块监听器因 ignoreCancelled = true 不会触发。Warehouse 通过 PickupNotifiable.notifyPickup 主动补发 HUD 提示。

扫描模式流程

  1. 服务启动时注册 EntityPickupItemEvent 监听器(LOW 优先级),当 disable-auto-pickup 启用时取消所有玩家的自动拾取
  2. 周期扫描任务(scan-interval-ticks 间隔)遍历在线玩家,扫描其 scan-radius 半径内的 Item 实体
  3. 每个掉落物经 LootFilterEngine 五维过滤,通过 pickup-delay-ticks 延迟检查后加入可见列表
  4. merge-same-items 启用,相同材质+名称的条目合并数量
  5. 列表变化时发送 update 包到客户端 loot_panel HUD,包含各槽位的可见状态、数量与物品 JSON
  6. 玩家按交互键,宿主按键系统回调 LootScannerService.handleInteractKeyFromHost,服务端校验后发送 open_interact 包,客户端打开 loot_interact 透明菜单
  7. 玩家在菜单中点击物品条目(pick_0 ~ pick_7)或滚轮切换选中(scroll_up / scroll_down),客户端回包通知服务端
  8. 服务端 handlePick 将选中物品放入玩家背包,若 warehouse-auto-deposit 启用则优先存入仓库
  9. 背包满时物品保留在地面并提示玩家;周围无掉落物时自动关闭交互菜单

五维过滤引擎

LootFilterEngine 按以下顺序依次检查每个掉落物,任一维度不通过则不显示:

顺序维度规则
1最小数量itemStack.getAmount() < filter.min-amount 则过滤
2材质过滤blacklist 模式:命中黑名单则过滤;whitelist 模式:白名单非空时未命中则过滤
3名称正则命中 name-blacklist 正则则过滤
4Lore 正则命中 lore-blacklist 正则则过滤;lore-whitelist 非空时未命中则过滤
5NBT 键命中 nbt-blacklist 键则过滤;nbt-whitelist 非空时未命中则过滤

过滤配置基于 ItemMatcher 体系,材质匹配使用 material-ids,名称/Lore 使用正则表达式,NBT 使用键路径匹配。详见 物品匹配条件物品来源

UI 界面

Pickup 模块根据工作模式注册不同的 ArcartX UI 界面:

界面UI ID模式配置路径说明
拾取通知 HUDAXS:pickup_hud通知模式ui.notification-ui-id滚动队列展示最近拾取记录,由 PickupHudTemplateWriter 根据 max-visibleentry-ttl-ms 动态生成
掉落物面板 HUDAXS:loot_panel扫描模式ui.scanner-ui-id常驻 HUD,展示附近掉落物列表,捕获滚轮与点击
交互菜单AXS:loot_interact扫描模式ui.interact-ui-id透明菜单,按键打开后捕获鼠标光标,ESC 关闭

通知模式的 pickup_hud.ymlPickupHudTemplateWriter 在启动时根据配置参数动态生成到 ui/pickup_hud.yml,修改 max-visibleentry-ttl-ms 后需开启 ui.overwrite-ui-files 或手动删除旧文件以重新生成。扫描模式的 loot_panel.ymlloot_interact.yml 从 jar 资源导出。UI 图标渲染使用 Slot 组件,详见 UI 图标

配置版本与迁移

当前配置版本为 3。模块包含两份迁移文件:

迁移说明
1 → 2移除已废弃的 scanner.keybind.default-key 字段(从未被代码使用)
2 → 3将分散在 notification / scanner 嵌套节中的 UI 配置抽离到统一 ui 顶层节

配置版本低于 3 时,模块启动时自动按顺序应用迁移。详见 配置管理

本页目录