Vault 集成
EliteMobs 可以使用 Vault 经济提供者来代替内部货币余额。插件针对 VaultAPI 1.7 编译;请在服务器上安装兼容的 Vault 和经济插件。
对进度的影响
EliteMobs 的进度结合了武器和护甲技能、战利品以及可选的职业训练。玩家通常通过 EliteMobs 战斗获得装备和货币。从其他经济系统引入资金会改变玩家购买装备和服务的速度。
连接外部经济之前,请检查商店价格、战利品转售价格和付费服务。
启用技能要求后,这些独立要求仍然适用。Vault 不会授予技能经验、解锁职业或跳过训练师试炼。如果启用集成,请根据 EliteMobs 商店和服务价格调整经济,避免外部收入压过战斗奖励。
前置要求
要使用 Vault 集成,你必须具备:
- 已启用且兼容 EliteMobs 所用 VaultAPI 调用的 Vault 插件
- 一个向 Vault 注册
Economy服务的经济插件 - 两个插件都已正确配置并运行
EliteMobs 在初始化时检测已启用的 Vault,并在 useVault 为 true 时选择 Vault 经济路径。仅检测到 Vault 并不能证明已找到经济提供者。
配置
要启用 Vault 集成:
- 确保服务器上已安装 Vault 插件
- 确保经济插件在 EliteMobs 初始化之前注册其 Vault 提供者
- 打开 EliteMobs 插件文件夹中的
EconomySettings.yml - 设置
useVault: true - 重启服务器
配置示例:
# Whether to use Vault for the economy instead of the built-in system.
# NOT RECOMMENDED! See: https://wiki.nightbreak.io/EliteMobs/vault
useVault: false
工作原理
当 Vault 集成已启用且提供者正常工作时:
- 后续货币操作使用 Vault 的经济提供者。EliteMobs 数据库中已有的精英币不会自动转换或转移。
- 玩家击杀精英怪时获得的是你的经济货币,而非精英币
- 商店交易和其他收取货币的服务使用服务器经济。修理仍消耗碎片。
- Vault 管理货币余额;EliteMobs 仍记录赌博债务,先从 EliteMobs 收入中扣除债务,再存入剩余金额。
货币操作:
- 存入:金钱被加入玩家的 Vault 余额
- 取出:金钱从玩家的 Vault 余额中扣除
- 余额查询:查询玩家的 Vault 余额
- 直接设置余额:出于安全考虑已禁用(请使用你的经济插件)
初始化时,如果 Vault 已启用且设置了 useVault: true,EliteMobs 会先设置 VAULT_ENABLED,再查找提供者。因此,缺少提供者也可能使 Vault 模式保持启用,但没有可用的经济服务。此时余额查询会警告并返回 0;普通存款或取款可能失败,而检查交易结果的购买辅助方法会返回失败。全新启动时,如果 Vault 未安装或未启用,则继续使用内部经济。Vault 设置过程中捕获到异常也会禁用 Vault 模式。
Vault 模式启用后,运行时不会自动回退或重新绑定提供者。在接受交易之前,请修复提供者注册并重启。currencyName 仍是独立的 EliteMobs 显示设置,启用 Vault 不会自动修改它。
安全特性
出于安全原因,EliteMobs 不支持通过 Vault 直接设置玩家的货币余额。任何此类尝试都会被阻止并记录。如有需要,请使用你的经济插件的命令直接设置余额。
示例场景
假设奖励为 100 金币,且玩家没有赌博债务;这个金额仅用于示例,并非每只 50 级怪物的固定奖励。
不使用 Vault:
- 玩家击杀一只 50 级精英怪
- 获得 100 精英币(存储在 EliteMobs 数据库中)
- 可以在 EliteMobs 商店和服务中花费精英币
使用 Vault:
- 玩家击杀一只 50 级精英怪
- 获得 100 [你的经济货币](存储在 Vault/经济插件中)
- 可以在 EliteMobs 和使用同一提供者的其他系统中花钱
- 其他玩家能否转账取决于经济插件的功能
- 经济在所有插件之间实现统一
外部收入可以加快获得装备和服务的速度。技能要求和职业解锁条件仍然独立适用。
故障排查
如果 Vault 集成已启用但无法工作:
-
检查服务器日志中是否有:“Vault detected.”(出现在某条 EliteMobs 日志行中)
- 如果缺失:Vault 插件未安装或未加载
-
检查是否有警告:“Vault preference detected. This is not the recommended setting.”
- 当启用 Vault 集成时这是预期内的——它是一条提醒,而非错误
- 如果 Vault 仍无法工作,请确保你的经济插件已正确向 Vault 注册
-
检查是否有:“Player tried to check currency when they had no economy entry”
- 这是一条通用的空引用警告,不能证明玩家账户缺失。缓存的经济提供者本身也可能为 null。
- 确认提供者在 EliteMobs 初始化之前注册,然后检查经济插件的账户处理和日志。
-
如果已启用但 EliteMobs 仍在使用精英币:
- 确认配置键确实是:
useVault: true - 修改配置后重启服务器
- 检查是否有一个经济插件已向 Vault 注册
- 确认配置键确实是:
-
如果出现检测消息,但余额显示为 0 或交易失败:
- 确认初始化时已有可用的提供者;检测消息只确认 Vault 本身。
- 恢复提供者并重启。EliteMobs 不会自动连接新注册的提供者。
面向开发者
如果你正在开发扩展或集成:
- Vault 选择:
VaultCompatibility.VAULT_ENABLED不代表提供者可用;getEconomy()可能为 null - 经济 API:使用
EconomyHandler方法(不要直接使用 VaultCompatibility) - 支持的操作:增加、扣除、查询、检查交易结果的入账、检查交易结果的购买扣款和购买退款(set 已禁用)
- 每次余额变动都必须在服务器线程上、针对 EliteMobs 数据已加载的玩家执行(
EconomyHandler.isReady);否则会抛出IllegalStateException。 - 对于负数或非有限金额,
tryCredit、tryWithdraw和refundPayment会抛出IllegalArgumentException;当 Vault 拒绝交易,或该玩家已有另一项变动正在进行时,它们返回false。tryCredit会先扣除赌博债务,并且只有在 Vault 接受存款后才保存新的债务;refundPayment不扣除债务。 - 当提供方拒绝变动时,
addCurrency和subtractCurrency会抛出IllegalStateException,而不是静默失败。 - 货币精度:内部系统使用 2 位小数
- 无运行时回退:当
VAULT_ENABLED为 true 时,EconomyHandler始终委托给 Vault;不存在自动切回内部经济的机制
源代码位置:
- src/main/java/com/magmaguy/elitemobs/economy/VaultCompatibility.java
- src/main/java/com/magmaguy/elitemobs/economy/EconomyHandler.java
EliteMobs 使用 VaultAPI 1.7 作为仅编译期依赖(compile-only)。运行时服务器上必须存在 Vault 插件 JAR。