ShopManager —— 一款配置简单易懂的多功能商店插件

原创 付费 ShopManager —— 一款配置简单易懂的多功能商店插件 0.8.0

请登录后获取
版权类型
原创
插件中文名称
ShopManager
插件英文名称
ShopManager
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
  3. Folia
  4. Purpur
  5. Leaves
语言支持
多语言
适配版本(Java)
  1. 26.x
  2. 1.21
  3. 1.20
  4. 1.19
  5. 1.18
  6. 1.17
  7. 1.16
ShopManager —— 高自由度商店系统)

基于 TabooLib 开发的商店核心插件,商品(goods)与商店界面(shops)完全分离,支持动态价格、事件折扣、随机商品轮换、多经济结算、跨服同步与图形化编辑。开箱自带 20+ 套市场 / 事件模板,最低支持 Paper/Spigot 1.16.5。




插件信息

  • 插件名称:ShopManager(Core)+ ShopManagerEditor + ShopManagerVelocity
  • 当前版本:Core 0.8.0 / Editor 2.2.0 / Velocity 0.8.0
  • 适用服务端:Paper / Spigot 1.16.5+(TabooLib 平台)
  • 插件类型:商店 / 交易 / 经济类
  • 语言支持:简体中文(默认)、English
  • 主命令:/smanager
  • Q群:1102249149

软依赖(全部可选)

  • 经济:Vault、PlayerPoints
  • 占位符:PlaceholderAPI(自带 PAPI 扩展)
  • 第三方物品:ItemsAdder、Oraxen、Nexo、CraftEngine、MMOItems 等
  • 跨服:Redis(可选)、Velocity 代理端(可选)




核心功能

1. 商品与界面分离设计

  • goods/ 负责商品、价格、库存、限额、交易规则;
  • shops/ 负责商店界面、布局、按钮、动作;
  • 购买、出售、快捷出售共用同一套报价 → 校验 → 提交链路,规则不打架。

2. 完整的商店玩法

  • Chest GUI 商店界面,商品搜索按玩家看到的显示名称匹配;
  • 个人 / 全球库存两种模式;
  • 动态价格:内置市场公式引擎,价格随供需 / 事件浮动,支持价格阶段与 market-rate / discount-rate / event-rate 多因子;
  • 随机商品轮换:菜单可设为 random-daily / random-weekly / random-monthly / random-yearly,每天自动换一批候选商品上架;
  • 限购限额:个人 / 全球限额、收益限制(earnlimit)、交易冷却;
  • 手动补货:/smanager restock 一键补充全球库存。

3. 事件系统(节日 / 活动玩法)

  • 内置9 个事件模板:欢乐时光、丰收周末、矿工周一、月初补给、夜市、红石周三、宝藏周末、周促销、冬季节日;
  • 事件可配置折扣倍率、补货触发、开始 / 结束广播、事件标签,与动态价格叠加生效;
  • 事件按周期自动轮换(每日 / 每周 / 固定时段),到点自动生效、自动结束,无需人工干预;
  • 多个事件可设置堆叠优先级与覆盖模式,活动节奏完全可控。

4. 多经济结算

  • 支持Vault 金币、PlayerPoints 点券、经验、经验等级、物品币、命令经济;
  • 单个商品可同时标价多种货币,玩家自行选择支付方式(GUI 支付选择器);
  • 命令型经济同样支持退款路径,保证交易可回滚。

5. 跨服与群组服

  • Redis 集群总线:跨服同步成交统计、个人 / 全局限额与库存变化;
  • 分布式限额:多人服务器共享限购额度,防跨服刷购;
  • ShopManagerVelocity 配套:代理端认证菜单路由,共享密钥(32+ 字符)防伪造,请求 5 秒有效期——库存、经济、交易仍全部在子服完成,数据不经过代理。

6. 图形化编辑器(ShopManagerEditor)

  • /smanager editor 打开商品 / 商店 / 事件可视化编辑器;
  • 所见即所得编辑商品池、商品属性、商店布局与按钮动作;
  • 主手物品一键保存进内部物品库,编辑保存自动落盘(原子写入,防写坏配置);
  • 编辑器布局可热重载,资源删除后重启自动恢复。

7. 内部物品库 + 第三方物品适配

  • /smanager item save/give/list 管理内部物品库;
  • 检测到第三方插件物品(ItemsAdder/Oraxen/Nexo 等)时自动识别,不落内部库,由外部适配器直接引用;
  • 编译期校验每个商品引用,无法解析的物品会拒绝启动候选配置,绝不让菜单渲染出 BARRIER 错误物品。

