Toda la documentación
WIKI DEL PLUGIN

InventorySync PRO — Configuración

Sincroniza inventarios, cofres de Ender y experiencia entre mundos y servidores, y gestiona los datos de jugadores conectados o desconectados.

Ver plugin

Configuración

Información de la versión actual
Última versión
1.7.4
Minecraft
26.x
Plataformas
Spigot, Paper, Folia, Purpur, Velocity, BungeeCord
Versión mínima de Java
25+
Notas de versión

Este artículo se escribió para 1.7.0. La última versión estable es 1.7.4; consulta los requisitos actuales de arriba.

Versión 1.7.0Última actualización: 17/10/2026 22:00
Configuración
Al usar un ejemplo, sustituye las claves o secciones correspondientes y conserva los demás valores predeterminados. Reinicia tras cambios manuales del backend. /isync reload valida la configuración y recarga mensajes; no reconecta almacenamiento ni aplica cambios de sincronización, puente o administración. Los interruptores del GUI se guardan y aplican al instante; mantén la política igual en la red MySQL.

Archivos generados
Las rutas de backend son relativas a plugins/InventorySyncPRO/. Los ajustes del proxy suelen estar en plugins/InventorySyncPRO/ para BungeeCord o plugins/inventorysyncpro/ para Velocity.
Código · Texto sin formato

config.yml — Almacenamiento, perfiles, puente y política de administración del backend
messages.yml — Chat del backend, prefijo, colores y variables
inventories-spigot.db — Base local predeterminada; no edites manualmente sus bytes
backups/ — Instantáneas coherentes de SQLite creadas por /isync backup
proxy.properties — Ajustes exclusivos del proxy; formato properties, no YAML


Ajustes de almacenamiento
Código · Texto sin formato

storage.type (predeterminado: SQLITE) — SQLITE para un backend; MYSQL para una red compartida
storage.server-id (predeterminado: survival) — ID único; 1–32 letras/números/._-; nombre exacto del proxy al usar el puente
storage.sqlite.file (predeterminado: inventories-spigot.db) — Ruta relativa de base dentro de la carpeta del plugin
storage.mysql.host (predeterminado: 127.0.0.1) — Host o IP MySQL, sin URL JDBC
storage.mysql.port (predeterminado: 3306) — Puerto MySQL; 1–65535
storage.mysql.database (predeterminado: inventorysync) — Nombre de la base
storage.mysql.username (predeterminado: inventorysync) — Usuario de la base
storage.mysql.password (predeterminado: "") — Contraseña de la base
storage.mysql.pool-size (predeterminado: 10) — Tamaño del grupo de conexiones; 1–50
storage.mysql.lock-ttl-ms (predeterminado: 10000) — Duración del bloqueo de sesión/escritura; 2000–300000 ms
storage.mysql.connection-timeout-ms (predeterminado: 10000) — Espera de conexión del grupo; 1000–120000 ms
storage.mysql.validation-timeout-ms (predeterminado: 5000) — Validación de conexión; de 1000 ms a connection-timeout-ms
storage.mysql.socket-timeout-ms (predeterminado: 30000) — Espera de respuesta MySQL; 1000–300000 ms
storage.mysql.max-lifetime-ms (predeterminado: 1800000) — Vida de una conexión; 30000–3600000 ms
storage.mysql.keepalive-time-ms (predeterminado: 30000) — 0 lo desactiva; en otro caso, mínimo 30000 ms y menos de max-lifetime-ms
storage.mysql.use-ssl (predeterminado: false) — Activa TLS si el servicio MySQL está preparado


Sincronización y perfiles
Código · Texto sin formato

