Alle Dokumentation
PLUGIN-WIKI

InventorySync PRO — Konfiguration

Teile Inventare, Endertruhen und Erfahrungspunkte zwischen Welten und Servern und verwalte Spielerdaten online wie offline.

Plugin ansehen

Konfiguration

Informationen zur aktuellen Version
Neueste Version
1.7.4
Minecraft
26.x
Plattformen
Spigot, Paper, Folia, Purpur, Velocity, BungeeCord
Erforderliche Java-Mindestversion
25+
Versionshinweise

Dieser Artikel wurde für 1.7.0 geschrieben. Die neueste stabile Version ist 1.7.4; beachte die aktuellen Anforderungen oben.

Version 1.7.0Zuletzt aktualisiert: 17.10.2026 22:00
Konfiguration
Ersetze bei Beispielen die entsprechenden Schlüssel oder Abschnitte und behalte die übrigen Standardwerte. Starte nach manuellen Backendänderungen neu. /isync reload prüft die Konfiguration und lädt Nachrichten neu; Speicherung, Synchronisierung, Bridge und Verwaltungseinstellungen werden nicht neu angewendet. Im GUI geänderte Verwaltungsschalter werden gespeichert und wirken sofort; halte die Richtlinie im MySQL-Netzwerk einheitlich.

Erzeugte Dateien
Backendpfade beziehen sich auf plugins/InventorySyncPRO/. Proxyeinstellungen liegen normalerweise unter plugins/InventorySyncPRO/ bei BungeeCord beziehungsweise plugins/inventorysyncpro/ bei Velocity.
Code · Nur Text

config.yml — Backend-Speicherung, Profile, Bridge und Verwaltungsrichtlinie
messages.yml — Backend-Chatnachrichten, Präfix, Farben und Platzhalter
inventories-spigot.db — Lokale Standarddatenbank; Binärinhalt nicht manuell bearbeiten
backups/ — Konsistente SQLite-Sicherungen durch /isync backup
proxy.properties — Bridge-Einstellungen nur für den Proxy; Properties statt YAML


Speichereinstellungen
Code · Nur Text

storage.type (Standard: SQLITE) — SQLITE für ein Backend; MYSQL für ein gemeinsames Netzwerk
storage.server-id (Standard: survival) — Eindeutige Backend-ID; 1–32 Buchstaben/Ziffern/._-; mit Bridge genau der Proxyname
storage.sqlite.file (Standard: inventories-spigot.db) — Relativer Datenbankpfad innerhalb des Pluginordners
storage.mysql.host (Standard: 127.0.0.1) — MySQL-Hostname oder IP, keine JDBC-URL
storage.mysql.port (Standard: 3306) — MySQL-Port; 1–65535
storage.mysql.database (Standard: inventorysync) — Datenbankname
storage.mysql.username (Standard: inventorysync) — Datenbankbenutzer
storage.mysql.password (Standard: "") — Datenbankpasswort
storage.mysql.pool-size (Standard: 10) — Größe des Verbindungspools; 1–50
storage.mysql.lock-ttl-ms (Standard: 10000) — Gültigkeit der Sitzungs-/Schreibsperre; 2000–300000 ms
storage.mysql.connection-timeout-ms (Standard: 10000) — Wartezeit auf eine Poolverbindung; 1000–120000 ms
storage.mysql.validation-timeout-ms (Standard: 5000) — Zeitlimit der Verbindungsprüfung; 1000 ms bis connection-timeout-ms
storage.mysql.socket-timeout-ms (Standard: 30000) — Zeitlimit für MySQL-Antworten; 1000–300000 ms
storage.mysql.max-lifetime-ms (Standard: 1800000) — Lebensdauer einer Verbindung; 30000–3600000 ms
storage.mysql.keepalive-time-ms (Standard: 30000) — 0 deaktiviert; sonst mindestens 30000 ms und kleiner als max-lifetime-ms
storage.mysql.use-ssl (Standard: false) — TLS aktivieren, wenn der MySQL-Dienst dafür eingerichtet ist


Synchronisierung und Profile
Code · Nur Text

sync.debounce-ms (Standard: 750) — Speicherverzögerung zum Zusammenfassen schneller Änderungen; 0–60000 ms
sync.mode (Standard: GLOBAL) — GLOBAL / PER_WORLD / PER_GROUP
sync.ender-chest (Standard: true) — Endertruhen-Synchronisierung und /endersee aktivieren
sync.xp (Standard: true) — XP-Synchronisierung und /xpsee aktivieren
sync.restore-on-join (Standard: true) — Gespeicherte Daten beim Beitritt laden; in MySQL zwingend true
sync.session-acquire-timeout-ms (Standard: 15000) — Warten auf Freigabe der vorherigen Sitzung; 1000–120000 ms
sync.operation-timeout-ms (Standard: 20000) — Zeitlimit geschützter Vorgänge; 1000–120000 ms, nicht unter session-acquire-timeout-ms
sync.kick-on-failure (Standard: true) — Bei geschütztem Synchronisierungsfehler trennen; in MySQL zwingend true
sync.group-default (Standard: global) — Ersatzprofil für PER_GROUP
sync.group-by-server (Standard: {}) — Optionale Zuordnung server-id → Gruppe; hat Vorrang vor Welten
sync.group-by-world (Standard: {}) — Optionale Zuordnung Welt → Gruppe; gilt ohne passende Serverzuordnung


