From 1647ebd26081bdb748e466a9136a0ba90cbe9d60 Mon Sep 17 00:00:00 2001 From: M_Viper Date: Fri, 23 Jan 2026 11:10:55 +0000 Subject: [PATCH] =?UTF-8?q?MapArt=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MapArt.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 MapArt.md diff --git a/MapArt.md b/MapArt.md new file mode 100644 index 0000000..eb4836a --- /dev/null +++ b/MapArt.md @@ -0,0 +1,59 @@ +# MapArt + +Das MapArt-Modul ermöglicht es, externe Bilder (URLs) direkt auf Ingame-Karten zu rendern und diese in einem Raster (z.B. 3x3) an Wänden zu platzieren. Das System ist hochperformant durch asynchrones Laden und ein intelligentes Caching-Verfahren. + +## ✨ Funktionen + +- **Raster-Generierung:** Erstellt automatisch ein Gitter aus Item-Frames und Karten. +- **Asynchrones Laden:** Der Server laggt nicht, während Bilder aus dem Internet geladen werden. +- **Tile-Caching:** Bilder werden nur einmal heruntergeladen und im RAM für alle Karten-Segmente bereitgehalten. +- **Persistenz:** Platzierte Bilder werden in der `mapart.yml` gespeichert und nach einem Server-Neustart automatisch wiederhergestellt. +- **Unsichtbare Rahmen:** Das System nutzt unsichtbare und fixierte Item-Frames für einen sauberen Look. + +## 🎮 Befehle & Rechte + +**Berechtigung:** `nexuslobby.mapart` + +| Befehl | Beschreibung | +|--------|--------------| +| `/mapart x` | Erstellt ein Bild-Raster an der Wand, die du ansiehst. | +| `/mapart delete [Radius]` | Löscht MapArt-Elemente in deiner Nähe (Standard-Radius: 3). | + +### Beispiel + +Um ein Bild im Format 3 Blöcke breit und 2 Blöcke hoch zu platzieren: +```bash +/mapart https://beispiel.de/bild.png 3x2 +``` + +## 🔧 Technische Details + +### Koordinaten-Berechnung + +Das System berechnet die Ausbreitung des Rasters basierend auf der Blickrichtung (`BlockFace`) des Spielers: + +- Die Wand wird per **RayTracing** (max. 5 Blöcke Distanz) ermittelt. +- Das Raster wird von der Mitte aus nach rechts und nach unten aufgebaut. + +### Speicherung (`mapart.yml`) + +Jede generierte Karte wird mit ihrer ID und ihrer relativen Position im Gesamtbild gespeichert: +```yaml +active_maps: + '42': + url: "https://link.de/image.png" + x: 0 + y: 0 + totalW: 3 + totalH: 2 +``` + +### RAM-Schutz (Loading Shield) + +Um den Server vor Überlastung zu schützen (z.B. wenn 50 Karten gleichzeitig dasselbe Bild laden wollen), verhindert ein `loadingShield`, dass dieselbe URL mehrfach parallel angefragt wird. Sobald das Bild einmal geladen und in Kacheln (128x128 Pixel) zerschnitten wurde, bedient sich jede Karte aus dem `tileCache`. + +## ⚠️ Einschränkungen + +- Aktuell werden nur vertikale Wände unterstützt. +- Die URL muss direkt auf eine Bilddatei (PNG, JPG) verweisen. +- Zu große Raster (z.B. 20x20) können beim ersten Laden kurzzeitig die Netzwerk-Bandbreite beanspruchen. \ No newline at end of file