sync.debounce-ms (predeterminado: 750) — Retraso que agrupa cambios rápidos; 0–60000 ms
sync.mode (predeterminado: GLOBAL) — GLOBAL / PER_WORLD / PER_GROUP
sync.ender-chest (predeterminado: true) — Activa sincronización de EnderChest y /endersee
sync.xp (predeterminado: true) — Activa sincronización de XP y /xpsee
sync.restore-on-join (predeterminado: true) — Restaura datos al entrar; debe ser true en MySQL
sync.session-acquire-timeout-ms (predeterminado: 15000) — Espera para adquirir la sesión anterior; 1000–120000 ms
sync.operation-timeout-ms (predeterminado: 20000) — Límite de operación protegida; 1000–120000 ms, no menor que session-acquire-timeout-ms
sync.kick-on-failure (predeterminado: true) — Desconecta ante fallo protegido de sincronización; debe ser true en MySQL
sync.group-default (predeterminado: global) — Perfil alternativo de PER_GROUP
sync.group-by-server (predeterminado: {}) — Mapa opcional server-id → grupo; tiene prioridad sobre mundos
sync.group-by-world (predeterminado: {}) — Mapa opcional mundo → grupo; se usa si no coincide un servidor


Acceso del equipo
Código · Texto sin formato

admin.allow-offline-view (predeterminado: true) — Permite consultar datos guardados sin conexión
admin.allow-offline-edit (predeterminado: true) — Permite cambios sin conexión con el permiso edit correspondiente
admin.allow-remote-edit (predeterminado: true) — Permite cambios remotos con edit y remote-edit


Puente del backend
Código · Texto sin formato

bridge.enabled (predeterminado: false) — Puente opcional; requiere MYSQL
bridge.secret (predeterminado: RANDOM_SECRET) — Mismo secreto aleatorio en proxy y backends; 16–256 caracteres, preferiblemente 32+; sustituye RANDOM_SECRET
bridge.timeout-ms (predeterminado: 4000) — Espera de solicitudes del puente; 250–15000 ms


Ajustes del proxy
Código · Texto sin formato

enabled (predeterminado: false) — Activa el enrutamiento tanto en proxy como en backends
secret (predeterminado: RANDOM_SECRET) — Exactamente el mismo valor que bridge.secret del backend
packets-per-second (predeterminado: 200) — Presupuesto por backend, incluidas entregas por difusión; 10–2000
allowed-servers (predeterminado: "") — Nombres registrados separados por comas; vacío permite todos los nombres registrados válidos


Prioridad PER_GROUP: group-by-server → group-by-world → group-default. Una asignación de servidor abarca todos sus mundos. Omite ese backend del mapa de servidores para separar sus mundos. Usa nombres sencillos en minúsculas como survival; los caracteres no admitidos se normalizan. Los comandos esperan el perfil base, sin sufijos internos de EnderChest/XP.

Las opciones antiguas invsee.allow-offline-view, invsee.allow-offline-edit e invsee.allow-remote-edit solo se usan si falta la clave admin.* correspondiente. Usa las claves admin actuales en instalaciones nuevas.

Ejemplo: mundos Survival y Creative separado
Los nombres deben coincidir con tus mundos. Sustituye las secciones correspondientes y deja group-by-server ausente o vacío para usar asignaciones por mundo.
Código · Texto sin formato

storage:
  type: SQLITE
  server-id: "survival"
  sqlite:
    file: "inventories-spigot.db"

sync:
  mode: PER_GROUP
  ender-chest: true
  xp: true
  restore-on-join: true
  kick-on-failure: true
  group-default: "survival"
  group-by-server: {}
  group-by-world:
    world: "survival"
    world_nether: "survival"
    world_the_end: "survival"
    creative: "creative"

bridge:
  enabled: false


Ejemplo: dos servidores Survival y Lobby separado
Aplica la misma base y el mapa completo de grupos a los tres backends. Cambia solo storage.server-id a survival-1, survival-2 o lobby. Sustituye credenciales y secreto compartido. Conserva los demás valores. El bloque del proxy siguiente solo se usa al activar el puente opcional.
Código · Texto sin formato