Zugriffseinstellungen für das Team
Code · Nur Text

admin.allow-offline-view (Standard: true) — Ansicht gespeicherter Offline-Daten erlauben
admin.allow-offline-edit (Standard: true) — Offline-Änderungen mit passender edit-Berechtigung erlauben
admin.allow-remote-edit (Standard: true) — Entfernte Änderungen mit edit und remote-edit erlauben


Bridge-Einstellungen am Backend
Code · Nur Text

bridge.enabled (Standard: false) — Optionale Bridge; benötigt MYSQL
bridge.secret (Standard: RANDOM_SECRET) — Gleiches zufälliges Geheimnis auf Proxy und Backends; 16–256 Zeichen, möglichst 32+; RANDOM_SECRET ersetzen
bridge.timeout-ms (Standard: 4000) — Zeitlimit für Bridge-Anfragen; 250–15000 ms


Proxyeinstellungen
Code · Nur Text

enabled (Standard: false) — Routing auf dem Proxy und den Backends aktivieren
secret (Standard: RANDOM_SECRET) — Genau derselbe Wert wie bridge.secret der Backends
packets-per-second (Standard: 200) — Routingbudget je Backend einschließlich Broadcast-Zustellung; 10–2000
allowed-servers (Standard: "") — Kommagetrennte registrierte Backendnamen; leer erlaubt alle gültigen registrierten Namen


PER_GROUP-Priorität: group-by-server → group-by-world → group-default. Eine Serverzuordnung umfasst alle Welten dieses Backends. Lasse das Backend in der Serverzuordnung weg, um seine Welten zu trennen. Verwende einfache kleingeschriebene Profilnamen wie survival; ungültige Zeichen werden normalisiert. Verwaltungsbefehle erwarten den Basisprofilnamen ohne interne Endertruhen-/XP-Suffixe.

Alte Einstellungen invsee.allow-offline-view, invsee.allow-offline-edit und invsee.allow-remote-edit gelten nur, wenn der entsprechende admin.*-Schlüssel fehlt. Verwende bei neuen Einrichtungen die aktuellen admin-Schlüssel.

Beispiel: Survival-Welten und getrenntes Creative
Die Namen müssen deinen Welten entsprechen. Ersetze die entsprechenden Abschnitte der Standarddatei. Lasse group-by-server weg oder leer, damit Weltzuordnungen gelten.
Code · Nur Text

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


Beispiel: zwei Survival-Server und getrennte Lobby
Verwende auf allen drei Backends dieselbe Datenbank und vollständige Gruppenzuordnung. Ändere nur storage.server-id auf survival-1, survival-2 oder lobby. Ersetze Zugangsdaten und gemeinsames Bridge-Geheimnis. Behalte übrige Standardwerte. Der folgende Proxyblock ist nur für die optionale Bridge nötig.
Code · Nur Text

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

Code · Nur Text

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


Nachrichten anpassen
messages.yml akzeptiert Texte oder Textlisten, &-Farben, HEX-Farben im Format &#RRGGBB und nachrichtenspezifische Platzhalter wie %prefix%, %player% und %profile%. "" deaktiviert einen Eintrag; enabled: false deaktiviert dieses Nachrichtensystem. Ungültiges YAML beim Neuladen erhält die bisherigen Nachrichten. GUI-Beschriftungen und Proxyantworten werden hier nicht eingestellt. Alte invsee-Schlüssel bleiben zur Kompatibilität erhalten; aktuelle Verwaltungsbefehle verwenden data.

Vollständige Standarddateien aus 1.7.0
Dies sind die vollständigen Standarddateien aus 1.7.0 samt ursprünglichen Kommentaren und Nachrichten. Wikiübersetzungen übersetzen nicht automatisch die Nachrichten im Spiel.
config.yml

Code · Nur Text

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

Code · Nur Text

# 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

Code · Nur Text

# 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=


Willkommen — Sprache und Datenschutz

Notwendige Cookies sichern die Anmeldung und speichern Ihre Auswahl. Optionale Statistiken und YouTube bleiben bis zu Ihrer Zustimmung deaktiviert. Sie können Ihre Auswahl in der Fußzeile ändern. Datenschutz