基本信息
我的世界Java版本
平台
运行环境
其他链接
详情信息
Malkuth — 全能商店系统
一个插件,覆盖服务器经济的所有场景。
Malkuth 是基于 TabooLib 6 构建的 Minecraft 商店系统插件,提供 普通商店、限时商店、回收商店、玩家商店、拍卖行、全球市场 六大模式,配合购物车、收藏夹、邮箱、搜索比价等完整的用户体验链路,为你的服务器打造一站式经济生态。
六大商店模式
普通商店
经典的 NPC / 命令商店,支持分页浏览、自定义布局、商品模板。
mode: 'normal'
currency:
mode: vault
layout:
- '#########'
- ' ggggggg '
- ' ggggggg '
- ' ggggggg '
- ' ggggggg '
- 'P#######N'
限时商店
设定时间窗口,到期自动关闭。支持全局限购(所有玩家共享库存)和倒计时显示,适合节日活动、赛季奖励等场景。
回收商店
灵活的物品匹配规则(正则 / 包含 / 材质 / NBT / ModelData / 附魔等级),支持动态价格计算和一键回收背包所有可回收物品。
新增功能:
- CustomFishing 物品支持:通过 NBT 读取 CustomFishing 物品 ID 和价格
- 价格倍率配置:可设置回收价为原价的百分比(如 80%)
- 默认价格兜底:物品未配置价格时使用默认值
- 高级匹配规则:支持附魔等级匹配(如
SHARPNESS:>3)、耐久度匹配、物品标签匹配等
玩家商店
玩家自主上架、下架、编辑商品(价格 / 名称 / 描述 / 材质 / CustomModelData)。离线卖家自动收款,支持白名单 / 黑名单控制可上架物品。
拍卖行
竞价系统,加价比例可配置,实时出价更新,支持搜索拍品和个人拍品管理。
全球市场 ⭐ NEW
跨服玩家自由交易平台,相同物品自动按价格排序,买家优先看到最便宜的商品。支持多维度词条筛选(品质/类型/等级等),实时显示近期交易平均价帮助玩家判断价格合理性。采用独创的"双层锁"架构(本地锁 + Redis 分布式锁),确保毫秒级并发安全,杜绝超卖和重复购买。
核心特性
回收系统 — CustomFishing 深度集成 ⭐ NEW
Malkuth 的回收系统现已支持 CustomFishing 物品,通过 NBT 直接读取物品数据,实现无缝集成:
技术亮点:
- NBT 直接读取:无需反射调用 API,直接从物品 NBT 读取
CustomFishing.id和Price标签 - 性能优异:零反射开销,TabooLib NBT 工具高效读取
- 版本兼容:不依赖 CustomFishing API 变化,支持所有版本
- 离线支持:物品数据已在 NBT 中,无需插件在线
配置示例:
custom_fishing_fish:
check:
or:
- custom_fishing:
item_id: '' # 留空匹配所有 CF 物品
price:
source: custom_fishing # 从 NBT 读取价格
multiplier: 0.8 # 回收价为原价的 80%
default: 50.0 # 未配置价格时的默认值
玩家体验:
- 支持按物品 ID 精确匹配或匹配所有 CustomFishing 物品
- 自动读取物品配置的价格,无需手动维护价格表
- 支持价格倍率调整(如回收价为原价的 80%)
- 未配置价格时使用默认值兜底,确保所有物品都可回收
全球市场 — 独创双层锁架构
Malkuth 的全球市场采用业界领先的并发安全设计,确保高并发场景下的数据一致性:
技术亮点:
- 双层锁机制:本地 ReentrantLock(公平锁)+ Redis 分布式锁,处理单服和跨服并发
- 毫秒级响应:100 个玩家同时购买同一商品(库存 1),只有 1 个成功,其余 99 个瞬间收到"已售罄"提示
- 双重检查:获取锁后重新查询数据库,防止脏读和重复购买
- 自动降级:Redis 异常时自动降级为本地锁,保证高可用性
- 死锁预防:锁超时自动释放(5 秒),定期清理未使用的锁对象
玩家体验:
- 相同物品自动按价格从低到高排序,买家优先看到最便宜的商品
- 多维度词条筛选(品质/类型/等级等),快速定位目标商品
- 实时显示近期交易平均价(默认 24 小时),帮助判断价格合理性
- 支持白名单/黑名单控制可上架物品,防止垃圾商品泛滥
20+ 物品源兼容
通过 Arim 物品框架统一管理,无缝对接主流物品插件:
| 直接支持 | ItemBridge 扩展 |
|---|---|
| MythicMobs, Zaphkiel, ItemsAdder, NeigeItems, MMOItems, Oraxen, CraftEngine, DragonArmourers | SX-Item, Slimefun, HeadDatabase, ExecutableItems, AzureFlow, MagicGem, PxRpg, Ratziel, CustomFishing, Nexo, Nova, HMCCosmetics, Sertraline, Eco 全系列 |
切换物品插件无需改动商店配置,一行 material 搞定:
display:
material: "mm: 强化宝石" # MythicMobs
# material: "ia: ruby_sword" # ItemsAdder
# material: "ni: 暗影之刃" # NeigeItems
回收系统特别支持:
- CustomFishing 物品回收:通过 NBT 直接读取物品 ID 和价格,无需配置映射
- 动态价格计算:支持从物品 NBT 读取价格并应用倍率(如回收价 = 原价 × 80%)
- 智能匹配:支持按物品 ID 精确匹配或匹配所有 CustomFishing 物品
灵活的货币系统
每个商店可独立配置货币类型,内置 Vault 和 PlayerPoints 支持。更强大的是,任意 PlaceholderAPI 变量都可以作为货币,通过 Kether 脚本定义扣除和给予逻辑:
custom_points:
mode: "%custom_points%"
take: |-
command inline "points take {{ sender }} {{ &money }}" as console
give: |-
command inline "points give {{ sender }} {{ &money }}" as console
限购 & 动态定价
- 四种限购维度:每日 / 每周 / 永久 / 自定义时间窗口
- 个人限购 + 全局限购,支持 Kether 条件表达式(如 VIP 差异化额度)
- 供需公式驱动的动态定价,交易量自动影响价格,支持 min/max 约束
6 种物品给予模式
| 模式 | 说明 |
|---|---|
none |
不给物品,仅执行脚本动作(纯服务类商品) |
source |
从物品源获取原始物品 |
display |
给予 UI 展示的物品(含所有 display 修改) |
ignore_lore |
原始物品 + display 的 lore |
ignore_name |
原始物品 + display 的 name |
attribute |
给予属性加成(AttributePlus / SX-Attribute) |
用户体验
购物车
跨商品批量选购,同商品自动合并数量,一键结算。部分失败不影响其他商品。
收藏夹
右键商品快速收藏,收藏列表一键跳转源商店,数据库持久化存储。
搜索 & 比价
关键词搜索跨所有商店匹配商品名称和 lore。比价功能自动汇总同物品在不同商店的价格,按价格升序排列,点击结果直接跳转。
赠送系统
购买确认界面直接赠送给其他玩家,支持离线玩家(通过邮箱投递)。
邮箱系统
赠送物品、背包溢出、管理员发放、待领取货币,四种邮件类型。上线自动推送未读数量,支持逐件领取或一键全部领取。
交易历史
记录所有交易类型(购买 / 出售 / 回收 / 拍卖 / 赠送),个人模式和管理员模式,按时间倒序展示。
挂单系统
创建求购挂单(匹配规则 + 最高价 + 数量),系统自动撮合,支持查看和取消挂单。
脚本驱动
内置 Kether、JavaScript、Jexl 三种脚本引擎。价格公式、购买条件、购买后动作、商店开关条件均可通过脚本控制:
# 购买条件
if: 'perm vip'
# 购买后动作
actions: |-
tell color inline "&7购买了 {{ &amount }} &f{{ &display-name }}"
tell inline "共消费 {{ &price }}"
# 商店开关条件
enable: 'check time < 1740672000000'
性能
- 缓存分层:本地 ConcurrentHashMap + 可选 Redis 跨服共享 + 数据库持久化
- 全异步 IO,主线程零阻塞
- 热重载:命令触发或文件监听自动重载,不影响在线玩家
开发者 API
提供完整的公开接口和事件系统,方便二次开发:
val api = MalkuthAPI.instance
// 打开商店
api.openShop(player, "my_shop")
// 注册自定义货币
api.registerCurrency("gems", myCurrency)
// 查询余额 / 限购 / 动态价格
api.getCurrencyBalance(player, "vault")
api.getRemainingPurchaseLimit(player, "shop", "goods_1")
api.getEffectivePrice("shop", "goods_1")
// 邮箱
api.sendMailItem(player, itemStack, "来自管理员的礼物")
事件:PlayerOpenShopEvent / PlayerCloseShopEvent / PlayerPurchaseEvent / PlayerRecycleEvent / PlayerSellEvent / MalkuthReloadEvent
为什么选择 Malkuth?
功能完整度 — 六大商店模式覆盖所有经济场景
大多数商店插件只提供基础的买卖功能,Malkuth 提供完整的经济生态:
- 普通商店:经典 NPC 商店,支持自定义布局和模板
- 限时商店:节日活动、赛季奖励的最佳选择
- 回收商店:灵活的匹配规则,支持动态价格计算,深度集成 CustomFishing(NBT 读取物品价格)
- 玩家商店:玩家自主上架、编辑、交易,离线自动收款
- 拍卖行:竞价系统,实时出价更新
- 全球市场:跨服交易平台,价格排序 + 词条筛选 + 近期均价 + 毫秒级并发安全
技术领先性 — 独创双层锁架构
并发安全是商店插件的核心痛点。Malkuth 采用独创的"双层锁"架构:
- 本地锁(ReentrantLock):处理单服务器内的毫秒级并发,公平锁机制确保先到先得
- Redis 分布式锁:处理跨服务器并发,支持多服务器集群部署
- 双重检查机制:获取锁后重新查询数据库,确保数据最新状态
- 自动降级策略:Redis 异常时自动降级为本地锁,保证高可用性
实测数据:100 个玩家同时购买同一商品(库存 1),只有 1 个成功,其余 99 个瞬间收到"已售罄"提示,零超卖。
配置灵活性 — YAML + Kether 脚本驱动
无需写代码,服主通过配置文件即可定制几乎所有行为:
- 价格公式:支持动态定价,交易量自动影响价格
- 购买条件:Kether 条件表达式,支持权限、变量、时间等复杂判断
- 购买动作:执行命令、发送消息、给予属性等,完全自定义
- 货币系统:任意 PlaceholderAPI 变量都可作为货币,通过 Kether 脚本定义扣除和给予逻辑
用户体验 — 完整的购物链路
不仅仅是"买"和"卖",Malkuth 提供完整的购物体验:
- 购物车:跨商品批量选购,一键结算
- 收藏夹:右键收藏常买商品,快速定位
- 搜索 & 比价:关键词搜索 + 跨商店价格对比
- 赠送系统:购买后直接赠送给其他玩家(支持离线)
- 邮箱系统:离线交易、背包溢出、管理员发放,四种邮件类型
- 交易历史:记录所有交易,个人/管理员双视图
- 挂单系统:创建求购挂单,系统自动撮合
性能优化 — 主线程零阻塞
- 缓存分层:本地 ConcurrentHashMap + 可选 Redis 跨服共享 + 数据库持久化
- 全异步 IO:所有数据库读写在异步线程执行,主线程零阻塞
- 热重载:命令触发或文件监听自动重载,不影响在线玩家
- UI 构建缓存:商品展示 ItemStack 缓存,避免重复构建
开发者友好 — 完整的 API 和事件系统
提供 30+ 公开接口和 14 个事件(Pre/Post 双事件模式),方便二次开发:
- 打开商店、注册自定义货币、查询余额/限购/动态价格
- 邮箱系统、购物车、收藏夹等功能的 API 接口
- 生命周期事件(打开/关闭商店、重载)+ 交易行为事件(购买/出售/回收/拍卖/赠送)
环境要求
| 项目 | 要求 |
|---|---|
| 服务端 | Bukkit / Spigot / Paper 1.12+ |
| Java | 8+ |
| 必需依赖 | 无 |
| 可选依赖 | Vault, PlayerPoints, PlaceholderAPI, 各物品源插件 |
| 数据库 | SQLite(默认) / MySQL |
| 缓存 | 本地(默认) / Redis |
快速开始
- 将
Malkuth.jar放入plugins/目录 - 启动服务器,插件自动生成默认配置和示例商店
- 使用
/malkuth reload热重载配置 - 使用
/malshop open <商店ID>打开商店
购买 & 售后
- 售价:100R
- 联系作者 QQ:1747484670
- 售后支持:可根据用户需求更新功能
链接
- 文档:plugin.hhhhhy.kim/docs/malkuth
- 购买咨询 / 问题反馈:QQ 1747484670