storage:
  type: MYSQL
  server-id: "survival-1"
  mysql:
    host: "mysql.internal"
    port: 3306
    database: "inventorysync"
    username: "inventorysync"
    password: "REPLACE_WITH_YOUR_DATABASE_PASSWORD"

sync:
  mode: PER_GROUP
  ender-chest: true
  xp: true
  restore-on-join: true
  kick-on-failure: true
  group-default: "lobby"
  group-by-server:
    survival-1: "survival"
    survival-2: "survival"
    lobby: "lobby"
  group-by-world: {}

bridge:
  enabled: true
  secret: "REPLACE_WITH_ONE_RANDOM_SECRET_FOR_THE_WHOLE_NETWORK"
  timeout-ms: 4000

Código · Texto sin formato

enabled=true
secret=REPLACE_WITH_ONE_RANDOM_SECRET_FOR_THE_WHOLE_NETWORK
packets-per-second=200
allowed-servers=survival-1,survival-2,lobby


Personalizar mensajes
messages.yml admite textos o listas, colores &, HEX &#RRGGBB y variables específicas como %prefix%, %player% y %profile%. Usa "" para silenciar una entrada o enabled: false para desactivar este sistema. YAML inválido al recargar conserva los mensajes anteriores. Las etiquetas del GUI y respuestas del proxy no se configuran aquí. Las claves antiguas invsee permanecen por compatibilidad; los comandos actuales usan data.

Valores completos incluidos en 1.7.0
Estos son los archivos completos incluidos en 1.7.0, con comentarios y mensajes originales. Traducir la Wiki no traduce automáticamente los mensajes del plugin dentro del juego.
config.yml

Código · Texto sin formato

storage:
  type: SQLITE        # SQLITE = single server | MYSQL = network
  server-id: "survival" # Unique backend ID (must match the backend name in BungeeCord/Velocity)

  mysql:
    host: "127.0.0.1"     # MySQL host
    port: 3306            # MySQL port
    database: "inventorysync" # Database name
    username: "inventorysync"      # MySQL user
    password: ""          # MySQL password
    pool-size: 10         # Connection pool size
    lock-ttl-ms: 10000    # Distributed write/session lock lifetime
    connection-timeout-ms: 10000 # Maximum wait for a pooled connection
    validation-timeout-ms: 5000  # Connection validation timeout
    socket-timeout-ms: 30000     # Maximum wait for a MySQL response
    max-lifetime-ms: 1800000     # Maximum pooled connection lifetime
    keepalive-time-ms: 30000     # Keep idle network connections healthy (0 = disabled)
    use-ssl: false                # Enable TLS when MySQL is configured for it

  sqlite:
    file: "inventories-spigot.db" # SQLite file (local server)

sync:
  debounce-ms: 750        # Save delay after last change (ms)
  mode: GLOBAL            # GLOBAL / PER_WORLD / PER_GROUP

  ender-chest: true       # Sync EnderChest
  xp: true                # Sync XP (level + bar)
  restore-on-join: true   # Restore inventory/ender/xp on join
  session-acquire-timeout-ms: 15000 # Wait for the previous backend to finish saving
  operation-timeout-ms: 20000       # Maximum protected join/world-switch operation time
  kick-on-failure: true             # Disconnect instead of risking stale/duplicated data

  group-default: "global" # Default group (PER_GROUP)
  # group-by-server:      # Map server-id -> group
  #   spigot-1: "survival"
  #   spigot-2: "survival"

  # group-by-world:       # Map world -> group
  #   world: "survival"
  #   world_nether: "survival"

bridge:
  enabled: false          # Enable the signed InventorySyncPRO BungeeCord/Velocity bridge
  secret: "RANDOM_SECRET" # Same secret on proxy + every backend (16..256 characters; 32+ recommended)
  timeout-ms: 4000        # Remote request timeout (ms)

admin:
  # Shared switches for /invsee, /endersee and /xpsee. Each has separate permissions.
  # Legacy invsee.* keys are used only when the corresponding admin.* key is absent.
  allow-offline-view: true # Allow viewing saved player data
  allow-offline-edit: true # Allow editing saved player data
  allow-remote-edit: true # Also requires the command's .edit and .remote-edit permissions

