回收商店
recycle 模式让玩家把背包里的物品卖回给服务器。商店页面负责展示回收入口,实际匹配条件和奖励来自 recycle/*.yml 的回收规则。
适用场景
- 回收多余装备、材料、鱼获或活动物品。
- 按物品名、Lore、附魔、耐久、NBT、物品源 ID 等规则匹配后发放货币、物品源物品或 Kether 奖励。
- 提供一键回收、同类回收、收益预览、误操作撤回。
- 从外部背包回收物品,例如
legendwarehouse/soulringx。
关键配置
| 字段 | 说明 |
|---|---|
mode | recycle 或 RECYCLE |
currency | 可省略;省略时仍能加载该商店,但货币奖励最终按回收奖励系统处理 |
goods | 必填;goods.*.id 指向 recycle/*.yml 顶层规则 ID,不是 goods/*.yml 商品 ID |
goods.*.price | 主要用于展示层变量,不决定最终回收奖励 |
target_inventory | 可选;指定回收扫描/扣物的背包源 |
recycle.one_click_enabled | 是否允许 malkuth recycle all 一键回收 |
recycle.confirm_before_recycle | 当前会被解析,主要作为配置预留;实际确认体验以当前会话实现为准 |
recycle.preview_limit | 当前会被解析;预览输出不完全依赖该值截断 |
recycle.filters.whitelist / blacklist | 当前按材质过滤,推荐写 - material: DIAMOND_SWORD 这类格式 |
recycle.protect.* | 保护有名物品、附魔物品、收藏/锁定标记物品不被回收 |
recycle.rollback.* | 开启撤回快照;当前主要对单条规则点击回收生效 |
recycle.shop_level_limit.* | 回收链路独立的商店级次数/货币限制,不走购买链路的限购系统 |
recycle.messages.* | 覆盖回收提示,支持回收专属占位符 |
图标动作
| 动作 | 行为 |
|---|---|
malkuth recycle all | 回收背包中所有匹配规则且未被保护的物品 |
malkuth recycle same | 按主手物品匹配规则,批量回收同类物品 |
malkuth recycle preview | 输出当前可回收物品与预计收益 |
malkuth recycle rollback | 撤回最近一次可撤回的回收快照 |
page next / page pre | 翻页 |
配置示例
下面节选自默认 shop/recycle_full.yml:
mode: RECYCLE
enable: true
title: '&2回收站 &7{page}/{max-page}'
display: '&2回收站'
currency:
mode: vault
recycle:
one_click_enabled: true
confirm_before_recycle: true
preview_limit: 12
filters:
whitelist: []
blacklist:
- material: DIAMOND_SWORD
protect:
lock_named_items: true
lock_enchanted_items: true
lock_favorite_marked_items: true
favorite_tag_keys:
- malkuth.favorite
- malkuth.locked
- favorite
- locked
rollback:
enabled: true
expire_seconds: 30
messages:
one_click_success: '&a成功回收 {recycled_count} 个物品!获得物品种类 {reward_item_count} 个,物品总数 {reward_item_total_amount} 个,货币 {reward_currency_amount}'
preview_empty: '&c没有可回收的物品'
rollback_success: '&a成功撤回上次回收'
goods:
diamond_rule:
id: 钻石装备回收
price: '{price}'
display:
material: "diamond chestplate"
name: '&b钻石装备回收'
lore:
- '&7回收任意钻石装备'
- '&a基础单价: {price}'
回收占位符
常用回收消息占位符包括:
| 占位符 | 说明 |
|---|---|
{recycled_count} | 本次成功回收的物品数量 |
{recycled_item_name} / {recycled_item_material} | 被回收物品名称与材质 |
{reward_item_count} | 奖励物品种类数 |
{reward_item_total_amount} | 奖励物品总数量 |
{reward_currency_amount} | 奖励货币数量 |
{preview_rule_count} / {preview_total_count} / {preview_currency_amount} | 预览阶段的规则数量、物品数量与预计货币 |
{rule_id} / {rule_name} | 当前回收规则 ID 与显示名 |
{limit_reason} | 自定义 messages.limit_reached 中的限制原因 |
更完整的规则匹配、奖励、限制与消息说明见 回收系统。
当前实现注意点
goods.*.id指向回收规则 ID;shop.goods.*.display不决定规则本身的匹配与奖励。price不参与最终奖励结算,实际奖励以recycle/*.yml -> rewards为准。recycle模式可以省略currency;如果改用recycle_shop,则序列化阶段仍要求货币配置。malkuth recycle same当前按玩家主背包同类回收,不完全等同于target_inventory的外部背包扫描。- 回收限额使用独立统计,不走普通购买链路的
item_count_limit/trade_amount_limit。 - 回收规则匹配器当前已支持
source/item_source与nbt/!nbt;完整写法、上下文变量和默认示例见 回收系统。