玩家自制商店
player 模式让玩家自己上架、定价和管理商品。商店配置文件只负责界面、货币、上传限制和入口按钮;真正的商品数据来自数据库,不读取 shop/*.yml 里的 goods。
适用场景
- 生存服玩家摆摊、个人店铺、玩家交易街。
- RPG 服装备寄售,配合白名单/黑名单限制可上架物品。
- 沉浸式摆摊:配合
/malkuth place [商店ID]把玩家商店绑定到世界方块。
关键配置
| 字段 | 说明 |
|---|---|
mode | player 或 PLAYER |
currency | 必填;玩家交易建议同时配置 give、take、deny 动作 |
goods | 不读取;玩家上架商品来自数据库 |
title | 可使用 {player} 显示店主名称 |
layout | g 的数量决定每页可展示/管理的槽位数量;商品较多时会按页面切换 |
limit.create.limit | 每个玩家可创建/上架的数量上限,支持 Kether 表达式 |
limit.white_list | 允许上传的物品匹配规则,至少命中一条才允许上架 |
limit.black_list | 禁止上传的物品匹配规则,命中后优先拦截 |
icons | 可放 malkuth player_shop edit、upload、search、search_seller、clear_filters 等入口 |
玩家能做什么
| 功能 | 入口 | 说明 |
|---|---|---|
| 浏览指定玩家商店 | /malshop playershop <商店ID> <玩家> | 打开某个玩家的个人商店 |
| 浏览玩家商店列表 | /malshop browse <商店ID> | 查看该玩家商店配置下的店铺列表,浏览页可按店主名称或 UUID 搜索 |
| 搜索商品 | 图标动作 malkuth player_shop search | 在当前玩家商店界面按物品名、Lore、挂单 ID、卖家名或卖家 UUID 搜索 |
| 按卖家筛选 | 图标动作 malkuth player_shop search_seller | 输入玩家名或 UUID 后只看指定卖家的商品;malkuth player_shop clear_filters 会清空商品搜索和卖家筛选 |
| 编辑自己的商店 | 图标动作 malkuth player_shop edit | 管理已上架商品 |
| 上传主手物品 | 图标动作 malkuth player_shop upload | 关闭界面后按提示输入价格 |
| 购买他人商品 | 点击玩家商店商品 | 买家扣款,卖家收款;离线交付走插件内部处理 |
| 绑定商店方块 | /malkuth place [商店ID] | 将自己的玩家商店绑定到指向的方块 |
| 生成并绑定商店方块 | /malkuth place create [商店ID] | 强制按 PLACE_ABOVE 逻辑在目标方块上方生成配置方块并绑定 |
| 自定义商店全息 | /malkuth place holo ... | 预览、开关、设置、增删行、调整高度和行距 |
| 选择摆摊模型 | /malkuth place model [模型ID] [商店ID] | 切换已绑定商店方块的盔甲架摆摊形象 |
配置示例
下面节选自默认 shop/player_shop_full.yml:
mode: PLAYER
currency:
mode: "%custom_points%"
actions:
give: |-
command inline "custompoints give {{ sender }} {{ &money }}" as console
tell inline "&a买家 &f{{ &buyer }} &a购买了 {{ &amount }} 个 &f{{ &display-name }}&a,你收到 &e{{ &money }} &a点券"
take: |-
command inline "custompoints take {{ sender }} {{ &money }}" as console
tell inline "&a你从 &f{{ &seller }} &a购买了 {{ &amount }} 个 &f{{ &display-name }}&a,花费了 &e{{ &money }} &a点券"
deny: |-
tell color "&c点券不足! 需要 &e{{ &need-money }} &c点券,你只有 &e{{ &money }}"
display: '&d玩家商店'
title: '&e{player} &7的商店'
layout:
- '#########'
- '#ggggggg#'
- '#ggggggg#'
- '#ggggggg#'
- '#########'
- '#EUSLC#B#'
icons:
'E':
material: "writable book"
name: '&e编辑我的商店'
actions:
left:
- 'malkuth player_shop edit'
'U':
material: "emerald"
name: '&a上架新商品'
actions:
left:
- 'malkuth player_shop upload'
'S':
material: "compass"
name: '&e搜索商品'
lore:
- '&7当前搜索: &f{search_keyword}'
- '&7按名称、描述或卖家搜索商品'
actions:
left:
- 'malkuth player_shop search'
'L':
material: "name tag"
name: '&b卖家筛选'
lore:
- '&7当前筛选: &f{seller_filter}'
actions:
left:
- 'malkuth player_shop search_seller'
'C':
material: "barrier"
name: '&c清除筛选'
actions:
left:
- 'malkuth player_shop clear_filters'
limit:
create:
limit: '3'
white_list:
- contains_name:
uncolor: true
match: 传说
- material:
match: DIAMOND_SWORD
black_list:
- contains_lore:
uncolor: true
match: 绑定
玩家商店方块
当 config.yml -> player-shop-block.enabled 开启后,管理员或有权限玩家可以通过 /malkuth place [商店ID] 绑定玩家商店方块:
- 只允许绑定
player模式商店,并且目标玩家必须已经有自己的商店商品记录。 - 不填
商店ID时,会自动选中你第一个已有商品的玩家商店。 BIND_EXISTING模式会把你指向的已有方块绑定为入口,并检查允许材质。PLACE_ABOVE模式会在底座方块上方生成配置中的商店方块。/malkuth place create [商店ID]会临时强制使用PLACE_ABOVE逻辑,即使全局player-shop-block.mode仍是BIND_EXISTING。- 其他玩家右键已绑定方块时,会打开店主的玩家商店。
- 开启
player-shop-block.hologram后,绑定方块可显示默认全息文本,玩家可用/malkuth place holo系列命令调整。 - 开启
player-shop-block.stall-entity.enabled且类型为ARMOR_STAND后,会在绑定方块附近生成摆摊盔甲架;右键实体可打开对应玩家商店。 - 玩家可用
/malkuth place model [模型ID] [商店ID]切换自己可用的摆摊模型,模型权限来自player-shop-block.stall-entity.models.*.permission。 - 店主破坏方块或方块被爆炸破坏后,绑定会自动解除;非店主破坏可被配置拦截。
当前实现注意点
player模式的商品搜索会匹配物品名、Lore、挂单 ID、卖家名和卖家 UUID;卖家筛选会先尝试精确玩家名 / UUID,再按玩家名模糊匹配。/malshop browse <商店ID>打开的店铺浏览页只展示有商品的店主,搜索框同样支持玩家名和 UUID。player模式不读取goods,不要在这里写固定商品列表。- 玩家商店展示、上架管理和编辑界面都按
g槽位分页;layout决定每页容量,不代表只能展示一页。 - 自定义 PAPI 货币做玩家交易时,建议同时配置
give、take、deny,否则只能读余额,无法完整处理买卖双方资金。 malkuth.admin可以看到部分管理入口,但编辑/上传界面主要仍围绕操作者自己的商店数据设计,不建议当作完整“代管他人店铺”工具使用。