跳到主要内容

全球市场

global_market / global-market 是全服共享的寄售市场。当前默认配置包含详情页、挂单级收藏、同类比价、来源搜索、卖家改价、分类菜单、卖家筛选、属性筛选排序和返回状态保留,让玩家从“只看列表”升级为“列表浏览 + 条件筛选 + 详情决策”的交易体验。

适用场景

  • 群组服统一交易所。
  • RPG 装备市场:玩家根据品质、类型、等级等 Lore 关键词筛选。
  • 生存服寄售行:玩家自由上架,其他玩家按价格排序购买。
  • 需要右键查看详情、比价、收藏和改价的高价值物品市场。

关键配置

字段说明
modeglobal_marketglobal-marketGLOBAL_MARKET
currency必填;玩家交易建议配置完整 givetakedeny 动作
goods不读取;市场商品来自玩家上架数据
detail.*控制详情页开关、打开按键、自己的商品左键行为、原物品展示和日期格式
navigation.*控制详情页 / 我的上架返回时是否保留原市场页码、筛选、排序和搜索状态
favorite.*控制全球市场挂单级收藏功能
compare.*控制同类比价的匹配顺序与单次展示上限
price-edit.*控制卖家改价、价格上下限、是否保留原上架时间和管理员代改价
purchase.*控制全球市场购买方式,包含整批购买和单次最大购买数量
upload.*控制指令上架冷却与二次确认
expire.*控制挂单到期退回、到期提醒和续期
announcement.*控制全球市场上架/成交公告
categories.*控制自定义分类与未分类入口
tax.*控制成交税,卖家实收会扣除税费
limit.create.limit每个玩家可上架数量上限,支持 Kether 表达式
limit.white_list允许上架的物品匹配规则
limit.black_list禁止上架的物品匹配规则,命中后优先拦截
filters.attributes筛选维度;当前按物品 Lore 中的关键词匹配,筛选菜单内可对当前维度做升序 / 降序排序
layout主市场布局,g 展示市场商品
icons建议放筛选、排序、我的上架、返回等入口

玩家能做什么

功能入口说明
浏览市场打开 global_market 商店查看所有玩家共享的上架商品
打开详情页别人的商品默认右键;自己的商品默认右键或左键查看原物品、卖家、价格、库存、上架时间、近期均价和来源识别
上架商品malkuth global_market upload手持物品后按提示输入价格
管理我的商品上架管理界面左键 / 右键查看详情,Shift + 左键 直接下架
收藏挂单详情页 malkuth global_market favorite收藏的是具体挂单 listingId,不是普通商店商品收藏
同类比价详情页 malkuth global_market compare先按匹配规则筛出同类挂单,再按价格升序展示
同类搜索详情页 malkuth global_market search_similar / search_source左键按名称搜,右键按来源搜;识别不到来源时会自动回退到名称搜索
搜索 / 筛选 / 排序malkuth global_market search / filter / sort按关键词、卖家、Lore 属性和价格 / 名称排序浏览市场
按卖家直达/malshop seller <全球市场ID> <卖家>不经过搜索菜单,直接打开指定卖家的全球市场挂单列表
分类筛选malkuth global_market categorycategories.groups 中的材质、来源、名称或 Lore 规则筛选挂单
卖家改价详情页 malkuth global_market edit_price支持聊天输入新价格,输入 cancel 可取消
购买或下架详情页 confirm / delist买家点击购买,卖家点击下架;管理员可用独立权限处理他人挂单
续期挂单详情页 malkuth global_market renew开启续期后,店主可延长自己的挂单到期时间
查看均价商品模板或详情页展示最近 24 小时成交均价
查看税收/malkuth tax ...统计全球市场成交税、卖家实收和成交额

配置示例

下面节选自默认 shop/global_market.yml

mode: GLOBAL_MARKET

currency:
mode: "vault"

title: '全球市场'
display: '&6全球市场'

detail:
enabled: true
open-click: right
own-left-action: detail
show-original-item: true
show-info-on-item: false
show-source-id: true
date-format: 'yyyy-MM-dd HH:mm'

navigation:
preserve-state: true
my-uploads-back-to-market: true

favorite:
enabled: true
mode: listing
cleanup-invalid-on-open: false

compare:
enabled: true
match-order:
- source_id
- display_name
- material
max-results-per-open: 500
# 兼容旧配置:仍支持读取 max-scan-per-open,但建议迁移到 max-results-per-open

price-edit:
enabled: true
min-price: 0
max-price: -1
keep-listed-time: true
allow-admin-edit: true

purchase:
bulk_buy_all: true
max_buy_per_transaction: -1

upload:
command-cooldown-seconds: 5
command-confirm: true

