# Cosmetics

Kosmetische Skins aus Nexo auf eigene Items anwenden. Das Item bleibt exakt dasselbe: Werte, Verzauberungen, Haltbarkeit, Name und Lore ändern sich nie, nur das Aussehen wechselt. Alle Spieler sehen das neue Design. Benötigt das Nexo-Plugin und ein Resource-Pack mit den Modellen.

**Die Besitz-Regel:** Ein Skin ist nur sichtbar, solange der aktuelle Besitzer des Items die Cosmetic freigeschaltet hat. Wird das Item an jemanden weitergegeben, der sie nicht besitzt, verschwindet das Design automatisch. Kommt das Item zu einem freigeschalteten Spieler zurück, erscheint es wieder. Freischaltungen gehören dauerhaft zum Spielerkonto und überleben auch einen Season-Reset mit neuer Welt.

## Commands

| Subcommand | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| (GUI) | `/cosmetic` (Alias `/cosmetics`) | `cosmetic.use` | `true` | Öffnet das Cosmetics-Menü |
| `apply` | `/cosmetic apply <id>` | `cosmetic.use` | `true` | Wendet eine Cosmetic auf das Item in der Haupthand an |
| `remove` | `/cosmetic remove` | `cosmetic.use` | `true` | Stellt das Original-Aussehen wieder her |
| `list` | `/cosmetic list` | `cosmetic.use` | `true` | Listet die eigenen freigeschalteten Cosmetics |
| `grant` | `/cosmetic grant <spieler> <id>` | `cosmetic.admin` | op | Schaltet eine Cosmetic frei (auch Konsole und Offline-Spieler) |
| `revoke` | `/cosmetic revoke <spieler> <id>` | `cosmetic.admin` | op | Entzieht eine Freischaltung |
| `reload` | `/cosmetic reload` | `cosmetic.admin` | op | Lädt die Cosmetic-Liste neu |

**Freischalt-Permissions:** Jede Cosmetic hat zusätzlich die Permission `cosmetic.use.<id>` (Default `false`). Damit kann jedes Crate- oder Shop-Plugin Cosmetics vergeben, ganz ohne Extra-Einrichtung: einfach die Permission als Gewinn ausschütten. Alternativ schaltet `/cosmetic grant` dauerhaft frei (übersteht auch einen Season-Reset).

**Duplikat-Schutz für Crates:** Für jede freigeschaltete Cosmetic meldet CoreEngine bei Online-Spielern automatisch die Permission `cosmetic.owns.<id>`. Crate-Plugins mit Preis-Blacklist (zum Beispiel CrazyCrates mit `BlackListed-Permissions`) erkennen damit bereits besessene Skins und können stattdessen einen Ersatzpreis ausschütten, ohne dass irgendwo Marker-Permissions gespeichert werden müssen. Nach einem `revoke` verschwindet die Permission automatisch wieder.

> **Tipp:** Im Menü (`/cosmetic`) genügt ein Klick: Item in die Haupthand nehmen, Cosmetic anklicken, fertig. Trägt das Item den Skin bereits, entfernt derselbe Klick ihn wieder. Gesperrte Cosmetics werden grau angezeigt, inklusive Hinweis, wo es sie gibt. Ist ein Preis konfiguriert, wird der Kauf zur Sicherheit im Amboss bestätigt.

> **Hinweis:** Skins passen nur auf nicht stapelbare Items (Rüstung, Waffen, Werkzeuge). Welche Item-Typen eine Cosmetic akzeptiert, legt die Config pro Cosmetic fest, z. B. nur Brustplatten. Items mit fremdem Custom-Aussehen werden nicht angefasst, damit nichts verloren geht.

## 3D-Modelle am Körper

Manche Cosmetics sind mehr als ein neues Item-Aussehen: Ein Fass als Brustplatte oder ein Rucksack braucht echte 3D-Geometrie am Spieler, und getragene Rüstung kann in Minecraft grundsätzlich nur flache Texturen zeigen. Dafür gibt es die Körper-Ebene: Trägt ein Spieler ein Item mit einer solchen Cosmetic im passenden Rüstungs-Slot, erscheint das 3D-Modell direkt an seinem Körper, dreht sich mit ihm mit und ist für alle sichtbar.

Das ist bewusst sparsam gebaut: Das unsichtbare Hilfs-Objekt hat keine KI, keine Physik, wird nie gespeichert und reist als Passagier des Spielers mit, der Server verschickt dafür nach dem Aufsetzen keine Positionsdaten mehr. Pro tragendem Spieler kostet es ungefähr so viel wie ein einzelnes herumliegendes Item.

Verhalten im Spiel: Beim Schwimmen, Kriechen und Elytra-Flug wird das Modell automatisch ausgeblendet (der Körper liegt waagerecht), ebenso im Spectator-Modus, für versteckte Spieler und beim Reiten. Der Träger sieht sein eigenes Modell in der Third-Person-Ansicht; mit `hide-own-view` lässt es sich für den Träger komplett ausblenden (Minecraft kann nicht nur die Ego-Perspektive ausnehmen). Es ist immer höchstens ein Körper-Modell pro Spieler sichtbar; die Besitz-Regel gilt unverändert, beim Weitergeben verschwindet mit dem Design auch das Modell.

In der Config steuert `body-cosmetics.mode` die ganze Ebene: `entity` ist der empfohlene Normalbetrieb, `off` schaltet alle Körper-Modelle ab, ohne die Hut- und Hand-Skins zu berühren (Not-Aus, greift nach `/cosmetic reload` sofort). `packet` ist für eine spätere Paket-Variante reserviert und verhält sich derzeit wie `entity` mit einem Hinweis im Log.