8. 模板系统(快速开店)

  • 自带14 套可复用模板:标准市场、标准交易、每日 / 每周 / 每小时补货、新手限量、会员限量、回收站、富余回收、批发、合约订单、动态市场、应急补给等;
  • 商品池与商店可直接从模板创建,配置量大幅减少。

9. 交易安全与审计

  • 菜单库存守卫 + 点击防抖,防止刷物品;
  • 成交日志统一写入 logs/trades-YYYY-MM-DD.tsv(按天归档,保留天数可配);
  • 配置加载采用候选快照 + 原子提交,失败自动回滚上一代运行态,不影响在线玩家;
  • 重载前自动关闭所有旧版商店界面,避免玩家看到过期数据。

10. 调试与诊断

  • /smanager debug 只读诊断,不修改任何交易数据;
  • /smanager debug price 直接预览动态价格计算过程,调价前先看结果。




命令列表

玩家命令(默认可用)

  • /smanager help —— 查看命令分类与帮助
  • /smanager open(菜单)(玩家) —— 打开商店菜单(管理员可代开)
  • /smanager earnlimit —— 查看自己的收益限制
  • /smanager earnlimit check(玩家) —— 查看指定玩家收益限制

管理命令(需 shopmanager.admin)

  • /smanager reload —— 重载全部配置
  • /smanager restock(商店/all)(商品/all) —— 手动补充全球库存
  • /smanager create(菜单)(empty/normal/random-daily/random-weekly/random-monthly/random-yearly) —— 新建菜单配置(支持随机轮换类型)
  • /smanager delete(菜单) —— 删除菜单配置
  • /smanager refresh(玩家/global)(商店/all) —— 刷新随机商品菜单
  • /smanager goods —— 商品池管理(create/delete/set)
  • /smanager item —— 内部物品库管理(save/give/list)
  • /smanager earnlimit reset(玩家)(商店/all) —— 重置指定玩家收益限制
  • /smanager debug(config/events/storage/logging/providers/price) —— 运行诊断(只读)
  • /smanager debug price(菜单)(商品)(buy/sell)(数量) —— 预览动态价格(只读)
  • /smanager editor —— 打开图形化编辑器(Editor 插件提供)

Velocity 代理端:/smanager open(菜单)(认证路由,需在代理端安装 ShopManagerVelocity)




权限列表

  • shopmanager.admin —— 全部管理命令与编辑器(默认 op)

玩家侧操作(打开菜单、购买 / 出售)默认对所有玩家开放;如需按菜单 / 商品做细粒度权限,可在商店界面的按钮动作与商品池规则中配置。




配置结构(首次启动自动生成)

代码:
plugins/ShopManager/
├─ config.yml                 # 主配置:语言 / 跨服 / Velocity / 市场周期 / 物品库 / 调试 / UI
├─ currency.yml               # 经济定义
├─ database.yml               # 数据库(含 Redis 连接)
├─ security.yml               # 安全设置
├─ goods/                     # 商品池(20+ 内置示例:资源、建筑、红石、农业、生物掉落……)
├─ shops/                     # 商店界面(与商品池一一对应)
├─ menus/                     # 功能菜单(主菜单、搜索、购买/出售数量、事件枢纽)
├─ items/                     # 内部物品库(Editor 自动写入)
├─ events/                    # 事件配置(9 个内置事件模板)
├─ templates/                 # 可复用市场/交易模板(14 套)
└─ languages/                 # zh_CN.yml / en_US.yml




配置示例

商品池 goods/daily-picks.yml(每日轮换候选商品)

YAML:
goods:
  iron_ingot:
    material: IRON_INGOT
    description:
    - '&6每日轮换候选商品'
    - '&7每天随机抽取其中一部分上架'
    market:
      buy:
        prices:
          vault:
            amount: '90'      # 收购价 90 金币
      sell:
        prices:
          vault:
            amount: '22'      # 出售价 22 金币
      template: market-standard   # 复用市场模板(限购周期等)
  diamond:
    material: DIAMOND
    market:
      buy:
        prices:
          vault:
            amount: '850'
      sell:
        prices:
          vault:
            amount: '200'
      template: market-standard

商店界面 shops/flash-market.yml(限时秒杀商店)

YAML:
Title: '&8限时秒杀 &7· {page}/{pages}'
UI:
  search: true                  # 开启该商店的搜索
