# Teleport-System

Alle Teleports des Servers laufen über eine gemeinsame Engine: [Homes](homes.html), [Warps](warps.html), [TPA](tpa.html), Spawn, `/back` und [RTP](rtp.html) bekommen automatisch Sicherheitsprüfung der Zielposition, Kampf-Sperre, Warmup, Cooldown und Kosten. Admin-Teleports wirken sofort und überspringen alle diese Prüfungen.

## Commands

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| `/back` | `/back` | `back.use` | `true` | Teleportiert zur letzten Position vor Teleport/Tod |
| `/dback` | `/dback` | `dback.use` | `true` | Teleportiert zur letzten Todesposition |
| `/tp` | `/tp <spieler> [spieler2]` | `teleport.tp` | `false` | Admin: zu einem Spieler oder Spieler zu Spieler |
| `/tphere` | `/tphere <spieler>` | `teleport.tphere` | `false` | Admin: Spieler zu dir |
| `/tppos` | `/tppos <x> <y> <z> [welt]` | `teleport.tppos` | `false` | Admin: zu Koordinaten |
| `/tpall` | `/tpall` | `teleport.tpall` | `false` | Admin: alle Spieler zu dir |

## Weitere Permissions

| Permission | Default | Beschreibung |
|---|---|---|
| `back.ondeath` | `true` | Todesposition wird als `/back`-Ziel gespeichert |
| `teleport.bypass.safety` | `false` | Überspringt die Sicherheitsprüfung der Zielposition |
| `teleport.bypass.combat` | `false` | Teleportiert trotz Kampf-Sperre |
| `warmup.bypass.<command>` | `false` | Überspringt den Warmup des jeweiligen Befehls |
| `cooldown.bypass.<command>` | `false` | Überspringt den Cooldown des jeweiligen Befehls |
| `cost.bypass.<command>` | `false` | Der jeweilige Befehl kostet nichts |

> **Tipp:** Nach erfolgreichem `/back` bzw. `/dback` ist die jeweilige Position verbraucht, das verhindert Hin- und Herspringen zwischen zwei Punkten. `/dback` nutzt für Warmup/Cooldown/Kosten denselben Schlüssel `back` wie `/back`.

> **Tipp:** Scheitert ein Teleport nach der Abbuchung noch (z. B. keine sichere Zielposition gefunden), werden die Kosten automatisch zurückerstattet.

## Konfiguration (modules/teleport.yml)

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

teleport:
  safety-check:
    # Prüft vor jedem regulären Teleport, ob die Zielposition sicher ist
    # (fester Boden, freier Platz, kein Gefahren-Block wie Lava oder Kaktus).
    # Ist sie unsicher, wird im Umkreis bis search-radius (Blöcke) nach einer
    # sicheren Stelle gesucht; ohne Fund schlägt der Teleport fehl.
    enabled: true
    search-radius: 5
  combat-tag:
    # Wer im PvP getroffen wird, gilt für duration Sekunden als "im Kampf"
    # (Angreifer und Opfer). Solange sind reguläre Teleports blockiert.
    # Admin-Teleports sind nie betroffen.
    enabled: true
    duration: 10
  back:
    # Eine neue Back-Position wird nur gespeichert, wenn sie mindestens
    # min-distance Blöcke von der aktuellen entfernt ist (ein Weltwechsel
    # speichert immer). Todespositionen für /dback speichern immer.
    min-distance: 5
    # In diesen Welten wird keine Back-Position gespeichert oder genutzt.
    world-blacklist: []

cooldown:
  # Wartezeit in Sekunden zwischen zwei Nutzungen, pro Spieler und Befehl.
  commands:
    back: 5

cost:
  # Economy-Kosten pro Nutzung. 0 = kostenlos. Abgebucht wird erst
  # unmittelbar vor dem Sprung, bei Fehlschlag gibt es den Betrag zurück.
  commands:
    back: 0

warmup:
  # Countdown vor dem Sprung. Bewegung bricht ab (Umschauen zählt nicht),
  # ein zweiter Befehl während des Countdowns wird abgelehnt.
  commands:
    back:
      duration: 3
```

## Warmup, Cooldown und Kosten (global)

Die Standardwerte für alle Befehle stehen in der `config.yml`; jedes Modul überschreibt sie pro Befehl in seiner eigenen `modules/*.yml` (wie oben bei `back` gezeigt).

```yaml
# config.yml
warmup:
  default:
    # Countdown in Sekunden. 0 deaktiviert das Warmup.
    duration: 3
    # true = ein echter Schritt bricht das Warmup ab (Umschauen nicht).
    cancel-on-move: true
    # Anzeige des Countdowns: actionbar, bossbar, both oder none.
    # Die Bossbar wechselt mit dem Fortschritt die Farbe (grün/gelb/rot).
    display: actionbar
    # Partikel-Kreis auf Brusthöhe während des Countdowns.
    particles:
      enabled: true
      type: PORTAL
      count: 10
      radius: 0.5
  commands: {}

cooldown:
  # Fallback in Sekunden für Befehle ohne eigenen Wert. Cooldowns sind
  # zeitstempelbasiert (lag-unabhängig) und gehen beim Relog verloren.
  default: 0
  commands:
    pay: 1

cost:
  # Core-eigene Kosten; Modul-Kosten liegen in modules/*.yml.
  commands: {}
```

> **Tipp:** Fehlt eine Option in einem `warmup.commands.<befehl>`-Block, greift automatisch der `warmup.default`-Wert aus der `config.yml`.

## Komplette Beispiel-Config

So könnte eine angepasste `modules/teleport.yml` auf einem Survival-Server aussehen:

```yaml
enabled: true

teleport:
  safety-check:
    enabled: true
    search-radius: 8
  combat-tag:
    enabled: true
    duration: 15
  back:
    min-distance: 10
    world-blacklist:
      - event_world
      - build_contest

cooldown:
  commands:
    back: 30

cost:
  commands:
    back: 25.0

warmup:
  commands:
    back:
      duration: 5
```
