Skip to content

上一页:方块模型作物.md · 下一页:../04-开发者/经济API.md 相关:../02-服主指南/经济动作.md · ../04-开发者/经济API.md · ../02-服主指南/配置文件.md

💰 经济插件对接

QCL 通过 EconomyBridge 统一对接三个经济后端:VaultExcellentEconomyPlayerPoints。GUI 经济动作、经济 API 全都走这一层,你的上层配置/代码不需要关心底层装的是哪个插件。

🛟 同样遵循软依赖 + 反射桥:初始化时按序 registerOptional只有「装了且启用」的后端才会被注册,没装就跳过,绝不影响启动。


⚖️ 三后端对比

维度VaultExcellentEconomyPlayerPoints
provider idvaultexcellenteconomy(别名 eeplayerpoints(别名 pp
货币模型单货币多货币(money/gold/silver…)单点券
currency 参数忽略每次操作必填忽略
离线玩家✅ 支持❌ 仅在线✅ 支持
数据类型DoubleDouble整数(Double 会四舍五入)
实现方式服务注册获取 net.milkbowl.vault.economy.Economy反射 su.nightexpress.excellenteconomy.api.ExcellentEconomyAPI反射 PlayerPoints.getInstance().getAPI()
推荐用途通用主货币、和其它插件兼容性最好需要多种货币(金币/银币/点数分账)时纯点券/积分体系

⚠️ ExcellentEconomy 的多货币是双刃剑:好处是一套插件管多种货币;代价是每次余额操作都必须指定 currencyId(如 moneygoldsilver),否则会报 CURRENCY_REQUIRED

⚠️ PlayerPoints 是整数体系:传入的 Double 会被四舍五入。别指望小数点券。


🧭 auto 选源逻辑

economy.default-provider 设为 auto(默认)时,QCL 自动挑后端,规则如下:

情况选源优先级
指定了 currency优先 ExcellentEconomy(因为只有它支持多货币)
没指定 currencyVault > ExcellentEconomy > PlayerPoints,返回第一个可用的
text
auto + 带 currency  →  ExcellentEconomy 优先
auto + 不带 currency →  Vault ▶ ExcellentEconomy ▶ PlayerPoints(取第一个可用)

💡 装了多个经济插件、又想强制用某一个?别用 auto,直接把 default-provider 写死成 vault / ee / pp


⚙️ config 配置

经济相关配置在主 config(详见 ../02-服主指南/配置文件.md):

yaml
economy:
  # auto | vault | excellenteconomy(ee) | playerpoints(pp)
  default-provider: auto
  # 默认货币 id,仅对支持多货币的后端(ExcellentEconomy)有意义
  default-currency: money
配置键取值说明
economy.default-providerauto / vault / excellenteconomy / ee / playerpoints / pp选哪个后端;auto 见上文规则
economy.default-currency货币 id(默认 money不显式指定 currency 时用它;单货币后端忽略

📋 三种典型配法

yaml
# 1️⃣ 只有 Vault,单货币(最常见)
economy:
  default-provider: vault
yaml
# 2️⃣ 用 ExcellentEconomy 的多货币,默认货币设成 gold
economy:
  default-provider: ee
  default-currency: gold
yaml
# 3️⃣ 纯点券服
economy:
  default-provider: pp

🔧 EconomyProvider 能力

每个后端在内部都实现 EconomyProvider 接口,能力一致:

方法作用
id后端标识(vault / excellenteconomy / playerpoints
isAvailable该后端当前是否可用
getBalance(...)查余额
has(...)是否有足够余额
deposit(...)存入
withdraw(...)扣除
setBalance(...)直接设置余额

所有操作返回 EconomyTransactionResult

字段含义
success是否成功
message人类可读消息
code结果码(如 CURRENCY_REQUIRED
suggestion修复建议
provider实际处理的后端

开发者如何直接调用这些方法,见 👉 ../04-开发者/经济API.md


🖱️ 与 GUI 经济动作的关系

服主在 GUI 里用的经济动作 give_money / take_money / set_money,底层正是调用上面的 deposit / withdraw / setBalance。也就是说:

text
GUI 动作 give_money/take_money/set_money


   EconomyBridge → 选中的 EconomyProvider → 真正的经济插件

动作的 value 写法(金额、currency 等)见 👉 ../02-服主指南/经济动作.md


🩺 诊断

经济相关问题,EconomyDiagnostics 会给出明确提示:

诊断含义
unavailable()没有任何经济后端可用(一个都没装/没启用)
providerMissing(id)你指定的 provider id 对应的插件没装
currencyMissing(id)指定的货币 id 不存在(多货币后端常见)

可配合 /qcl status detail 一起看经济桥状态。


❓ 常见问题

Q:用了 ExcellentEconomy,操作报 CURRENCY_REQUIRED A:EE 是多货币后端,每次操作都得带 currency。要么在动作/调用里显式指定,要么把 economy.default-currency 配成一个有效货币(如 money)。

Q:点券出现小数 / 数额对不上? A:PlayerPoints 是整数体系,传入的 Double四舍五入。改用 Vault/EE 才能保留小数。

Q:离线玩家给钱失败? A:ExcellentEconomy 仅支持在线玩家。需要给离线玩家发钱,用 Vault 或 PlayerPoints。

Q:装了好几个经济插件,QCL 用了哪个? A:auto 模式按「带不带 currency」走优先级(见上文)。想锁定就把 default-provider 写死成具体 id,并用 /qcl status detail 确认实际命中的 provider

Q:一个经济插件都没装会怎样? A:经济后端一个都不注册,相关操作返回失败(unavailable()),但不影响 QCL 及其它功能启动


📚 继续阅读