# RTP (Random Teleport)

RTP sucht eine sichere Zufallsposition, respektiert Weltgrenze, Biom-Filter und (falls installiert) Claims/Regionen. Für das einfache `/rtp` liegt meist schon eine vorbereitete Position in der Warteschlange, der Sprung passiert dann ohne Wartezeit. `/rtp` läuft über die [Teleport-Engine](teleport.html), Tiere reisen per [Mob-Teleport](mobteleport.html) mit.

## Commands

| Subcommand | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| (kein) | `/rtp` (Alias `/randomtp`, `/wild`) | `rtp.use` | `true` | Random-Teleport in der aktuellen (oder erzwungenen) Welt |
| `help` | `/rtp help` | `rtp.use` | `true` | Subcommands nach Permission gefiltert |
| `biome` | `/rtp biome <biom> [...]` | `rtp.biome` | `true` | RTP mit Biom-Wunsch |
| `world` | `/rtp world <welt> [biom...]` | `rtp.world` + `rtp.world.<welt>` | `false` | RTP in einer bestimmten Welt |
| `player` | `/rtp player <spieler> [welt]` | `rtp.player` | `false` | Admin: teleportiert einen Spieler sofort zufällig |
| `info` | `/rtp info` | `rtp.admin` | `false` | Alle Welt-Parameter, Sperren, Limits |
| `reload` | `/rtp reload` | `rtp.admin` | `false` | Lädt Config und Warteschlange neu |
| `queue` | `/rtp queue` | `rtp.admin` | `false` | Füllstand der Warteschlange pro Welt |
| `disabled` | `/rtp disabled add\|remove\|list [welt]` | `rtp.admin` | `false` | Verwaltet die Welt-Sperrliste zur Laufzeit |

`/rtp <weltname>` ist die Kurzform von `/rtp world <weltname>`; trifft der Name keine Welt, wird er als Biom interpretiert.

## Weitere Permissions

| Permission | Default | Beschreibung |
|---|---|---|
| `rtp.world.<welt>` / `rtp.world.*` | `false` | Erlaubt RTP in der jeweiligen bzw. allen Welten |
| `rtp.bypass.worldblacklist` | `false` | Ignoriert gesperrte Welten |
| `rtp.bypass.biome` | `false` | Ignoriert den konfigurierten Biom-Filter |
| `rtp.bypass.cooldown` / `rtp.bypass.delay` / `rtp.bypass.cost` | `false` | Ignoriert Cooldown/Warmup/Kosten (koppeln automatisch die generischen `cooldown.bypass.rtp` usw.) |
| `rtp.bypass.limit` | `false` | Ignoriert das Nutzungslimit |
| `rtp.bypass.claimprotection` | `false` | Ignoriert den Claim-Schutz bei Live-Suchen |
| `rtp.limit.<n>` / `rtp.limit.unlimited` | `false` | Individuelles Nutzungslimit (höchster Wert gilt) bzw. unbegrenzt |

> **Tipp:** Die Warteschlange prüft den Claim-Schutz immer, unabhängig von Bypass-Permissions; nur Live-Suchen respektieren `rtp.bypass.claimprotection`. Pro Spieler läuft immer nur eine Suche, ein zweiter `/rtp`-Aufruf währenddessen wird abgelehnt.

> **Tipp:** Bei `/rtp biome` wird die Schnittmenge aus Spieler-Wunsch und konfigurierter `allowed-biomes`-Liste verwendet; mit `rtp.bypass.biome` zählt nur der eigene Wunsch.

## Konfiguration (modules/rtp.yml)

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

rtp:
  # Nutzungslimit pro Spieler (bleibt über Neustarts). 0 = unbegrenzt.
  # Individuell per Permission rtp.limit.<n> übersteuerbar.
  max-uses: 0
  # Erzwingt für das einfache /rtp immer diese Welt. Leer = aktuelle Welt.
  force-world: ""
  # Schränkt /rtp world auf diese Welten ein. Leer = alle (mit Permission).
  # rtp.admin umgeht die Einschränkung.
  selectable-worlds: []
  # Welten, in denen /rtp gesperrt ist. Bypass: rtp.bypass.worldblacklist.
  disabled-worlds: ["spawn"]
  # Leitet eine Quellwelt vor der Suche in eine Zielwelt um (ein Eintrag
  # pro Welt, jede Quelle nur einmal).
  world-redirects:
    survival_nether: survival
  defaults:
    # Suchzentrum und Abstand: min-radius bis max-radius vom Zentrum.
    center-x: 0
    center-z: 0
    min-radius: 100
    max-radius: 5000
    # Erlaubter Höhenbereich für die Landung.
    min-y: -64
    max-y: 320
    # Suchversuche, bevor RTP aufgibt.
    max-attempts: 32
    # circle (gleichverteilt im Kreis) oder square (inneres Quadrat um
    # das Zentrum wird ausgespart).
    shape: circle
    # NORMAL oder NETHER: steuert die Suchrichtung für eine sichere Höhe.
    world-type: NORMAL
    # Chunks um das Ziel, die vor dem Teleport geladen werden.
    chunk-preload-radius: 2
    # Hält Positionen innerhalb der Vanilla-Weltgrenze.
    respect-worldborder: true
    # Verbotene Lande-Blöcke. Leer = eingebauter Standard (Wasser, Lava,
    # Kaktus, Laub, Bedrock, Kelp). Auch Custom-Blocks: nexo:custom_ore,
    # carpentary:chair oder nexo:* als Wildcard.
    block-blacklist: []
    # Erlaubte Biome. Leer = alle.
    allowed-biomes: []
    # Preis in dieser Welt: -1 nutzt cost.commands.rtp, 0 = kostenlos.
    cost: -1
  # Überschreibt jeden defaults-Wert pro Welt; fehlende Werte fallen
  # auf defaults zurück.
  worlds:
    survival_nether:
      min-radius: 50
      max-radius: 1000
      min-y: 32
      max-y: 120
      world-type: NETHER
      cost: 0
  queue:
    # Vorbereitete sichere Positionen pro Welt: size Ziel-Füllstand,
    # fill-interval Sekunden zwischen Nachfüll-Versuchen.
    enabled: true
    size: 5
    fill-interval: 30
  claim-protection:
    # Überspringt WorldGuard-Regionen bzw. GriefPrevention-Claims.
    worldguard: true
    griefprevention: true

cooldown:
  commands:
    rtp: 60

cost:
  commands:
    # Globaler Preis, solange keine Welt einen eigenen cost-Wert setzt.
    rtp: 50.0

warmup:
  commands:
    rtp:
      duration: 10
```

## Komplette Beispiel-Config

```yaml
enabled: true

rtp:
  max-uses: 20
  force-world: "wildnis"
  selectable-worlds:
    - wildnis
    - wildnis_nether
  disabled-worlds:
    - spawn
    - event_world
  world-redirects:
    wildnis_nether: wildnis
  defaults:
    center-x: 0
    center-z: 0
    min-radius: 500
    max-radius: 10000
    min-y: 60
    max-y: 320
    max-attempts: 48
    shape: circle
    world-type: NORMAL
    chunk-preload-radius: 3
    respect-worldborder: true
    block-blacklist:
      - POWDER_SNOW
    allowed-biomes: []
    cost: -1
  worlds: {}
  queue:
    enabled: true
    size: 10
    fill-interval: 20
  claim-protection:
    worldguard: true
    griefprevention: true

cooldown:
  commands:
    rtp: 300

cost:
  commands:
    rtp: 100.0

warmup:
  commands:
    rtp:
      duration: 5
```
