# Chest-Shops

Ein Spieler verwandelt eine einzelne Kiste per **Shift+Linksklick mit einem Item in der Hand** in einen Shop, das Schild entsteht automatisch. Gehandelt wird ausschließlich über das Schild, die Kiste bleibt für alle außer Besitzer/Team-Verwalter/Admin gesperrt. Jeder Shop ist `SELLING` (verkauft aus der Kiste) oder `BUYING` (kauft von Spielern an) und gehört einem Spieler oder einem [Team](teams.html) (Geldfluss dann über die Team-Kasse).

## Commands

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| `/shop info` | `/shop info` (Block anvisieren) | `shop.use` | `true` | Besitzer, Item, Preis, Typ, Bestand, Koordinaten |
| `/shop remove` | `/shop remove` (Block anvisieren) | `shop.use` | `true` | Entfernt den Shop (nur mit Verwaltungsrecht) |
| `/team shop` | `/team shop` (Block anvisieren) | `team.shop` + Team-Recht | `true` | Wandelt den Shop in einen Team-Shop um |
| `/shop list` | `/shop list` | `shop.admin` | `false` | Alle Shops mit Typ, Besitzer, Item, Preis, Position |
| `/shop reload` | `/shop reload` | `shop.admin` | `false` | Lädt Config und Shops neu |
| `/shopedit` | (internes Menü, Rechtsklick aufs Schild) | `shop.create` | `true` | Preis ändern, Typ wechseln, Shop entfernen |
| `/shopconfirm` / `/shopcancel` | (interne Chat-Buttons) | `shop.use` | `true` | Bestätigt/verwirft eine Transaktion |

## Weitere Permissions

| Permission | Default | Beschreibung |
|---|---|---|
| `shop.create` | `true` | Shops per Shift+Klick erstellen |
| `shop.bypass.maxshops` | `false` | Umgeht das persönliche und das Team-Shop-Limit |
| `shop.bypass.selftrade` | `false` | Erlaubt Handel am eigenen Shop |
| `shop.limit.<n>` | `false` | Individuelles Shop-Limit (höchster Wert gilt) |
| `shop.limit.unlimited` | `false` | Kein Shop-Limit |

## So läuft ein Handel

1. **Schild linksklicken**, ein Amboss-GUI fragt die Menge ab (beim Verkauf begrenzt durch Spieler-Bestand, Kisten-Platz und Besitzer-Guthaben).
2. Im Chat erscheinen klickbare `[✔ Confirm]`/`[✘ Cancel]`-Buttons (30 Sekunden gültig, `general.confirmation-timeout`).
3. Bei Bestätigung wird alles erneut geprüft und atomar gebucht: schlägt ein Teilschritt fehl, werden Geld und Items automatisch zurückgegeben. Passt nicht alles ins Inventar, fallen die restlichen Items vor die Füße (kein Verlust).

> **Hinweis:** Ändert der Besitzer zwischenzeitlich Preis oder Typ, bricht die Bestätigung automatisch ab. Preis- und Mengeneingaben laufen über Amboss-Fenster (nicht Chat) und verstehen `k`/`M`-Suffixe wie `1.5k`.

> **Tipp:** Die optionale Steuer (`tax-percentage`) wird niemandem gutgeschrieben, sie ist ein reiner Geld-Sink gegen Inflation.

**Rechtsklick aufs eigene Schild** öffnet das Edit-Menü: Preis ändern, Typ umschalten (Cooldown-geschützt), Shop entfernen. Team-Shops auf `BUYING` umzustellen braucht zusätzlich das Team-Recht `WITHDRAW`, denn Ankaufs-Shops geben Team-Geld aus.

**Team-Shops** (`/team shop`): braucht Team-Mitgliedschaft mit dem Team-Recht `EDIT_TEAM_SHOPS` (oder `shop.admin`). Sie zählen nicht gegen das persönliche Limit, sondern gegen `max-shops-per-team`.

## Schild

Das Schild wird automatisch gewachst und bei jeder Änderung neu gezeichnet:

| Zeile | Inhalt | Farbe |
|---|---|---|
| 1 | `[Shop]` | Pink |
| 2 | Besitzer (Spieler oder `Team <Name>`) | Aqua |
| 3 | Item-Name | Gelb |
| 4 | `Sell <Preis>` / `Buy <Preis>` (Kompaktformat wie `10k`) | Grün wenn verfügbar, sonst Rot |

## Schutzmechanismen

| Bedrohung | Schutz |
|---|---|
| Doppelkisten | Erstellung abgelehnt; nachträgliches Zusammenlegen technisch unmöglich |
| Abbau von Kiste/Schild | Nur Besitzer/Team-Verwalter/`shop.admin`, und selbst die nur schleichend |
| Explosionen | Shop-Kisten und -Schilder sind explosionsfest |
| Kolben | Bewegungen mit Shop-Blöcken werden komplett abgebrochen |
| Wasser/Lava/Feuer/Enderman | Können Shop-Blöcke nicht ersetzen oder zerstören |
| Hopper | Können Shop-Kisten weder leeren noch befüllen (`hopper-protection`) |
| Unbefugtes Öffnen | Kiste öffnet nur für Verwalter, gehandelt wird über das Schild |
| Team-Kisten | Team-beanspruchte Kisten können kein Shop werden |

## Konfiguration (modules/shop.yml)

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

shop:
  # Standard-Limit pro Spieler. Pro Rang per Permission übersteuern:
  # shop.limit.25 erlaubt 25 Shops, shop.limit.unlimited hebt das Limit auf.
  max-shops-per-player: 10
  # Maximale Shops pro Team (-1 = unbegrenzt). Team-Shops zählen nicht
  # gegen das persönliche Limit.
  max-shops-per-team: 10
  # Verhindert, dass Hopper Shop-Kisten leeren oder befüllen.
  hopper-protection: true
  # Erlaubter Preisbereich pro Item. max-price ist hart auf 999000000
  # begrenzt (höhere Werte werden beim Laden gekappt).
  min-price: 0.01
  max-price: 999000000.0
  # Steuer in Prozent auf jede abgeschlossene Transaktion. Der Betrag
  # wird niemandem gutgeschrieben (Geld-Sink). 0 = keine Steuer.
  tax-percentage: 0
  # Spielt Transaktions-Sounds auch für Spieler in der Nähe.
  sound-broadcast: false
  integrations:
    coreprotect:
      # Meldet Transaktionen an CoreProtect (#shop-buy-<spieler>).
      transaction-logging: true
    nexo:
      # Löst Nexo-Item-Namen auf Schildern/Anzeigen auf.
      enabled: true
    carpentary:
      # Löst Carpentary-Item-Namen auf.
      enabled: true

cooldown:
  commands:
    # Sekunden zwischen /shopedit-Aktionen (gegen Spam-Toggling).
    shopedit: 3
```

## Komplette Beispiel-Config

```yaml
enabled: true

shop:
  max-shops-per-player: 5
  max-shops-per-team: 20
  hopper-protection: true
  min-price: 1.0
  max-price: 1000000.0
  tax-percentage: 5
  sound-broadcast: true
  integrations:
    coreprotect:
      transaction-logging: true
    nexo:
      enabled: false
    carpentary:
      enabled: false

cooldown:
  commands:
    shopedit: 5
```