Layout:
- '#########'
- '#       #'
- '#       #'
- '#       #'
- '#       #'
- '#P#S#B#N#'
Goods:
  source: flash-market          # 绑定商品池
  slots: auto
  selection:
    strategy: all
    refresh: none
Trade:
  template: trade-standard
Buttons:
  Goods:
    display:
      material: '{goods-material}'
    actions:
      left:
      - 'menu: buy-amount'      # 左键进入购买数量菜单
      right:
      - 'menu: sell-amount'     # 右键进入出售数量菜单
      shift-left:
      - 'buy: 64'               # Shift+左键直接买 64 个
      shift-right:
      - 'sell: 64'              # Shift+右键直接卖 64 个
  S:
    display:
      material: OAK_SIGN
      name: '&b搜索商品'
    actions:
      left:
      - search
  P:
    display:
      material: ARROW
      name: '&e上一页'
    actions:
      left:
      - 'page: previous'
  N:
    display:
      material: ARROW
      name: '&e下一页'
    actions:
      left:
      - 'page: next'

事件 events/happy-hour.yml(每日欢乐时光八折)

YAML:
enabled: true
priority: 30                    # 事件堆叠优先级
stacking:
  group: sale
  mode: override                # 同组事件覆盖模式
schedule:
  repeat: daily
  start: '18:00'                # 每天 18:00 开始
  end: '20:00'                  # 20:00 结束
target:
  shops:
  - flash-market                # 只作用于秒杀商店
effects:
  buy-price-multiplier: 0.8     # 买价 8 折
  description-add:
  - '&e&l欢乐时光'
  - '&6每日 18:00 - 20:00 · 买价 -20%'
  tag: happy-hour
actions:
  start:
    broadcast:
    - '&e[ShopManager] 欢乐时光开始,秒杀商店全场八折!'
  end:
    broadcast:
    - '&7[ShopManager] 今日欢乐时光结束。'




安装说明

  1. 将 ShopManager-0.8.0.jar 放入子服 plugins/ 目录(需要 TabooLib 平台支持);
  2. (可选)管理服安装 ShopManagerEditor-2.2.0.jar 获得图形化编辑能力;
  3. (群组服可选)代理端安装 ShopManagerVelocity-0.8.0.jar,并配置 32+ 字符共享密钥;
  4. 重启服务器,按需修改配置后执行 /smanager reload。




截图

(发帖前请补充:商店主界面 / 商品详情 / 编辑器界面 / 事件配置示例)




更新日志(当前版本要点)




常见问题(FAQ)

Q1:需要安装 TabooLib 吗?
A:需要。ShopManager 基于 TabooLib 平台开发,服务端需加载 TabooLib 运行库。

Q2:支持哪些服务端?
A:最低 Paper/Spigot 1.16.5。Paper、Folia、Purpur、Leaf 以及搭配第三方物品插件(ItemsAdder/Oraxen/Nexo 等)的组合,建议在真实服务器上做一次 smoke test 后再正式上线。

Q3:怎么开启跨服同步?
A:先在 database.yml 配置好 MySQL/MariaDB 与 Redis,然后在 config.yml 打开 cross-server.enabled,并确保每个子服 server.id 唯一。

Q4:ShopManagerVelocity 必须装吗?
A:可选。单服或未启用代理路由时不需要;只有希望玩家在 Velocity 代理端执行 /smanager open 时才安装,且需在 config.yml 与代理端配置相同的 32+ 字符共享密钥。

Q5:编辑器(Editor)和核心(Core)版本要匹配吗?
A:Editor 通过核心的扩展注册接口挂载,建议使用配套版本(Editor 2.2.0 对应 Core 0.8.0);Editor 资源由编辑器自行安装到 menus/editor/,删除后重启可恢复。

Q6:交易日志保留多久?
A:成交日志按天写入 logs/ 目录,保留天数在 security.yml 中配置,可自由调整。

Q7:从旧版升级会怎样?
A:配置严格按现行格式解析,不读取旧字段、旧 rules 或旧目录;建议用新版配置目录重新生成后迁移业务文件。




注意事项

  • 配置严格按现行格式解析,不兼容旧版本字段与旧 rules 目录;
  • 跨服模式请在 database.yml 完成 Redis 配置后再开启,且每个子服 server.id 必须唯一;
  • 生产环境建议关闭 debug;调试命令为只读,不会修改交易数据。


作者
浪子清风
查看
113
首次发布
最后更新

评分

0.00 星 0 次评分
后退
顶部 底部