# /invsee, /endersee and /xpsee use the shared database directly; bridge.enabled is not required.
# Install the same JAR on BungeeCord/Velocity and every backend. Configure proxy.properties.
# Use the same MySQL database, unique
# server-id values matching proxy backend names, matching sync settings, and one bridge secret.
# SQLite supports local and offline players on this server only.
# With no profile argument, offline operations select the latest saved profile for that data type.
# Names enter the shared directory when players join; older data can also be opened by UUID.


messages.yml

Código · Texto sin formato

# Every user-facing chat message can be changed here.
# Set a message to "" to disable only that message. Supports & colors and &#RRGGBB HEX colors.
enabled: true
prefix: "&8[&#38BDF8InventorySyncPRO&8] &r"

sync:
  join-start: "%prefix%&7Synchronizing your inventory..."
  join-success: "%prefix%&aYour inventory has been synchronized."
  join-empty: "%prefix%&7No synchronized data exists yet. Your current inventory will be used."
  world-start: "%prefix%&7Saving &f%old_profile%&7 and loading &f%new_profile%&7..."
  world-success: "%prefix%&aInventory profile changed to &f%profile%&a."
  interaction-blocked: "%prefix%&ePlease wait until inventory synchronization finishes."
  session-busy: "%prefix%&eWaiting for the previous server to finish saving your inventory..."
  load-failed: "%prefix%&cYour inventory could not be loaded safely. Please reconnect."
  save-failed: "%prefix%&cYour inventory could not be saved safely. Please reconnect."
  session-lost: "%prefix%&cThe inventory session lock was lost. Please reconnect."
  kick-load-failed: "&cInventory synchronization failed.\n&7Please reconnect in a moment."
  kick-save-failed: "&cInventory could not be saved safely.\n&7Please reconnect in a moment."
  kick-session-lost: "&cYour inventory session expired.\n&7Please reconnect to protect your items."
  kick-plugin-disable: "&cInventory synchronization is restarting.\n&7Please reconnect in a moment."

general:
  no-permission: "%prefix%&cYou do not have permission to use this command."
  players-only: "%prefix%&cOnly players can use this command."

data:
  invsee-usage: "&eUsage: /{label} <player|uuid> [profile]"
  denied: "&cYou no longer have permission to edit this data."
  endersee-usage: "%prefix%&7Usage: &f/%label% <player|uuid> [profile]"
  xpsee-usage:
    - "%prefix%&7View: &f/%label% <player|uuid> [profile]"
    - "%prefix%&7Edit: &f/%label% <player|uuid> <set|add|remove> <amount> [levels|points] [profile]"
  loading: "%prefix%&7Loading current player data..."
  saving: "%prefix%&7Applying and saving changes..."
  saved: "%prefix%&aChanges for &f%player% &awere applied and saved."
  xp: "%prefix%&f%player% &7| Level: &f%level% &7| Bar: &f%progress%%% &7| Points: &f%points% &7| Profile: &f%profile% &7| &f%location%"
  not_found: "%prefix%&cPlayer not found. For older offline data, try the player's UUID."
  no_data: "%prefix%&eNo saved data exists for this player/profile."
  disabled: "%prefix%&cThis data type is disabled. Enable sync.ender-chest or sync.xp and restart."
  offline_disabled: "%prefix%&cOffline viewing or editing is disabled."
  remote_disabled: "%prefix%&cYou cannot edit this data on another backend."
  busy: "%prefix%&eA request is already running. Please wait."
  conflict: "%prefix%&eThe data changed while you were editing. Refresh and try again; your draft was not applied."
  moved: "%prefix%&eThe player changed server or is synchronizing. Try again in a moment."
  profile_changed: "%prefix%&eThe player's active profile changed. Reopen the data before editing."
  invalid_amount: "%prefix%&cUse a non-negative whole number. The resulting XP must fit within 2,147,483,647 points."
  timeout: "%prefix%&eThe request timed out. Refresh to check the current data before retrying an edit."
  save_uncertain: "%prefix%&eThe live edit was applied, but its database save could not be confirmed. Refresh before retrying."
  error: "%prefix%&cThe operation failed. Check the console and refresh the data before retrying."