## Web-Panel

Im Web-Panel (`/cweb`) gibt es den Tab **Inventar**: Er zeigt alle freigeschalteten Cosmetics und die passenden Items aus dem eigenen Inventar. Skins lassen sich dort per Auswahl anwenden oder entfernen; die Änderungen werden wie überall im Panel gesammelt und mit einem Klick übernommen. Wird das Item im Spiel zwischenzeitlich bewegt oder verändert, bricht die Aktion mit einer klaren Meldung ab, es wird nie das falsche Item verändert. Der Tab erscheint nur, wenn Nexo installiert ist.

## Konfiguration (modules/cosmetics.yml)

```yaml
# Schaltet das Cosmetics-Modul ein oder aus.
enabled: true

cosmetics:
  # Wie Freischaltungen geprüft werden:
  #   permission = über cosmetic.use.<id> (Crate-Plugins)
  #   database   = nur über /cosmetic grant
  #   both       = beides zählt
  unlock-mode: both
  # Wo /cosmetic grant speichert: database, standalone-file oder both.
  # both schreibt zusätzlich in cosmetic-unlocks.json im Plugin-Ordner,
  # die auch einen kompletten Datenbank-Neuaufbau übersteht.
  unlock-storage: both
  # Preis fürs Anwenden (0 = kostenlos, keine Amboss-Bestätigung).
  apply-cost: 0
  # Preis fürs Entfernen.
  remove-cost: 0
  # Sekunden Wartezeit zwischen zwei Aktionen pro Spieler.
  cooldown-seconds: 3
  # Sekunden zwischen den Sicherheits-Prüfungen getragener Items.
  sweep-interval-seconds: 5
  # Cosmetics auch auf Nexo-Items erlauben.
  allow-on-nexo-items: false
  # Gesperrte Cosmetics grau im Menü anzeigen.
  show-locked-in-gui: true
  # Hinweistext auf gesperrten Cosmetics.
  locked-hint: "Win cosmetics from crates!"
  # Globale Material-Whitelist (leer = alle nicht stapelbaren Items).
  allowed-materials: []
  # 3D-Modelle am Körper (Cosmetics mit body-Block).
  body-cosmetics:
    # off = keine Körper-Modelle, entity = Normalbetrieb,
    # packet = reserviert, verhält sich derzeit wie entity.
    mode: entity
    # Sichtweite der Modelle in Blöcken.
    view-distance: 48
    # Blendet das Modell für den Träger komplett aus (auch Third-Person).
    hide-own-view: false
    # Versteckte Spieler zeigen kein Modell.
    hide-while-vanished: true
    # Beim Schwimmen, Kriechen und Elytra-Flug ausblenden.
    hide-in-special-poses: true
  # Die Cosmetics selbst. Das Aussehen kommt live aus dem Nexo-Item,
  # hier wird nichts doppelt gepflegt.
  registry:
    barrel:
      nexo-item: barrel_chestplate
      display-name: "Barrel"
      description: "Hide inside a sturdy oak barrel."
      allowed-materials:
        - LEATHER_CHESTPLATE
        - COPPER_CHESTPLATE
        - IRON_CHESTPLATE
        - DIAMOND_CHESTPLATE
        - NETHERITE_CHESTPLATE
      permission: ""
      hidden: false
      sort-order: 0
      # Optional: 3D-Modell am Körper, solange das Item getragen wird.
      body:
        # Nexo-Item, dessen Modell am Körper erscheint.
        nexo-item: barrel_chestplate
        # Welcher Slot das Modell auslöst: HEAD, CHEST, BACK, LEGS, FEET
        # (BACK reitet ebenfalls auf dem Brust-Slot, z. B. für Rucksäcke).
        slot: CHEST
        # Das Modell sitzt auf Kopfhöhe des Trägers; negative Y-Werte
        # schieben es zur Brust hinunter. Justieren, bis es richtig sitzt.
        scale: 1.0
        offset: [0.0, -0.7, 0.0]
        # Die Rüstung verliert ihre eigene Textur am Körper.
        hide-vanilla-armor: true
```

## Season-Reset

Freischaltungen hängen an der Spieler-UUID, nicht an Welt, Inventar oder Season. Bei einem Reset mit neuer Welt verlieren Spieler zwar die bemalten Items, aber nie ihre Cosmetics: Nach dem Neustart einfach den Skin auf das neue Item legen. Mit `unlock-storage: both` überleben die Freischaltungen sogar eine komplett neu aufgesetzte Datenbank, weil die Datei `cosmetic-unlocks.json` beim Start automatisch wieder eingelesen und zusammengeführt wird. Wer auf Nummer sicher gehen will, kopiert diese Datei vor dem Season-Wechsel zusätzlich in ein Backup.

## Häufige Fragen

**Was passiert, wenn eine Cosmetic aus Nexo entfernt wird?** Nichts Schlimmes: Das Item bleibt vollständig erhalten, nur der Skin wird unsichtbar. Kommt die Cosmetic später zurück, erscheint er wieder.

**Kann man über Amboss oder Crafting den Skin an andere weitergeben?** Nein. Auch nach Amboss, Schleifstein oder Schmiedetisch gilt die Besitz-Regel: Beim neuen Besitzer ohne Freischaltung verschwindet das Design.

**Sehen Spieler ohne Resource-Pack den Skin?** Nein, sie sehen das normale Item. Das Resource-Pack mit den Nexo-Modellen muss installiert sein.
