AdventureMarket

全球市场交易插件 — 出售 / 收购 / 拍卖 / 邮箱 / 商店

AdventureMarket 是一款功能全面的 Minecraft 服务器全球市场插件,提供三种交易模式(出售、收购、竞拍),内建邮箱系统、独立商家店铺、多权限组税率控制和多货币经济体系。支持 SQLite / MySQL 双引擎存储,可轻松实现跨服数据同步。

核心特性

安装与依赖

项目要求
服务端Paper / Spigot 1.21+
Java21+
必需依赖Vault(经济接口)
可选依赖PlaceholderAPIPlayerPointsCraftEngineAdventureMail
  1. AdventureMarket-1.2.0.jar 放入 plugins/
  2. 确保 Vault 和一个经济插件(如 EssentialsX)已安装
  3. 启动服务器,插件自动生成默认配置
  4. 编辑配置后 /market reload 热重载

目录结构

plugins/AdventureMarket/
├── Config.yml              # 主配置(经济/序列化/MySQL/模块开关)
├── GlobalMarket.yml        # 全球市场(排序/税/拍卖/价格限制)
├── Groups.yml              # 权限组(上架数/税率/过期时间)
├── Categories.yml          # 商品分类
├── Mailbox.yml             # 邮箱设置
├── Merchant.yml            # 商家档案设置
├── ItemBlacklist.yml       # 全局物品黑名单
├── Messages.yml            # 消息文本
├── SignStore.yml            # 木牌商店
├── Alias.yml               # 命令别名
├── GUISettings/            # 13 个 GUI 配置
│   ├── GlobalMarketGUI.yml
│   ├── AuctionGUI.yml
│   ├── MailboxGUI.yml
│   ├── CategoryGUI.yml
│   ├── SearchGUI.yml
│   ├── MerchandiseGUI.yml
│   ├── MerchantProfileGUI.yml
│   ├── MerchantStoreGUI.yml
│   ├── MerchantStoreListGUI.yml
│   ├── SellInventoryGUI.yml
│   ├── BuyInventoryGUI.yml
│   └── TransactionGUI.yml
├── Permissions/            # 权限配置
│   ├── CommandPermissions.yml
│   ├── MerchandisePermissions.yml
│   ├── ProfilePermissions.yml
│   └── OtherPermissions.yml
└── Database.db             # SQLite 数据文件

更新日志

v1.2.0 最新版

命令系统

主命令 /market(别名 /am/adventuremarket)。所有子模块也注册了独立快捷命令。

提示:所有命令支持 Tab 补全。冷却时间在 Config.yml > Commands-Cooldown 中配置。

主命令总览

