Skip to content

config reference

Trae Upload Bot edited this page Sep 3, 2026 · 4 revisions

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).

⚙️ Config Reference (v2.1.0)

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.

📋 Tabla resumen de secciones

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)

1) Metadata + idioma

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");

2) currency.* (formato global por defecto)

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 suffix10 $ · prefix$ 10 (antes del número).
currency.space boolean true true añade espacio entre símbolo y número (10 $); false10$.
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 €

3) storage.* (backend de persistencia)

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.

4) currencies.* (Multi-currency 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.00

⚠️ Limitación v2.1: monedas secundarias (no default) sólo se guardan en YAML (no en MySQL) — el DAO MySQL sólo guarda currencyId = "default".


5) top.* (caché del baltop)

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.

6) bank.interest.* + bank.tax.*

Los jugadores tienen dos balances: wallet (el de siempre) + bank_balance (depositado en el banco, sujeto a interés e impuesto).

bank.interest

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).

bank.tax

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

7) discord.* (webhook notifier)

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.

8) world_balances.* (balances por mundo)

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.

9) import.essentials.* (migrador EssentialsX one-shot)

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.


10) offline-uuid-fallback

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).

11) update_check*

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).

12) pay_menu.*

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).

13) pay_pending.*

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).

14) pay_limits.*

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.

15) loans.* (sistema de préstamos v2.1+)

Bloque principal

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.

loans.defaulted_effects.* (efectos por mora)

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.

🔗 Referencias cruzadas con el código fuente

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 :

Clone this wiki locally