# AutoSortChest *Intelligente Lagerverwaltung & automatisierte Sortiersysteme ohne Redstone-Chaos* ![Version](https://img.shields.io/badge/Version-1.18.x--1.21.x-green.svg) ![Java](https://img.shields.io/badge/Java-17+-orange.svg) ![Type](https://img.shields.io/badge/Type-Utility-blue.svg) --- ## Über AutoSortChest Schluss mit unordentlichen Truhen und stundenlangem Sortieren! **AutoSortChest** ermöglicht es dir, komplexe Sortiersysteme für Farmen, Shops oder Lagerhäuser in Sekunden aufzubauen. Alles funktioniert über ein intuitives Schildersystem – keine komplizierten Befehle oder mühsame Redstone-Leitungen erforderlich. --- ## ✨ Features - **Einfache Schild-Steuerung:** Erstelle Input-, Ziel-, Rest- und Mülltruhen durch das Platzieren eines Schildes. - **Visuelles Status-System:** Schilder ändern ihre Farbe, wenn eine Truhe voll ist, und senden Warnungen im Chat. - **Smart Rest-Truhe (Fallback):** Konfiguriere mehrere Auffangtruhen für alle Items ohne spezielles Ziel. - **Mülltruhe:** Definiere eine Truhe, die bestimmte oder alle Items automatisch vernichtet – mit konfigurierbarer Filter-Liste und optionalem Auto-Clear-Intervall. - **Dynamic Item Update:** Ändere das sortierte Item einer Truhe jederzeit per Rechtsklick – kein Abbauen nötig! - **Mehrere Zieltruhen pro Item:** Definiere mehrere Zieltruhen für denselben Item-Typ – volle Truhen werden automatisch übersprungen. - **Privatsphäre-Modus:** Schalte Truhen per Shift-Rechtsklick zwischen Öffentlich und Privat um. - **Hopper-Schutz:** Input- und Rest-Truhen blockieren Hopper automatisch – Sortierung läuft ausschließlich über das ASC-System. - **Clean-Modus:** Optionaler sauberer Schild-Stil ohne sichtbaren Item-Namen – übersichtlicheres Aussehen im Lager. - **Visuelle Effekte:** Optionale Partikel- und Sound-Effekte beim Sortiervorgang. - **Server-übergreifend (CrossLink):** Mit MySQL können Zieltruhen auf anderen Servern des Netzwerks liegen. Items werden automatisch via Transfer-Tabelle weitergeleitet. - **Import & Export:** Daten lassen sich bequem zwischen `players.yml` und MySQL hin- und herwechseln – per Admin-Befehl. - **Update-Checker:** Admins werden beim Login automatisch über neue Versionen informiert. - **Multiplayer-Optimiert:** Jeder Spieler verwaltet sein eigenes System – kein gegenseitiges Stören. - **Vollständig Anpassbar:** Alle Nachrichten, Farben, Titel und Limits lassen sich in der `config.yml` editieren. --- ## 📖 Einrichtung ### 1. Eingangstruhe (Input) Hier wirfst du alle unsortierten Items hinein. Hopper können keine Items direkt einlegen – die Sortierung läuft ausschließlich über den eigenen Mechanismus. Schild an die Truhe platzieren und folgendes schreiben: ``` [asc] input ``` Dein Spielername wird automatisch in Zeile 4 eingetragen. --- ### 2. Zieltruhe (Target) Hier landen die spezifisch sortierten Items. Schild an die Truhe platzieren: ``` [asc] ziel ``` Danach mit dem gewünschten Item (z. B. Diamant) auf das Schild **Rechtsklicken** – der Item-Typ wird automatisch eingetragen. > Sind mehrere Zieltruhen für denselben Item-Typ vorhanden, wird die nächste automatisch befüllt, wenn die erste voll ist. --- ### 3. Rest-Truhe (Fallback) Das Auffangbecken für alle Items ohne Zieltruhe. Hopper können keine Items einlegen. ``` [asc] rest ``` > Es können mehrere Rest-Truhen registriert werden. Sind alle voll, bleibt das Item in der Eingangstruhe. --- ### 4. Mülltruhe (Trash) Items, die in diese Truhe gelangen, werden automatisch vernichtet. ``` [asc] trash ``` Nach dem Platzieren des Schildes erscheint ein **Rechtsklick-Hinweis**. Durch Rechtsklick auf das Schild öffnet sich ein Konfiguration-GUI: - **Ohne Filter-Liste:** Alle Items in der Truhe werden gelöscht. - **Mit Filter-Liste:** Nur die eingetragenen Item-Typen werden gelöscht, der Rest bleibt erhalten. - Items können per Rechtsklick zur Liste hinzugefügt oder entfernt werden. - Der **Auto-Clear-Intervall** lässt sich in der `config.yml` einstellen (z. B. alle 5 Minuten). - Auch Items, die per **Hopper** eingeworfen werden, werden sofort verarbeitet. --- ## 🔐 Zugriff & Modi | Aktion | Beschreibung | |--------|-------------| | **Shift + Rechtsklick** (leere Hand) auf Schild/Truhe | Wechselt zwischen Privat und Öffentlich | | **Rechtsklick** auf Ziel-Schild (Item in Hand) | Ändert den zugeordneten Item-Typ | | **Rechtsklick** auf Mülltruhen-Schild | Öffnet das Filter-Konfiguration-GUI | | **Privat** | Nur der Besitzer kann die Truhe nutzen. Sortierung nur bei Online-Status. | | **Öffentlich** | Alle Spieler dürfen Items einwerfen. Sortierung auch offline. Schild zeigt `[Public]`. | > Nur der Besitzer (Name auf dem Schild) kann den Modus ändern oder die Truhe/das Schild abbauen. > Zum Abbauen immer **Shift gedrückt halten**. --- ## 🎨 Clean-Modus Wenn `sign-style.clean-target: true` in der `config.yml` gesetzt ist, werden Schilder in einem aufgeräumten Format ohne sichtbare `[asc]`-Kennung angezeigt: | Schild-Typ | Zeile 1 | Zeile 2 | Zeile 3 | |-----------|---------|---------|---------| | **Input** | Spielername | „Eingang" / „Input" | Öffentlich / Privat | | **Target** | Item-Name | Spielername | Öffentlich / Privat | | **Rest** | Spielername | „Rest" | Öffentlich / Privat | | **Trash** | Spielername | „Müll" / „Trash" | — | Die Farben für den Clean-Modus werden separat unter `sign-colors-clean` konfiguriert. --- ## 🌐 Serverübergreifende Sortierung (CrossLink) Wenn MySQL aktiviert und `server_crosslink: true` gesetzt ist, können Zieltruhen auf **anderen Servern desselben Netzwerks** liegen. **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 (`asc_transfers`). 3. Server B liest die Transfer-Tabelle und befüllt seine lokale Zieltruhe automatisch. **BungeeCord-Setup:** 1. Dieselbe MySQL-Datenbank auf allen Servern eintragen. 2. Auf jedem Server einen **eindeutigen** `server_name` setzen (z. B. `survival`, `creative`). 3. `mysql.enabled: true` und `server_crosslink: true` setzen. 4. Alle Server neu starten – das Schema wird automatisch migriert. > Wird `server_name` leer gelassen, läuft das Plugin im Legacy-Modus (welt-basierte Erkennung, kein BungeeCord). **Voraussetzung:** Alle Server müssen dieselbe MySQL-Datenbank nutzen. --- ## 💬 Befehle & Berechtigungen | Befehl | Beschreibung | Berechtigung | |--------|-------------|-------------| | `/asc help` | Zeigt die Hilfe an | – | | `/asc info` | Plugin-Informationen (Version, Autor) | `autosortchest.use` | | `/asc reload` | Konfiguration neu laden | `autosortchest.reload` | | `/asc import` | Importiert Daten aus `players.yml` → MySQL | `autosortchest.import` (OP) | | `/asc export` | Exportiert Daten aus MySQL → `players.yml` | `autosortchest.export` (OP) | ### Berechtigungen – Vollständige Übersicht | Permission | Beschreibung | Standard | |-----------|-------------|---------| | `autosortchest.use` | Erlaubt das Erstellen von ASC-Schildern | `true` | | `autosortchest.reload` | Erlaubt `/asc reload` | OP | | `autosortchest.import` | Erlaubt `/asc import` | OP | | `autosortchest.export` | Erlaubt `/asc export` | OP | | `autosortchest.bypass` | Schilder ohne Shift abbauen, unabhängig vom Besitzer | OP | | `autosortchest.limit.bypass` | Umgeht alle Truhen-Limits | OP | | `autosortchest.admin` | Zugriff auf fremde ASC-Truhen | OP | | `autosortchest.limit.` | Weist dem Spieler die Limits einer Gruppe zu (z. B. `autosortchest.limit.vip`) | `false` | > Spieler **ohne** jede `autosortchest.limit.*`-Permission können bei aktivierten Limits **keine** Truhen erstellen. Vergib `autosortchest.limit.default` an alle normalen Spieler (z. B. in LuckPerms). ### Import & Export – Details **`/asc import`** Überträgt alle Spielerdaten aus der `players.yml` in die MySQL-Datenbank. Sinnvoll beim erstmaligen Wechsel von YAML auf MySQL. Bestehende MySQL-Einträge werden dabei nicht gelöscht, sondern aktualisiert (`REPLACE INTO`). **`/asc export`** Exportiert alle Daten aus MySQL zurück in die `players.yml`. Enthält die `players.yml` noch Daten, wird vorher automatisch ein Backup erstellt (`players_backup_.yml`). Ist die Datei bereits leer, wird kein unnötiges Backup angelegt. --- ## ⚙️ Konfiguration (config.yml) ```yaml # Version der Konfigurationsdatei version: "2.3" # Debug-Modus (nur für Entwicklung) debug: false # Sprache: 'de' oder 'en' language: "de" # MySQL/MariaDB – für CrossLink und zentralen Datenspeicher mysql: enabled: false host: "localhost" port: 3306 database: "autosortchest" user: "autosortchest" password: "autosortchest" # Serverübergreifende Sortierung (benötigt MySQL) server_crosslink: true # Eindeutiger Servername im BungeeCord-Netzwerk # Leer lassen = Legacy-Modus (welt-basiert, kein BungeeCord) # Beispiele: lobby | survival | creative server_name: "" # Welten, in denen das Plugin deaktiviert ist world_blacklist: - "world_nether" - "world_the_end" # Sortier-Intervall in Ticks (1 Tick = 0,05s) # Empfohlen: 10 (= 0,5s) sort_interval_ticks: 10 # Rest-Truhen Nachsortierung (0 = deaktiviert) rest_resort_interval_ticks: 400 # 400 Ticks = 20 Sekunden # Mülltruhe trash: # 0 = Nur beim Schließen leeren | 300 = alle 5 Min | 3600 = stündlich auto_clear_interval_seconds: 0 # Visuelle Effekte effects: enabled: false # Partikel-Effekte anzeigen? sound: false # Ton beim Ankommen von Items? type: "DUST" # Partikel-Typ ('DUST' = bunter Regenbogen-Effekt) # Schild-Stil sign-style: clean-target: false # true = sauberer Modus (kein Item-Name auf dem Schild) # Maximale Anzahl Truhen pro Spielergruppe chest_limits: enabled: true default: input: 1 rest: 1 target: 50 target_per_item: 1 # Wie viele Zieltruhen pro Item-Typ erlaubt sind vip: input: 2 rest: 2 target: 100 target_per_item: 3 # Truhen-Fenstertitel (Platzhalter: %item%) chest-titles: input: de: "&6Eingangstruhe" en: "&6Input Chest" target: de: "&6%item%" en: "&6%item%" rest: de: "&6Rest-Truhe" en: "&6Rest Chest" trash: de: "&4Mülltruhe" en: "&4Trash Chest" # Schildfarben (Minecraft-Farbcodes) sign-colors: input: line1: "&6" line2: "&0" line4: "&1" target: line1: "&6" line2: "&0" line3: "&f" line4: "&1" full: line1: "&c" line2: "&4" line3: "&e" line4: "&1" rest: line1: "&6" line2: "&0" line3: "&f" line4: "&1" trash: line1: "&6" line2: "&0" line4: "&1" # Schildfarben im Clean-Modus sign-colors-clean: input: line1: "&1" line2: "&0" line3: "&a" target: line1: "&f" line2: "&1" line3: "&a" full: line1: "&e" line2: "&1" line3: "&a" rest: line1: "&1" line2: "&0" line3: "&a" trash: line1: "&1" line2: "&0" # Nachrichten (Platzhalter: %player%, %item%, %x%, %y%, %z%, %mode%, %max%) messages: no-chest-near-sign: "&cKeine Truhe in der Nähe des Schildes!" no-item-in-hand: "&cDu musst ein Item in der Hand halten!" not-your-chest: "&cDiese Truhe gehört dir nicht!" input-chest-set: "&aEingangstruhe erfolgreich gesetzt!" target-chest-set: "&aZieltruhe erfolgreich für %item% eingerichtet!" rest-chest-set: "&aRest-Truhe (Fallback) erfolgreich gesetzt!" trash-chest-set: "&aMülltruhe erfolgreich eingerichtet!" trash-chest-hint: "&7Rechtsklicke das Schild um Items zu konfigurieren." target-chest-missing: "&cZieltruhe für %item% fehlt!" target-chest-full: "&cZieltruhe für %item% ist voll! Koordinaten: (%x%, %y%, %z%)" sign-break-denied: "&cDu musst Shift gedrückt halten, um dieses Schild oder die Truhe abzubauen!" no-permission: "&cDu hast keine Berechtigung für diesen Befehl!" world-blacklisted: "&cIn dieser Welt kannst du keine AutoSortChest erstellen!" reload-success: "&aKonfiguration erfolgreich neu geladen!" mode-changed: "&aModus gewechselt: &e%mode%" mode-public: "&aÖffentlich" mode-private: "&cPrivat" limit-input-reached: "&cDu hast das Limit deiner Eingangstruhen erreicht! &7(%max%)" limit-rest-reached: "&cDu hast das Limit deiner Rest-Truhen erreicht! &7(%max%)" limit-target-reached: "&cDu hast das Limit deiner Zieltruhen erreicht! &7(%max%)" limit-target-per-item: "&cDu hast das Limit für %item%-Truhen erreicht! &7(%max%)" limit-no-permission: "&cDu hast keine Berechtigung um Truhen zu erstellen!" trash-cleared: "&a✔ Mülltruhe wurde geleert!" trash-item-added: "&a✔ &e%item% &azur Müll-Liste hinzugefügt." trash-item-already: "&eDiseses Item ist bereits in der Müll-Liste." trash-item-removed: "&c✖ &e%item% &caus der Müll-Liste entfernt." trash-info-empty: "&4Mülltruhe &8(Deaktiviert) &7– Rechtsklick Schild zum Konfigurieren" trash-info-filter: "&4Müll: &f%items% &8| Schild-Rechtsklick: Konfigurieren" ``` --- ## 🗄️ Datenbank-Tabellen Bei aktiviertem MySQL erstellt das Plugin folgende Tabellen automatisch: | 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 | --- ## 🔧 Technische Details - **Kompatibilität:** Paper, Spigot, Purpur (1.18.x – 1.21.x) - **Java:** 17+ - **Datenbank:** YAML (Standard) oder MySQL/MariaDB (optional) - **Performance:** Asynchrones Speichern der `players.yml`, konfigurierbarer Sortier-Intervall, TTL-Caching für öffentliche Truhen --- ## 💬 Support [![Discord](https://img.shields.io/badge/Discord-Support-7289DA?style=for-the-badge&logo=discord)](https://discord.com/invite/FdRs4BRd8D) --- **Copyright © 2026 - M_Viper - Alle Rechte vorbehalten** Die unbefugte Vervielfältigung, Verbreitung oder Weitergabe dieses Plugins ist strafbar und wird rechtlich verfolgt.