categories:
enabled: false
show_uncategorized: true
uncategorized_display: '&7其他'
uncategorized_icon: BARRIER

expire:
enabled: true
duration-hours: 168
check-interval-ticks: 1200
max-process-per-check: 100
return-to-mailbox: true
remind_before_hours: 24
remind_type: CHAT
renew:
enabled: false
max_times: 3
cooldown_hours: 24
cost: 0
cost_mode: FIXED
cost_percent: 5

tax:
enabled: false
rate: 0.0

layout:
- '#########'
- ' ggggggg '
- ' ggggggg '
- ' ggggggg '
- ' ggggggg '
- 'PCFSLU#BN'

icons:
'C':
material: "book"
name: '&b分类'
lore:
- '&7当前分类: &f{category}'
- '&7当前数量: &a{category_count}'
actions:
left:
- 'malkuth global_market category'
'F':
material: "hopper"
name: '&e筛选'
actions:
left:
- 'malkuth global_market filter'
'L':
material: "name tag"
name: '&b卖家筛选'
lore:
- '&7当前筛选: &f{seller_filter}'
- '&7点击清除卖家筛选'
actions:
left:
- 'malkuth global_market clear_seller_filter'
'S':
material: "comparator"
name: '&e排序'
actions:
left:
- 'malkuth global_market sort'
'U':
material: "chest"
name: '&a我的上架'
actions:
left:
- 'malkuth global_market upload'

limit:
create:
limit: '10'
white_list:
- contains_lore:
uncolor: true
match: 允许上架
- contains_name:
uncolor: true
match: 传说
# - source: 'mythicmobs:legendary_box'
# - source:
# source: itemsadder
# item: weapons:legendary_blade
# - nbt: 'malkuth_item_source=mythicmobs'
black_list:
- contains_lore:
uncolor: true
match: 不允许上架

1.18.0 交互升级

  • 默认 detail.enabled: trueopen-click: right,别人商品默认左键购买、右键看详情;自己的商品默认右键看详情,左键由 detail.own-left-action 决定是进详情还是直接下架确认。
  • show-original-item: true 时,详情页中间 g 槽会显示原始物品快照;show-info-on-item: true 时,会把卖家、价格、库存、均价和来源识别追加到物品 Lore 中。
  • navigation.preserve-state: truemy-uploads-back-to-market: true 会保留原市场页码、筛选、排序和搜索状态;从“我的上架”进详情再返回时,也会尽量回到你来的那一层界面。
  • favorite.mode: listing 表示收藏的是具体挂单而不是商品模板;挂单售出或下架后,可以配合 cleanup-invalid-on-open 自动清理失效收藏。
  • compare.match-order 当前支持 source_iddisplay_namematerial 三种匹配维度;系统会先匹配,再按价格升序展示,最后才应用 max-results-per-open 上限。
  • price-edit.keep-listed-time: true 时,改价不会刷新原上架时间;开启 allow-admin-edit: true 后,拥有管理员权限的玩家可以代替卖家改价,源码还会额外输出审计日志。

购买、分类与搜索

配置项说明
purchase.bulk_buy_alltrue 时,玩家上架一组物品输入整批总价,买家默认按数量购买;false 时兼容旧单价行为
purchase.max_buy_per_transaction单次最多购买数量;-1 表示只受挂单剩余数量限制
categories.enabled是否启用自定义分类菜单
categories.show_uncategorized未匹配任何分类的物品是否进入“其他”分类
categories.uncategorized_display“其他”分类显示名
categories.uncategorized_icon“其他”分类图标材质
categories.groups自定义分类列表,支持 materialsourcenamelore 匹配

分类示例:

categories:
enabled: true
groups:
weapon:
display: '&c武器'
icon: DIAMOND_SWORD
lore:
- '&7点击筛选武器类物品'
- '&7当前商品: {count} 件'
match:
- 'material:*_SWORD'
- 'material:*_AXE'
- 'source:mythicmobs:*sword*'

搜索菜单由 global_market_search.yml 控制,支持关键词搜索、卖家搜索和一键清除所有筛选。关键词可以直接输入物品名称或描述,也可以输入 source:<来源ID> 做来源搜索。

属性筛选菜单由源码内置布局生成,不单独读取 UI 文件。玩家选中某个 filters.attributes 维度后,可以继续选择关键词,也可以对该维度使用升序 / 降序 / 清除排序;排序时会在物品 Lore 中查找包含当前关键词的那一行进行比较,最后再按价格兜底排序。

到期退回与续期

expire 用于避免全球市场挂单长期堆积。开启后,过期挂单会自动下架并通过邮箱退回给卖家。

