diff --git a/Datenbank.md b/Datenbank.md new file mode 100644 index 0000000..ccd5292 --- /dev/null +++ b/Datenbank.md @@ -0,0 +1,88 @@ +# Datenbank & CrossLink + +ASC unterstützt zwei Datenspeicher-Backends: **YAML** (Standard, keine Einrichtung nötig) und **MySQL/MariaDB** (empfohlen für Netzwerke). + +--- + +## YAML-Modus (Standard) + +Ohne MySQL-Konfiguration werden alle Spielerdaten in `plugins/AutoSortChest/players.yml` gespeichert. Kein weiteres Setup erforderlich. + +--- + +## MySQL aktivieren + +In der `config.yml`: + +```yaml +mysql: + enabled: true + host: "localhost" + port: 3306 + database: "autosortchest" + user: "autosortchest" + password: "autosortchest" +``` + +Das Datenbankschema wird beim Start **automatisch migriert** – keine manuellen SQL-Befehle nötig. + +--- + +## Datenbank-Tabellen + +| Tabelle | Inhalt | +| --- | --- | +| `asc_players` | Spieler-UUIDs und Namen | +| `asc_input_chests` | Registrierte Eingangstruhen | +| `asc_target_chests` | Zieltruhen mit Item-Zuordnung und Slot-Index | +| `asc_rest_chests` | Rest-/Fallback-Truhen | +| `asc_trash_chests` | Mülltruhen mit Serverzuordnung | +| `asc_trash_items` | Filter-Listen der Mülltruhen | +| `asc_transfers` | Ausstehende CrossLink-Transfers zwischen Servern | + +--- + +## CrossLink (Serverübergreifende Sortierung) + +Mit CrossLink können Zieltruhen auf **anderen Servern desselben Netzwerks** liegen. Benötigt MySQL. + +### Funktionsweise + +1. Server A hat die Eingangstruhe und erkennt, dass die Zieltruhe für `OAK_LOG` auf Server B liegt +2. Server A schreibt den Transfer in die gemeinsame Datenbank-Tabelle `asc_transfers` +3. Server B liest die Transfer-Tabelle periodisch und befüllt seine lokale Zieltruhe automatisch + +### Einrichtung (BungeeCord / Velocity) + +1. **Dieselbe** MySQL-Datenbank auf allen Servern eintragen +2. Auf jedem Server einen **eindeutigen** `server_name` setzen + +```yaml +server_crosslink: true +server_name: "survival" # z. B. "lobby", "survival", "creative" +``` + +3. `mysql.enabled: true` und `server_crosslink: true` setzen +4. Alle Server neu starten + +> ⚠️ Wird `server_name` leer gelassen, läuft das Plugin im **Legacy-Modus** (welt-basierte Erkennung, kein BungeeCord). + +### Voraussetzungen + +* Alle Server nutzen **dieselbe** MySQL-Datenbank +* Jeder Server hat einen eindeutigen `server_name` +* `server_crosslink: true` auf allen beteiligten Servern + +--- + +## Import & Export + +Zum Wechsel zwischen YAML und MySQL gibt es zwei Admin-Befehle: + +| Befehl | Richtung | Beschreibung | +| --- | --- | --- | +| `/asc import` | YAML → MySQL | Überträgt `players.yml` in die Datenbank | +| `/asc export` | MySQL → YAML | Exportiert Datenbank zurück in `players.yml` | + +Beim Export wird automatisch ein Backup der bestehenden `players.yml` erstellt: +`players_backup_.yml`