MapArt hinzugefügt

2026-01-23 11:10:55 +00:00
parent a75ac1dc44
commit 1647ebd260

59
MapArt.md Normal file

@@ -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 <URL> <Breite>x<Höhe>` | 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.