配置项说明
expire.enabled是否启用挂单到期处理
expire.duration-hours每个挂单保留多久,按上架时间计算
expire.check-interval-ticks到期扫描间隔
expire.max-process-per-check单次扫描最多处理多少个过期挂单
expire.return-to-mailbox是否退回邮箱;关闭后不会执行自动到期处理
expire.remind_before_hours到期前多少小时提醒卖家,0 表示不提醒
expire.remind_type提醒方式:CHATACTION_BARTITLE
expire.remind_message提醒文本,支持 {item_name}{amount}{price}{remaining}{expire_time}{shop}{listing_id}
expire.renew.enabled是否允许玩家续期自己的挂单
expire.renew.max_times最大续期次数,-1 表示不限制;当前计数为运行期内存计数,重启后重置
expire.renew.cooldown_hours同一挂单两次续期之间的冷却时间
expire.renew.cost固定续期费用
expire.renew.cost_modeFIXED 固定金额,PERCENT 按挂单价格百分比
expire.renew.cost_percent百分比续期费用,5 表示挂单价格的 5%

续期入口一般放在详情页按钮中,动作是 malkuth global_market renew。玩家必须是挂单主人,并拥有 malkuth.market.renew 权限。

详情页和列表可用的到期变量:

变量说明
{expire_time}到期时间文本;未启用时显示“永不过期”
{expire_remaining}剩余时间文本
{renew_enabled}是否启用续期
{renew_available}当前挂单是否可续期
{renew_cost}本次续期费用
{renew_count}当前已续期次数
{renew_max_times}最大续期次数
{renew_cooldown_remaining}续期冷却剩余时间
{renew_state}当前续期状态提示

公告与税收

全球市场公告配置在 announcement.uploadannouncement.sold

announcement:
upload:
enabled: false
scopes:
server:
enabled: true
message: '&6[全球市场] &f{seller_name} &7上架了 &f{item_name} x{amount}&7,售价 &e{price}&7!'
click_action: 'command inline "malshop open global_market"'
cooldown_seconds: 0
min_price: 0

公告范围支持 serverbcworldpermission。常用占位符包括 {shop}{shop_display}{listing_id}{item_name}{material}{amount}{stock}{seller}{seller_uuid}{buyer}{buyer_uuid}{price}{listing_price}{total_price}

全球市场成交税使用 tax.*,买家按挂单价格付款,卖家实收会扣除税费,并写入税收流水。完整写法见 成交税

上传限制与排查

  • limit.white_listlimit.black_list 复用和玩家商店相同的 matcher 语法,支持 source!sourcenbt!nbt、Lore / 名称关键词等规则。
  • 当前上传拦截会优先给出更具体的拒绝原因,例如“来源不允许”“缺少所需标签”“已被服务器标记为不可交易”。
  • 服主排查全局市场上传限制时,建议先用 /malkuth source all 看当前物品能识别到哪些来源,再用 /malkuth itemdebug 查看 source tag / source id tag 等基础信息。

运行时权限

权限说明
malkuth.globalmarket.detail查看全球市场详情页
malkuth.globalmarket.favorite收藏或取消收藏全球市场挂单
malkuth.globalmarket.compare打开全球市场同类比价界面
malkuth.globalmarket.search-similar在详情页按名称 / 来源搜索同类挂单
malkuth.globalmarket.edit-price修改自己的全球市场挂单价格
malkuth.globalmarket.admin.edit-price允许管理员修改任意全球市场挂单价格
malkuth.globalmarket.admin.delist允许管理员下架任意全球市场挂单
malkuth.market.renew允许玩家续期自己的全球市场挂单

当前实现注意点

  • global_market 不读取 goods,所有商品都来自玩家上架数据库。
  • 普通收藏夹 favorite.yml 和全球市场挂单收藏是两套数据:前者收藏商店商品,后者收藏具体挂单。
  • 详情页“按来源搜索”内部会把搜索词改成 source:<完整来源ID>;如果当前物品无法识别来源,会提示后回退到按名称搜索。
  • /malshop seller <全球市场ID> <卖家> 会直接进入带卖家筛选的市场列表;卖家筛选先尝试精确玩家名 / UUID,再按玩家名模糊匹配。
  • compare.max-results-per-open 是展示上限,不是“先扫多少条再匹配”的老语义;旧配置 max-scan-per-open 仍兼容读取,但建议尽快迁移。
  • 卖家改价默认要求 malkuth.globalmarket.edit-price;管理员代改价和下架他人挂单则分别要求 malkuth.globalmarket.admin.edit-pricemalkuth.globalmarket.admin.delist
  • 自定义 PAPI 货币做玩家交易时,建议同时配置 givetakedeny,避免扣款成功但提示不完整。
  • expire.renew.max_times 与冷却记录当前保存在运行期内存中,服务器重启后会重置。
  • categories.enabled: false 时,分类按钮会提示未启用并返回市场列表。

相关页面