- 版权类型
- 原创
- 插件中文名称
- 跨服玩家市场
- 插件英文名称
- TinyMarket
- 原帖地址
- #
- 支持的核心(服务端)
- Spigot
- Paper
- Purpur
- 语言支持
- 中文(简体)
- 适配版本(Java)
- 最新版本
- 26.x
- 1.21
- 1.20
- 1.19
- 1.18
- 1.17
- 1.16
- 1.15
- 1.14
- 1.13
表由插件自动创建,不用手建。
表结构变更会自动迁移(比如后来加的 category 列),老库升级不需要手动操作。
点击商品 → 确认界面 → 二次确认才扣钱。
跨服市场必须让余额全局一致,所以插件自己管钱包、存数据库。
代价:它和你的 Vault 经济是两套钱。 如果你希望市场用服务器主货币,需要额外做对接(目前没做)。
看受影响行数:1 = 抢到,0 = 被别人买走。单条 UPDATE 本身原子,不需要开事务锁行,也就没有死锁问题。
两个子服同时点同一件商品,只有一个能拿到 1 行。
好处:丢进 plugins 就能用,不需要手动装任何东西。
[1.13~26.x][需要 MySQL] TinyMarket 跨服玩家市场
2. 配置
plugins/TinyMarket/config.yml:3. 重启
看到这段就说明连上了:表结构变更会自动迁移(比如后来加的 category 列),老库升级不需要手动操作。
指令
主命令 /market(别名 /tm、/市场)| 指令 | 作用 |
| /market | 打开市场界面 |
| /market sell <价格> [分类] | 把主手物品上架(分类可省略,自动推断) |
| /market mine | 我的商品(在售可点下架取回) |
| /market buy <单价> <数量> | 用主手物品作模板,挂收购单 |
| /market orders | 查看收购单列表 |
| /market money [玩家] | 查看余额 |
| /market give <玩家> <金额> | 给玩家加余额(管理员) |
| /market reload | 重载配置(管理员) |
界面
主界面 54 格:45 件商品 + 底部导航| 位置 | 按钮 |
| 46 | 收购单 |
| 47 | 排序(点击循环切换) |
| 48 / 50 | 上一页 / 下一页 |
| 49 | 我的商品 |
| 51 | 分类(点击循环切换) |
| 53 | 关闭 |
为什么用自己存的钱,而不是 Vault
Vault 的经济插件(Essentials 之类)余额通常在各服内存里,A 服卖了东西 B 服看不到钱。跨服市场必须让余额全局一致,所以插件自己管钱包、存数据库。
代价:它和你的 Vault 经济是两套钱。 如果你希望市场用服务器主货币,需要额外做对接(目前没做)。
并发是怎么保证的
抢单不是「查一下状态再改」,而是:看受影响行数:1 = 抢到,0 = 被别人买走。单条 UPDATE 本身原子,不需要开事务锁行,也就没有死锁问题。
两个子服同时点同一件商品,只有一个能拿到 1 行。
已验证
| 项 | 结果 |
| Paper 1.13.2 + Java 8 | 加载正常、连库正常 |
| Paper 26.3 + Java 25 | 加载正常 |
| 两服共用同一个库 | 跨服共享验证通过 |
| 老库自动补列 | 迁移日志确认成功 |
注意:jar 为什么有 4 MB
MySQL 驱动打进了 jar。为什么要这样:Paper 的 libraries 在线加载是 1.16.5+ 的特性,本插件要支持 1.13,用不了;让服主自己放驱动又容易漏。好处:丢进 plugins 就能用,不需要手动装任何东西。
链接
[1.13~26.x][需要 MySQL] TinyMarket 跨服玩家市场