-
Notifications
You must be signed in to change notification settings - Fork 7
config reference
title: Config Reference description: Análisis exahustivo del config.yml de Vault v2.1.0 — cada clave con su tipo, valor por defecto, explicación detallada y código fuente relacionado. Incluye language, currency., storage, currencies, top., bank (interest+tax), discord., world_balances, import.essentials, offline-uuid-fallback, update_check, pay_menu, pay_pending, pay_limits y loans.* (defaulted_effects).
Analizamos todas las claves de src/main/resources/config.yml:4-206. Cada entrada muestra:
-
Ruta (ej.
currency.symbol) - Tipo (String / int / double / boolean / List / Map)
- Default (valor exacto con el que se genera el config.yml por primera vez)
- Explicación + ejemplo en Java cuando es relevante.
| Sección | Nº claves | Objetivo |
|---|---|---|
language + plugin_version
|
2 | Metadata + selección del messages_xx.yml a cargar |
currency.* |
10 | Formato por defecto (symbol, position, space, format, locale, abbreviate) |
storage.* |
8 | YAML vs MySQL — HikariCP host/port/db/user/pass/pool_size |
currencies.* |
∞ | Definición multi-moneda (default, gems, tokens, etc.) |
top.* |
2 | Caché async de /vaultop |
bank.interest.* |
3 | Interés periódico sobre bank_balance |
bank.tax.* |
4 | Impuesto progresivo sobre la parte que excede threshold |
discord.* |
4 | Webhook para transacciones grandes + eventos anti-dupe |
world_balances.* |
1 | Lista de mundos con balances independientes |
import.essentials.* |
2 | Migrador one-shot desde EssentialsX |
offline-uuid-fallback |
1 | Generar UUID offline para jugadores nunca vistos |
update_check* |
2 | Comunicación vs API de actualizaciones (opcional, debug) |
pay_menu.* |
2 | Tamaño inventario y "mostrarme a mí mismo" en /pay |
pay_pending.* |
1 | Límite de charge-requests entregados en el login |
pay_limits.* |
2 | Min / max por operación pay/charge |
loans.* |
13 | Sistema de préstamos completo (montos, plazos, efectos por mora) |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
plugin_version |
String | v2.1.0 |
Sólo informativo (nunca lo cambies a mano). Lo usa VaultPlugin.onEnable() para imprimir el logo de arranque. |
language |
String | en |
Código ISO 639-1 / BCP-47 del messages_<code>.yml a cargar. Valores soportados: en, es, pt, de, fr, nl, pl, ru, hi, zh_CN, zh_TW. Si pones un código no existente fallback al messages_en.yml. |
// Messages.java — carga inicial
String lang = plugin.getConfig().getString("language", "en");
File msgFile = new File(plugin.getDataFolder(), "messages/messages_" + lang + ".yml");
if (!msgFile.exists()) msgFile = new File(plugin.getDataFolder(), "messages/messages_en.yml");Aplicado cuando SimpleEconomy.format(currencyId, amount) no encuentra un override en currencies.<id>.*.
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
currency.symbol |
String | "$" |
Texto o emoji que representa la moneda. Soporta colores &6, ej. &6💰
|
currency.position |
enum String | suffix |
suffix → 10 $ · prefix → $ 10 (antes del número). |
currency.space |
boolean | true |
true añade espacio entre símbolo y número (10 $); false → 10$. |
currency.format |
String | auto |
Reservado v2.2. En v2.1 se ignora y se usa siempre currency.locale. |
currency.locale |
String | "auto" |
Estilo de separadores de miles y decimales. Presets válidos: us (1,000.00), eu (1.000,00), uk, in (1,00,000.00), ch (1'000.00), fr (1 000,00). Acepta también BCP-47: es-ES, de-DE, it-IT, pt-BR, fr-FR. "auto" o "" usa Locale.getDefault() de la JVM. |
currency.abbreviate.decimals |
int | 1 |
Decimales visibles tras abreviar (ej. 1.2k, 3.5m). 0 = 1k, 4m. |
currency.abbreviate.suffix.k |
String | "k" |
Sufijo para miles (kilo). |
currency.abbreviate.suffix.m |
String | "m" |
Sufijo para millones. |
currency.abbreviate.suffix.b |
String | "b" |
Sufijo para billones. |
currency.abbreviate.suffix.t |
String | "t" |
Sufijo para trillones. |
Ejemplo práctico:
currency:
symbol: "€"
position: suffix
space: true
locale: "eu" # → 1.234,56 €
abbreviate:
decimals: 2
suffix: {k: "k", m: "M", b: "B", t: "T"} # → 1.234.567 → 1,23M €| Clave | Tipo | Default | Explicación |
|---|---|---|---|
storage.use_mysql |
boolean | false |
false → todo se guarda en balances.yml + bank.yml. true → usa MySQL con HikariCP (obliga a rellenar storage.mysql.*). |
storage.mysql.host |
String | localhost |
FQDN o IP del servidor MySQL / MariaDB. |
storage.mysql.port |
int | 3306 |
Puerto TCP (3306 estándar; MariaDB SkySQL suele usar 5001). |
storage.mysql.database |
String | vault |
Esquema / schema. El plugin no lo crea; créalo tú antes con CREATE DATABASE vault CHARACTER SET utf8mb4;. |
storage.mysql.username |
String | root |
Usuario con privilegios CREATE TABLE, SELECT, INSERT, UPDATE, DELETE en el schema. |
storage.mysql.password |
String | "" |
Contraseña en texto plano. Si usas Docker/K8s mejor sobreescribe con variable de entorno VAULT_MYSQL_PASSWORD (el archivo tiene prioridad). |
storage.mysql.pool_size |
int | 10 |
Tamaño máximo del pool HikariCP (maximumPoolSize). minimumIdle = mismo valor en v2.1. |
Mapa <id>: <CurrencyDef> — cada clave hija de currencies: es una moneda. La primera (o la que se llame literalmente default) se convierte en la moneda legacy que devuelve net.milkbowl.vault.economy.Economy.getBalance().
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
currencies.default |
Map | {symbol: "$", position: suffix, space: true} |
Moneda principal (obligatoria si existe la sección currencies:). Admite overrides opcionales de locale, format, abbreviate.decimals, abbreviate.suffix.*. |
currencies.<otra>.symbol |
String | (hereda currency.symbol) |
Símbolo específico de la moneda secundaria. |
currencies.<otra>.position |
enum | (hereda currency.position) |
suffix / prefix override. |
currencies.<otra>.space |
bool | (hereda currency.space) |
Con / sin espacio. |
currencies.<otra>.locale |
String | (hereda currency.locale) |
Estilo de separadores. |
currencies.<otra>.abbreviate.decimals |
int | (hereda) | Decimales abreviatura. |
currencies.<otra>.abbreviate.suffix.* |
Map | (hereda) | k/m/b/t overrides. |
Ejemplo gemas + tokens:
currencies:
default:
symbol: "$"
position: suffix
space: true
gems:
symbol: "💎"
position: suffix
space: false
abbreviate: {decimals: 0, suffix: {k: "K", m: "M", b: "B", t: "T"}}
tokens:
symbol: "🪙"
position: prefix
space: true
locale: "ch" # → 🪙 1'000.00currencyId = "default".
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
top.refresh_seconds |
int |
300 (5 min) |
Periodo en segundos con el que TopCacheService regenera la lista ordenada en segundo plano. Valores menores = top más fresco, más CPU. |
top.change_threshold |
double | 0 |
Delta mínimo de balance para invalidar al instante la caché (además del refresh periódico). 0 = invalida siempre tras cualquier /eco give/take/set. Pon 1000 para ignorar micro-operaciones. |
Los jugadores tienen dos balances: wallet (el de siempre) + bank_balance (depositado en el banco, sujeto a interés e impuesto).
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
bank.interest.enabled |
boolean | true |
Master switch — false = nunca se aplica interés, aunque percent_per_period > 0. |
bank.interest.every_minutes |
long | 60 |
Cada cuántos minutos se aplica el interés a TODOS los jugadores con bank_balance > 0. |
bank.interest.percent_per_period |
double | 0.5 |
Porcentaje que se suma al bank_balance cada periodo. 0.5 = +0,5% / hora. Fórmula: nuevo = actual + (actual * percent / 100.0). |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
bank.tax.enabled |
boolean | false |
Master switch — false = nunca se aplica. |
bank.tax.every_minutes |
long | 180 |
Periodo del impuesto. Default cada 3h. |
bank.tax.threshold |
double | 1 000 000 |
Umbral exento. El impuesto sólo afecta a la fracción estrictamente > threshold. Ejemplo: balance = 1.500.000, threshold = 1M → impuesto sobre 500.000. |
bank.tax.percent_per_period |
double | 0.1 |
Porcentaje por periodo sobre el excedente. 0.1 = 0,1% cada 180 min sobre la parte > threshold. |
Ejemplo numérico:
balance = 3 000 000
threshold = 1 000 000
tax_percent = 0,1
imponible = 2 000 000
impuesto = 2 000 000 × 0,1 / 100 = 2 000
nuevo = 3 000 000 − 2 000 = 2 998 000
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
discord.webhook_url |
String | "" |
URL completa de un webhook Discord (https://discord.com/api/webhooks/...). Vacío = feature desactivada (no hay requests salientes). |
discord.threshold_amount |
double | 100000 |
Transacciones individuales ≥ a este valor disparan un embed al canal. También saltan eventos anti-dupe y errores de DB independientemente del threshold. |
discord.username |
String | "Vault Bot" |
Nombre con el que el webhook firma los mensajes (lo sobreescribe Discord si el webhook ya tiene nombre fijo). |
discord.avatar_url |
String | "" |
Avatar del webhook (URL a imagen PNG/JPG). Vacío = avatar default del webhook. |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
world_balances.separate_worlds |
List<String> |
[] (vacía) |
Lista de nombres exactos de mundos cuyos balances serán independientes. Ej. - world_nether, - minas, - skyblock. La API legacy (Economy sin world) sigue devolviendo el balance global para compatibilidad con ShopGUIPlus et al. Sólo los comandos player-facing de Vault respetan esta separación. |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
import.essentials.enabled |
boolean | false |
true durante UN arranque para leer plugins/Essentials/userdata/*.yml y volcar money: en Vault. |
import.essentials.replace |
boolean | false |
false (seguro por defecto): sólo crea balances que NO existen en Vault. true: sobrescribe los que ya haya — ¡úsalo solo en migración inicial! |
Tras ejecutarse una vez con éxito, VaultCommand.resetbalances settea import.essentials.enabled = false automáticamente para no re-importar en cada reinicio.
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
offline-uuid-fallback |
boolean | true |
true = para un jugador nunca visto, genera un UUID modo-offline (Bukkit UUID.nameUUIDFromBytes("OfflinePlayer:<name>".getBytes())). false = rechaza operaciones con nombres desconocidos (necesitas tener al jugador logueado al menos una vez). |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
update_check |
boolean | true |
Comprueba en startup si existe una release nueva en el repositorio. Informa a los OP cuando entran al juego (mensaje en chat). 1 request HTTPS por boot. |
update_check_debug |
boolean | false |
Si true imprime en consola el JSON de respuesta crudo del check (para desarrolladores / soporte). |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
pay_menu.size |
int | 27 |
Slots del inventario de /pay (menú principal con la lista de jugadores). Debe ser múltiplo de 9 y ≥ 9 (Bukkit Inventory validation). Usar 54 si tu servidor tiene >20 jugadores concurrentes y quieres más cabezas por página. |
pay_menu.show_self |
boolean | false |
true = tu propia cabeza aparece en la lista del /pay (para pagarte a ti mismo, normalmente no útil). |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
pay_pending.max_on_join |
int | 5 |
Cuando un jugador se conecta, como máximo N charge-requests (Charge / pedir dinero) pendientes se entregan como chat clickable. El resto permanece en cola para el siguiente login (evita spam de 50 mensajes a la vez). |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
pay_limits.min |
double | 1 |
Cantidad mínima por operación Pay o Charge. ≤ 0 desactiva el límite inferior. Salteable con vault.pay.bypass_min. |
pay_limits.max |
double | 100000 |
Cantidad máxima por operación Pay o Charge. ≤ 0 desactiva el límite superior. Salteable con vault.pay.bypass_max. |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
loans.enabled |
boolean | true |
Master switch — false oculta /loan, /vault loan, y el LoanService no arranca timers. |
loans.max_active_per_player |
int | 1 |
Préstamos SIMULTÁNEOS que un jugador puede tener abiertos. 1 = préstamo único; 3 = hasta 3 líneas de crédito activas. |
loans.min_amount |
double | 1 |
Cantidad mínima que se puede solicitar. |
loans.max_amount |
double | 100000 |
Cantidad máxima que se puede solicitar. |
loans.min_installment |
double | 1 |
Valor fijo mínimo por cuota (suelo). |
loans.min_installment_by_amount |
Map<Double, Double> | {1000: 50, 5000: 250} |
Escalado progresivo: si el préstamo es ≥ 1000 → la cuota mínima pasa a ser 50. Si es ≥ 5000 → 250. Se usa la entrada mayor que aplique (orden ascendente implícito). |
loans.max_installments |
int | 60 |
Número máximo de cuotas permitidas al crear un préstamo (60 × 24h = 2 meses aprox.). |
loans.default_interval_hours |
int | 24 |
Intervalo sugerido entre cobros de cuotas (24h = diario). El wizard lo usa como valor pre-seleccionado; el jugador puede cambiarlo en el GUI LoanMenuService. |
loans.charge_check_seconds |
int | 60 |
Cada cuántos segundos el timer Bukkit.getScheduler().runTaskTimerAsynchronously(...) barré los préstamos activos para ver si toca cobrar una cuota. |
loans.max_missed_payments |
int | 3 |
Cuotas automáticas fallidas consecutivas (por falta de dinero en wallet + bank) antes de marcar el préstamo como DEFAULTED e imponer defaulted_effects. |
| Clave | Tipo | Default | Explicación |
|---|---|---|---|
loans.defaulted_effects.enabled |
boolean | true |
false = préstamo en mora NO recibe efectos de poción (sigue constando como DEFAULTED internamente). |
loans.defaulted_effects.refresh_seconds |
int | 5 |
Periodo con el que se reaplican los efectos (para que no expiren aunque el jugador permanezca mucho tiempo online). |
loans.defaulted_effects.duration_seconds |
int | 8 |
Duración del PotionEffect en cada aplicación (debe ser > refresh_seconds para que no queden "huecos" sin efecto). |
loans.defaulted_effects.effects |
List<String "NOMBRE:NIVEL"> | ["SLOW:1", "SLOW_DIGGING:1"] |
Lista de PotionEffectType 1-based. Nombres válidos = constantes de Bukkit org.bukkit.potion.PotionEffectType (mayúsculas, underscore). Ej.: SLOW:2, BLINDNESS:1, CONFUSION:1, POISON:1, WEAKNESS:1. |
| Archivo Java | Lee estas claves |
|---|---|
Messages.java |
language |
SimpleEconomy.java |
currency.*, storage.*, currencies.*, world_balances.separate_worlds, offline-uuid-fallback, import.essentials.*
|
TopCacheService.java |
top.refresh_seconds, top.change_threshold
|
BankService.java |
bank.interest.*, bank.tax.*
|
DiscordWebhookNotifier.java |
discord.* |
UpdateChecker.java |
update_check, update_check_debug
|
PayMenuService.java |
pay_menu.size, pay_menu.show_self, pay_pending.max_on_join
|
ChargeRequestService.java |
pay_limits.* |
LoanService.java, LoanMenuService.java
|
loans.* completo, especialmente defaulted_effects.effects que se parsea con split :
|
Vault Economy v2.1.0 · Compatible with Spigot 1.8.8 – 1.21.x
📦 Modrinth ·
💬 Discord ·
Java 17 (legacy) · Java 21 (modern)
Documentation generated on 2026-09-03 · Vault Project Team
- 🏠 Home
- 🚀 First Install
- 🧑🏫 Getting Started
- ❓ Basic FAQ
- 📋 Complete Command List
- 🛡️ Complete Permission List
- ⚙️ config.yml Reference
- 🌐 Supported Languages
- 🆕 Modrinth Updates
- 💰 Player-to-Player Payments
- 🏦 Bank System
- 💵 Physical Notes
- 💸 Loans
- 📜 Transaction History
- 📊 Top Players
- ⏸️ Offline Payments
- 💳 Charges / Payment Requests
- 🔔 Discord Webhook
- 🛠️ Installation Errors
- 🚫 Players Can't Pay
- 🧨 Balances Wiped on Restart
- 📉 Bank Doesn't Pay Interest
- 🧾 Invalid / Expired Notes
- 🩺 Complete Step-by-Step Troubleshooting
- Java API
- 📜 Skript
- 🧰 Contribute · Dual Maven Build