命令说明
/market打开全球市场 GUI
/market help显示帮助信息
/market reload重载配置(需 adventuremarket.admin
/market gui [back|open <页面>]GUI 导航:open category/profile/mailbox/store_list/search
/market search <关键词>搜索商品

出售 /market sell

/market sell <价格> [retail]

购买 /market buy

/market buy <商品ID> [数量]

批量上架 /market sellinventory

/market sellinventory <单价>    (别名: /market batch)

拍卖 /auction

命令说明
/auction打开拍卖市场 GUI
/auction start <起拍价>将手持物品发起拍卖
/auction bid <商品ID> <出价>对拍卖品出价
/auction gui <商品ID>打开竞价详情 GUI
/auction confirm <商品ID>确认成交(拥有者/管理员)

拍卖加时机制

GlobalMarket.yml 中配置 Auction-Automatic-Overtime:当剩余时间低于阈值且出价达标时自动延长时间并广播。

Auction-Automatic-Overtime:
    Enabled: false
    Policies:
        'default':
            Limit: 3              # 最多加时次数
            Overtime: 30s         # 每次加时时长
            Conditions:
                Time-Remaining: 10s   # 剩余 <10s 触发
                Bidding-Price: 100    # 出价 >100 触发

邮箱 /mailbox

命令说明
/mailbox / /mailbox gui打开邮箱 GUI
/mailbox send <玩家>将手持物品发送到目标邮箱
/mailbox pickup <邮件ID>签收指定邮件
/mailbox delete <邮件ID>删除邮件
/mailbox fetchall一键签收所有邮件
AdventureMail 联动:检测到 AdventureMail 时,/mailbox gui 自动重定向。

商品管理 /merchandise

命令说明
/merchandise gui <商品ID>打开商品详情 GUI
/merchandise remove <商品ID>下架商品(仅自己/管理员)
/merchandise reprice <ID> <新价格>修改商品价格
/merchandise set <ID> <属性> [值]修改商品属性

可修改属性

属性说明权限
price整售价(聊天输入)adventuremarket.merchandise.options.change-price
retailprice零售单价adventuremarket.merchandise.options.change-retail-price
neverexpire永不过期 true/false/switchadventuremarket.merchandise.options.set-to-never-expire
unlimited无限库存adventuremarket.merchandise.options.set-to-unlimited
hidemerchantname隐藏商家名adventuremarket.merchandise.options.hide-merchant-name
hidemerchandise隐藏商品adventuremarket.merchandise.options.hide-merchandise

商家档案 /profile

命令说明
/profile [gui] [玩家]打开自己/他人的档案 GUI
/profile set storename [名字]设置商店名称(无参数则聊天输入)
/profile set description [描述]设置商店描述
/profile set hidemerchantname switch切换隐藏商家名
/profile set hidemerchandise switch切换隐藏商品
/profile set storeclosed switch切换打烊状态
/profile set merchandisesort按上架时间排序商品(PlusShop)
/profile set itemmailsort按接收时间排序邮件(PlusShop)
/profile refresh [玩家]刷新商家数据

商店 /store

命令说明
/store打开自己的商店
/store view <玩家>查看指定玩家商店
/store list查看所有玩家商店列表

分类 /category

命令说明
/category list列出所有可用分类
/category gui打开分类选择 GUI
/category set <分类名>按分类筛选全球市场

经济 /money

命令说明
/money / /money balance查看余额
/money pay <玩家> <金额>转账给指定玩家

管理员 /market admin

需要权限:adventuremarket.admin(默认 OP)
命令说明
/market admin stats市场统计(出售/收购/拍卖数量)
/market admin database数据库连接信息
/market admin backup异步备份数据库
/market admin recorder [数量]查看最近 N 条交易记录
/market admin item序列化手持物品(调试)
/market admin remove <商品ID>强制下架
/market admin clear expired清理过期商品

配置文件

Config.yml — 主配置

经济设置

Economy-Settings:
    Default-Currency-System: Vault     # 默认货币: Vault / PlayerPoints / Default
    Multiple-Currencies-System: false  # 多货币模式
    Multiple-Currencies-System-List:
        Vault: true
        PlayerPoints: true
        Default: true
    Multiple-Currencies-Symbols:       # 命令快捷符号
        Vault: 'G'                     # /market sell 100G
        PlayerPoints: 'P'
        Default: 'S'
    Separate-Servers:                  # 多服独立经济
        Enabled: false
        Server-Name: 'Server1'
    Operators: []                      # 运营者UUID(出售不打款)

模块开关

Module-Switches:
    GlobalMarket: true    # 全球市场
    Mailbox: true         # 邮箱
    Recorder: true        # 交易记录
    Profile: true         # 商家档案
    Money: true           # 银币模块
    Custom-GUI: true      # 自定义GUI
    Sign-Store: false     # 木牌商店

MySQL 存储

MySQL-Storage:
    Enabled: false
    Hostname: localhost
    Port: 3306
    Username: root
    Password: ''
    Database: adventuremarket
    Tables:
        GlobalMarket: am_globalmarket
        Merchant: am_merchant
        Mailbox: am_mailbox
        Recorder: am_recorder
        MessageChannel: am_message_channel
    Auto-Refresh:              # 跨服自动拉取
        Enabled: false
        GlobalMarket: 10.0     # 秒
        Merchant: 10.0
        Mailbox: 10.0

SQLite 存储

SQLite-Storage:
    Database-File: Database.db
    Database-Path: plugins/AdventureMarket
    Tables:
        GlobalMarket: GlobalMarket
        Merchant: Merchant
        Mailbox: Mailbox
        Recorder: Recorder

命令冷却

Commands-Cooldown-After-Login: 3.0   # 登录后全局冷却(秒)
Commands-Cooldown:
    Enabled: true
    List:
    - 'market sell:3.0'
    - 'market buy:1.0'
    - 'auction start:3.0'
    - 'auction bid:1.0'
    - 'mailbox send:3.0'
    - 'mailbox pickup:1.0'
    - 'money pay:3.0'

其他设置

配置项说明默认值
Prefix消息前缀(支持 CraftEngine image 标签)&f<image:warn1>
Language语言Simplified-Chinese
Hex-Color-ParserHEX 颜色 (#RRGGBB)true
Functional-Color-Parser渐变/彩虹色true
Item-Serialization-Method物品序列化方式DEFAULT
Enabled-All-GUI-Buttons-LabelGUI 防作弊按钮标签false
Multi-Server-Message-Channel跨服消息通道false

GlobalMarket.yml

配置项说明默认
Default-Sorting排序:UPLOAD_TIME / EXPIRE_TIME / PRICE / ITEM_AMOUNT / RANDOMUPLOAD_TIME
Retaining-Decimal-Places价格小数位2
Number-Section-Marks-Distance-Length数字分节符距离(0=不分节)3
Merchandises-Match-When-Uploading上架时匹配收购项true
Scan-Shulker-Box-When-Uploading上架扫描潜影盒true
Transaction-After-Taxes交易前收税true
Refund-Taxes-Upon-Merchandise-Removal下架退税false

交易细分设置

Transaction:
    Selling:
        Send-To-Mailbox: false          # 购买物品发送至邮箱
        Default-To-Retail-Mode: false
    Purchasing:
        Comparison-Products: true       # 收购时比较产品
        Default-To-Retail-Mode: false
    Auctions:
        Retention-Times: 0s
        Cooldown-Of-Bids-Confirm: 0s
        Allow-Remove-After-Bidding: true  # 有人出价后仍可下架

价格限制(按 Material)

Limitation-Of-Price:
    Enabled: false
    Selling:
        DIAMOND: 50-500       # 钻石单价限制 50~500
    Purchasing:
        DIAMOND: 50-500
    Bidding:
        DIAMOND: 50-500

Groups.yml — 权限组

Priority 从上到下匹配(Admin > Mvp > Vip > Plus > Player > Default)。

预设权限组对比

权限出售收购拍卖税率邮箱有效期
Defaultadventuremarket.group.default3315%53d
Playeradventuremarket.group.player101053%307d
Plusadventuremarket.group.plus2020102%5010d
Vipadventuremarket.group.vip3030151%8015d
Mvpadventuremarket.group.mvp4040200.5%10018d
Adminadventuremarket.group.admin3月

每组可配置字段

Categories.yml — 商品分类

分类匹配方式说明
默认黑名单(全部可入)未匹配其他分类的商品
其它黑名单排除模块排除已有分类
盔甲白名单 Materials皮革→下界合金全部盔甲
武器白名单 Materials剑/弓/三叉戟/弩/盾/锤
工具白名单 Materials镐/锹/锄/钓鱼竿/剪刀等
食物Internal-Modules: Foods所有食物类
药水白名单 Materials药水/喷溅/滞留
方块Internal-Modules: Blocks所有方块类
唱片Internal-Modules: Record所有唱片
资源白名单 Materials矿石/锭/粉尘等

匹配字段

Materials / Display-Name-Keywords / Display-Lore-Keywords / Enchantments / Options / Custom-Model-Data / Internal-Modules / Serialized-Items / Modules(引用其他分类)

Mailbox.yml

配置项说明默认
Default-Sorting排序方式ACCORDING_TO_THE_STATE
Auto-Delete-Expired-Mails自动删除过期邮件false
Join-Messages登录提示未读邮件true
Auto-Delete-When-Picking-Up签收自动删除false
Return-Movable-Buttons-to-MailboxGUI 可移动物品关闭后发邮箱false

Merchant.yml — 商家档案

配置项说明默认
Balance-Minimum-Value银币最低值0
Cooldown-Of-Parameters-Setting设置参数冷却(秒)5.0
Store-Settings.Maximum-Name-Words商店名最大字数20
Store-Settings.Minimum-Name-Words商店名最小字数3
Store-Settings.Maximum-Description-Line描述最大行数3
Default-Parameters.Store-Name默认商店名&2&l{player} &9&l的商店

离线任务处理

Automatic-Processing-of-Offline-Tasks:
    Join-Messages:
        Enabled: true
        Delay: 5            # 延迟 tick
    Notices: true           # 处理离线通知
    Change-Balance: true    # 处理离线银币变动

ItemBlacklist.yml — 全局物品黑名单

Enabled: false
Whitelist: false          # true = 白名单模式
Scan-Shulker-Box: true
Materials:
- COMMAND_BLOCK
- BEDROCK
- BARRIER
Display-Name-Keywords:
- '已绑定'
Display-Lore-Keywords:
- '已绑定'
Enchantments: []
Options: []
Custom-Model-Data: []
Namespaced-Keys: []
全局、市场(GlobalMarket.yml)、邮箱(Mailbox.yml)三级黑名单独立控制,格式相同。

Messages.yml

所有消息支持 &a 颜色代码、#RRGGBB HEX、<gradient:c1:c2>text</gradient> 渐变色。

消息分类:General(通用)/ Market(出售/购买/下架)/ Auction(拍卖)/ Mailbox(邮件)/ Merchant(商家)/ Economy(经济)/ Admin(管理员)。所有消息支持变量如 {price} {currency} {player} {count}

SignStore.yml — 木牌商店

Sign-Scripts:
    '[我的商店]':
        Permission:
            Default: false
            Permission: adventuremarket.signscript.create
        Sign-Text:
            Line-1: '&0&l[{storeName}&0&l]'
            Line-2: '&0&l点击打开'
        Commands:
        - 'am store view {player}'

需启用 Config.yml > Module-Switches.Sign-Store: true

GUI 系统

所有 GUI 位于 GUISettings/,采用与 GlobalMarketPlus (GMP) 兼容的 YAML 格式。

通用结构

Simplified-Chinese:
    GUI-Title: '&f标题'        # 支持 CraftEngine image
    GUI-Size: 54              # 9/18/27/36/45/54
    Auto-Refresh:
        Enabled: true
        Delay: 0.5
    Shopping-Buttons:         # 商品内容区模板
        Selling-Item:
            Affordable:
                Display-Item-Meta: true
                Lores: ['!lores!', '...']
            Unaffordable:
                Lores: ['...']
        Location:
            Slots-Of-X: [1,2,3,4,5,6]
            Slots-Of-Y: [1,2,3,4,5]
    Custom-Buttons:           # 静态按钮
        '按钮名':
            Item: 'MAP'
            Custom-Model-Data: 520
            Commands: [...]
            Close-GUI / Refresh-GUI / Messages: ...

点击事件类型

事件说明
Left(左键)默认动作(购买/出售)
Right(右键)打开商品详情编辑
Shift_Left下架商品
Shift_Right / Middle自定义

商品 Lore 变量

变量说明
{type}商品类型
{player}商家名称
{displayPrice}整售价(格式化)
{displayRetailPrice}零售单价
{currency}货币名称
{uploadTime}上架时间
{expireTime}过期时间
{expireTimeLeft}剩余时间
{displayBiddingPrice}当前竞拍价
{topBidder}最高出价人
{uid}商品 UID
!lores!插入原始物品 Lore

全球市场 GUI

内容区 6×5 = 30 槽位。底部工具栏按钮:

按钮功能
关闭界面关闭 GUI
返回菜单返回上级
说明操作帮助
商品分类打开分类选择
刷新刷新当前页
上一页 / 下一页翻页
个人档案显示商家信息
所有商店打开商店列表
个人邮箱打开邮箱

所有 GUI 列表

文件说明
GlobalMarketGUI.yml全球市场主界面
AuctionGUI.yml拍卖列表 + 竞价详情
MailboxGUI.yml个人邮箱
CategoryGUI.yml分类选择
SearchGUI.yml搜索界面
MerchandiseGUI.yml商品详情/编辑
MerchantProfileGUI.yml商家档案
MerchantStoreGUI.yml个人商店
MerchantStoreListGUI.yml所有商店列表
SellInventoryGUI.yml批量上架
BuyInventoryGUI.yml批量收购
TransactionGUI.yml交易详情

权限系统

权限配置位于 Permissions/,每个节点支持 Default(默认启用)和 Allowed-Groups(允许的组)。

命令权限 (CommandPermissions.yml)

权限节点说明默认
adventuremarket.command.market/market 主命令true
adventuremarket.command.market.sell出售true
adventuremarket.command.market.buy购买true
adventuremarket.command.market.search搜索true
adventuremarket.command.market.sellinventory批量上架true
adventuremarket.command.auction/auctiontrue
adventuremarket.command.auction.start发起拍卖true
adventuremarket.command.auction.bid竞拍true
adventuremarket.command.auction.confirm确认成交true
adventuremarket.command.mailbox/mailboxtrue
adventuremarket.command.mailbox.send发送邮件true
adventuremarket.command.mailbox.pickup签收true
adventuremarket.command.mailbox.delete删除true
adventuremarket.command.merchandise/merchandisetrue
adventuremarket.command.merchandise.remove下架true
adventuremarket.command.merchandise.reprice改价true
adventuremarket.command.profile/profiletrue
adventuremarket.command.store/storetrue
adventuremarket.command.category/categorytrue
adventuremarket.command.money/moneytrue
adventuremarket.command.money.pay转账true
adventuremarket.command.reload重载false
adventuremarket.command.admin管理员false
许多命令有 .for-others 子权限,控制是否可对他人操作,如 adventuremarket.command.mailbox.gui.for-others

商品权限 (MerchandisePermissions.yml)

权限节点说明默认
adventuremarket.merchandise.options.editall编辑所有商品false (Admin)
adventuremarket.merchandise.marketing-mode.wholesale整售模式true
adventuremarket.merchandise.marketing-mode.retail零售模式true
adventuremarket.merchandise.cooldown-bypass绕过参数冷却false
adventuremarket.merchandise.options.change-price修改价格true
adventuremarket.merchandise.options.change-retail-price修改零售价true
adventuremarket.merchandise.options.hide-merchandise隐藏商品true
adventuremarket.merchandise.options.hide-merchant-name隐藏商家名false (Vip+)
adventuremarket.merchandise.options.set-to-unlimited无限库存false (Admin)
adventuremarket.merchandise.options.set-to-never-expire永不过期false (Admin)

档案权限 (ProfilePermissions.yml)

权限节点说明默认
adventuremarket.merchant.options.editall编辑所有档案false (Admin)
adventuremarket.merchant.cooldown-bypass绕过冷却false
adventuremarket.merchant.options.store-closed打烊true
adventuremarket.merchant.options.mailbox-locked邮箱上锁true
adventuremarket.merchant.options.merchandise-sort商品排序true
adventuremarket.merchant.options.hide-merchandises隐藏商品true
adventuremarket.merchant.options.hide-merchant-name隐藏名称false (Vip+)
adventuremarket.merchant.options.set-store-name修改商店名false (Vip+)
adventuremarket.merchant.options.set-store-description修改描述false (Vip+)

其他权限 (OtherPermissions.yml)

权限节点说明默认
adventuremarket.otherpermission.currencies.vault使用 Vault 货币true
adventuremarket.otherpermission.currencies.playerpoints使用 PlayerPointstrue
adventuremarket.otherpermission.currencies.default使用内建银币true
adventuremarket.otherpermission.itemblacklistbypass绕过物品黑名单false
adventuremarket.otherpermission.logincommandcooldownbypass绕过登录冷却false
adventuremarket.otherpermission.commandcooldownbypass绕过命令冷却false
adventuremarket.admin管理员总权限OP
adventuremarket.plusshopPlusShop 会员功能false
adventuremarket.signscript.create创建木牌商店false

经济系统

货币提供者显示名命令符号
VaultVault 经济接口金币G
PlayerPointsPlayerPoints 插件(反射加载)点券P
Default内建(内存存储)银币S

税率机制

数据库

双引擎:SQLite(默认)和 MySQL,均通过 HikariCP 连接池管理。

数据库表

说明
GlobalMarket全球市场商品(uid, merchant_uuid, type, item_data, price, currency, tax, upload_time, expire_time, status...)
GlobalMarket_auction拍卖附加数据(starting_price, current_price, top_bidder_uuid, bid_count, overtime_count...)
Merchant商家档案(uuid, name, group, balance, store_name, store_description, store_closed, head_texture...)
Mailbox邮箱(uid, recipient_uuid, sender_uuid, item_data, source, status, send_time, expire_time...)
Recorder交易记录(id, type, player_uuid, detail, timestamp...)
MessageChannel跨服消息通道(MySQL 模式)
MySQL 跨服模式下启用 Auto-Refresh 可定时从数据库拉取其他服务器的数据更新。

PlaceholderAPI 占位符

标识符:%amarket_xxx%

占位符说明
%amarket_balance%Vault 余额
%amarket_balance_<currency>%指定货币余额
%amarket_selling_count%玩家出售中商品数
%amarket_purchasing_count%收购中商品数
%amarket_bidding_count%拍卖中商品数
%amarket_mail_count%未读邮件数
%amarket_total_merchandises%市场总商品数
%amarket_store_name%商店名称
%amarket_group%权限组名

插件联动

插件类型说明
Vault必需经济接口 — 提供金币 withdraw/deposit/getBalance
PlaceholderAPI可选占位符扩展,提供 9 个 %amarket_xxx% 变量
PlayerPoints可选点券经济 — 通过反射加载 API,无需硬依赖
CraftEngine可选GUI 标题支持 <image:xxx> 自定义图片标签
AdventureMail可选邮箱功能重定向 — /mailbox gui 自动跳转 AdventureMail