invsee:
  usage: "%prefix%&7Usage: &f/%label% <player>"
  self-denied: "%prefix%&cUse your normal inventory instead of /invsee on yourself."
  target-syncing: "%prefix%&eThat player's inventory is still synchronizing. Try again in a moment."
  player-not-found: "%prefix%&cPlayer not found: &f%player%"
  locating: "%prefix%&7Checking the network location of &f%player%&7..."
  location-unknown-readonly: "%prefix%&eThe player's network location could not be verified. Opening a safe read-only snapshot."
  remote-flush: "%prefix%&7Player is online on &f%server%&7. Requesting a fresh inventory..."
  remote-flush-failed: "%prefix%&eThe remote refresh failed. Showing the latest safe saved inventory."
  remote-flush-success: "%prefix%&aFresh inventory received."
  remote-flush-timeout: "%prefix%&eThe remote refresh timed out. Showing the latest safe saved inventory."
  remote-flush-error: "%prefix%&cRemote refresh failed. Showing the latest safe saved inventory."
  offline-disabled: "%prefix%&cOffline inventory viewing is disabled."
  no-saved-data: "%prefix%&eNo saved inventory exists for &f%player%&e."
  unsupported-data: "%prefix%&cThe saved inventory uses an unsupported or damaged data format."
  load-failed: "%prefix%&cCould not load the inventory of &f%player%&c."
  edit-locked: "%prefix%&eAnother administrator is already editing this inventory."
  save-success: "%prefix%&aInventory changes were saved."
  save-failed: "%prefix%&cInventory changes could not be saved."

admin:
  usage: "%prefix%&7Usage: &f/%label% <status|backup|reload>"
  status:
    - "%prefix%&#38BDF8InventorySyncPRO status"
    - "&7Storage: &f%storage%"
    - "&7Active sessions: &f%sessions%"
    - "&7Protected/retiring sessions: &f%protected_sessions%"
    - "&7Live queue entries: &f%live_queue%"
    - "&7Offline queue entries: &f%offline_queue%"
    - "&7Active database writes: &f%active_writes%"
  reload-success: "%prefix%&aMessages reloaded. Configuration is valid; restart to apply storage or sync changes."
  reload-invalid: "%prefix%&cConfiguration was not applied because it is invalid: &f%reason%"
  reload-messages-invalid: "%prefix%&cMessages were not reloaded because messages.yml contains invalid YAML. The previous messages remain active."
  backup-unavailable: "%prefix%&eBuilt-in backup is unavailable in MySQL mode. Use your database backup tool."
  backup-start: "%prefix%&7Creating a consistent SQLite backup..."
  backup-already-running: "%prefix%&eA SQLite backup is already running."
  backup-success: "%prefix%&aBackup created: &f%file%"
  backup-failed: "%prefix%&cBackup failed. Check the server console."


proxy.properties

Código · Texto sin formato

# InventorySyncPRO BungeeCord / Velocity bridge
# Set enabled=true and the same bridge.secret as on EVERY backend.
enabled=false
secret=RANDOM_SECRET
# Per-backend budget, including broadcast fan-out. Bursts of twice this size are allowed.
packets-per-second=200
# Optional comma-separated backend names. Empty = all registered backends.
allowed-servers=


Bienvenido — idioma y privacidad

Las cookies necesarias protegen el inicio de sesión y recuerdan tus preferencias. Las estadísticas opcionales y YouTube permanecen desactivados hasta que los permitas. Puedes cambiar esta elección en el pie de página. Privacidad