全球求购
global_request / global-request / request 是全服共享的求购市场。玩家手持样品物品发布求购单,系统按配置冻结求购资金,其他玩家提交匹配物品,求购者审核通过后完成成交。
适用场景
- 生存服材料收购:玩家发布“长期收钻石/矿物/作物”的求购单。
- RPG 装备悬赏:玩家指定样品装备、来源 ID 或材质,等待其他玩家供货。
- 跨服交易所:所有子服共享同一个求购池,供货者提交后由求购者审核。
- 需要先托管资金、后审核成交的安全交易场景。
关键配置
| 字段 | 说明 |
|---|---|
mode | global_request、global-request、request 或 GLOBAL_REQUEST |
currency | 必填;求购创建、托管、退款、成交付款都会使用该货币 |
goods | 不读取;求购单来自玩家发布数据 |
item_cache.enabled | 建议保持 false;全球求购数据来自数据库,不参与静态商品缓存 |
request.* | 控制创建求购单、样品是否消耗、价格/数量限制和备注长度 |
escrow.* | 控制是否创建时托管资金、取消/过期是否退款、退款失败是否邮箱兜底 |
submit.* | 控制供货提交、是否允许自己供货、待审核申请上限和单次供货数量上限 |
approve.* | 控制同意/拒绝供货前是否打开二次确认 |
match.* | 控制样品与供货物品的匹配方式 |
expire.* | 控制求购单到期扫描、到期退回和到期前提醒 |
announcement.* | 控制创建求购、提交供货、成交公告 |
layout / icons | 主列表布局;g 展示求购单,按钮可放发布、我的求购、搜索和排序入口 |
tax.* | 求购成交同样走商店税收配置,供货者实收会扣除税费 |
玩家能做什么
| 功能 | 入口 | 说明 |
|---|---|---|
| 浏览求购 | 打开 global_request 商店 | 查看当前所有 active 求购单 |
| 发布求购 | 主界面按钮或 /malkuth request create <商店> <单价> <数量> [匹配方式] | 手持样品物品创建求购单 |
| 提交供货 | 列表右键 / Shift+左键,详情页按钮,或 /malkuth request submit <求购ID> [数量] | 提交主手匹配物品,生成待审核供货申请 |
| 查看详情 | 列表左键 | 查看样品、单价、数量、托管余额、匹配方式和到期时间 |
| 查看我的求购 | 主界面 M 按钮 | 在“全部 / 我的求购”之间切换筛选 |
| 搜索与排序 | 主界面 S 按钮 | 按关键词、求购者、来源筛选,并按时间或到期时间排序 |
| 审核供货 | 求购详情的“供货申请”界面 | 求购者左键同意、右键拒绝,Shift+右键批量拒绝当前页 |
| 取消求购 | 详情页取消按钮或 /malkuth request cancel <求购ID> | 求购者或管理员取消 active 求购单 |
配置示例
下面节选自默认 shop/global_request.yml:
mode: global_request
currency: vault
title: '&8全球求购 {page}/{max-page}'
display: '&6全球求购'
item_cache:
enabled: false
layout:
- '#########'
- '#ggggggg#'
- '#ggggggg#'
- '#ggggggg#'
- 'P#C#M#S#N'
icons:
C:
material: emerald
name: '&a发布求购'
lore:
- '&7手持样品物品发布一个求购单'
- '&7创建时会托管本次求购所需资金'
- '&7默认匹配: &f{default_match_mode}'
- '&7默认有效期: &e{expire_hours} &7小时'
actions:
left:
- 'malkuth global_request create'
M:
material: book
name: '&e我的求购'
actions:
left:
- 'malkuth global_request my_requests'
S:
material: compass
name: '&b搜索与排序'
actions:
left:
- 'malkuth global_request search'
right:
- 'malkuth global_request clear_all_filters'
shift_left:
- 'malkuth global_request sort'
request:
confirm_before_create: true
consume_sample_item: false
create_cooldown_seconds: 5
min_unit_price: 0.01
max_unit_price: -1
min_amount: 1
max_amount: -1
max_note_length: 80
escrow:
enabled: true
refund_on_cancel: true
refund_to_mailbox_on_failure: true
submit:
allow_owner_submit: false
confirm_before_submit: true
count_pending_as_reserved: true
max_pending_offers: 20
max_submit_per_offer: -1
approve:
confirm_before_approve: true
confirm_before_reject: true
match:
default_mode: source_or_similar
allow_custom_input: false
expire:
enabled: true
duration_hours: 168
check_interval_ticks: 1200
max_process_per_check: 100
return_to_mailbox: true
remind_before_hours: 12
匹配方式
| 匹配方式 | 说明 |
|---|---|
source_or_similar | 优先用物品源 ID 匹配;识别不到或不一致时回退 Bukkit isSimilar |
source_id | 必须识别到与样品一致的完整物品源 ID |
similar | 使用 Bukkit isSimilar 判断,适合原版或 NBT 完全一致的物品 |
material | 只比较材质,适合粗粒度材料收购 |
custom | 使用回收系统 matcher 规则;仅在 match.allow_custom_input: true 时允许玩家输入 |
source_id 对接 MythicMobs、ItemsAdder、Baikiruto 等物品源时最精确,但样品必须能被 /malkuth source all 正常识别。排查匹配失败时,建议先用 /malkuth source all 和 /malkuth itemdebug 看当前物品能识别到哪些来源。
托管、退款与交付
escrow.enabled: true时,创建求购会立即扣除unit_price * amount,后续同意供货时直接从托管余额结算,避免求购者离线或余额不足导致成交失败。escrow.refund_on_cancel: true时,取消或过期会退回剩余托管资金;关闭后不会自动退款,适合作为保证金消耗机制。- 供货者提交物品后,物品会进入待审核供货申请,不会立刻成交。
- 同意供货时,系统会支付供货者、写入交易/税收流水,并通过安全交付路径把物品发给求购者。
- 拒绝、取消、过期和填满后的剩余供货申请都会走邮箱退回路径,避免供货物品丢失。
搜索、排序与占位符
主界面可通过 malkuth global_request search 打开聊天输入搜索,搜索会匹配求购物品名、求购者、备注、求购 ID 和材质;也支持按物品来源筛选。malkuth global_request sort 会在时间降序、时间升序、到期时间升序之间切换。
常用 PlaceholderAPI 变量:
| 变量 | 说明 |
|---|---|
%malkuth_global_request_count_<商店ID>% | 指定求购商店当前 active 求购单数量 |
%malkuth_global_request_pending_<商店ID>% | 指定求购商店当前 pending 供货申请数量 |
%malkuth_global_request_my_active_<商店ID>% | 当前玩家在指定求购商店中的 active 求购单数量 |
%malkuth_global_request_my_pending_offers_<商店ID>% | 当前玩家作为求购者收到的 pending 供货申请数量 |
运行时权限
| 权限 | 说明 |
|---|---|
malkuth.command.request | /malkuth request 命令入口 |
malkuth.command.request.create | 创建求购命令 |
malkuth.command.request.submit | 提交供货命令 |
malkuth.command.request.cancel | 取消求购命令 |
malkuth.command.request.approve | 同意供货命令 |
malkuth.command.request.reject | 拒绝供货命令 |
malkuth.globalrequest.open | 打开全球求购商店 |
malkuth.globalrequest.my | 查看自己的求购筛选 |
malkuth.globalrequest.create | 创建求购单 |
malkuth.globalrequest.submit | 提交供货 |
malkuth.globalrequest.approve | 同意供货 |
malkuth.globalrequest.reject | 拒绝供货 |
malkuth.globalrequest.cancel | 取消自己的求购单 |
malkuth.globalrequest.admin | 以管理员身份审核/管理他人求购 |
malkuth.globalrequest.admin.cancel | 管理员取消他人求购 |
当前实现注意点
global_request不读取goods,求购单、供货申请和样品物品都来自数据库记录。- 当前默认样品不消耗;如果开启
request.consume_sample_item,创建成功会扣除主手 1 个样品。 submit.count_pending_as_reserved: true时,待审核供货会占用剩余需求额度,避免多人同时提交导致超量。submit.allow_owner_submit: false时,求购者不能给自己的求购单供货。match.allow_custom_input默认关闭;开启后玩家可输入 custom matcher,写错会被拒绝创建。- 求购模式依赖数据库表与后台过期扫描,跨服环境建议保持 MySQL / Redis 配置稳定。
group_buy_*仍是预留 UI 模板,不等同于当前全球求购功能。