# TeleportSuite

TeleportSuite ist ein umfassendes Teleport-Plugin für Paper/Spigot mit Homes, Warps, Portalen, Spawn-System, Savepoints, Back/Deathback, Teleportanfragen und BungeeCord-Unterstützung.

---

## Features

- Homes mit konfigurierbaren Limits pro Rang
- Warps mit optionalen Berechtigungen
- Portale für Server- oder Weltwechsel
- Spawn, FirstSpawn und Deathback
- Teleportanfragen (TPA) mit Accept/Deny
- Back- und Cooldown-/Warmup-System
- Teleport zu Koordinaten, Welten und Spielern
- Entity-Transport
- SQLite- und MySQL-Unterstützung
- BungeeCord-Unterstützung für verteilte Servernetzwerke

---

## Voraussetzungen

- Paper oder Spigot ab Minecraft 1.20
- Java 21 oder neuer
- Optional: MySQL, falls mehrere Server auf dieselbe Datenbank zugreifen sollen
- Optional: BungeeCord-Proxy, falls du mehrere Server vernetzt hast

---

## Installation

### Einzelner Server (kein BungeeCord)

1. Die JAR-Datei in den `plugins`-Ordner deines Servers kopieren.
2. Server starten → Plugin legt `config.yml` und Datenbank automatisch an.
3. Server stoppen und `config.yml` nach Bedarf anpassen.
4. Server neu starten.

---

### BungeeCord-Netzwerk ⚠️

> Wenn du mehrere Server mit BungeeCord verbunden hast und Spieler **serverübergreifend** teleportieren sollen, musst du das Plugin auf **jedem Spigot-Server UND auf dem BungeeCord-Proxy** installieren.

**Schritt-für-Schritt:**

**1. JAR auf jeden Spigot-Server kopieren**

Kopiere die `TeleportSuite.jar` in den `plugins`-Ordner von **jedem einzelnen** Spigot-Server in deinem Netzwerk (z.B. Lobby, Survival, Creative, ...).

**2. JAR auf den BungeeCord-Proxy kopieren**

Kopiere dieselbe `TeleportSuite.jar` auch in den `plugins`-Ordner deines **BungeeCord-Proxys**. Das Plugin erkennt automatisch ob es auf Spigot oder BungeeCord läuft.

**3. Jeden Server einmal starten**

Starte jeden Server einmal kurz, damit die `config.yml` angelegt wird. Dann stoppe ihn wieder.

**4. config.yml auf jedem Spigot-Server anpassen**

Öffne die `plugins/TeleportSuite/config.yml` auf **jedem Spigot-Server** und passe folgende Einstellungen an:

```yaml
bungee:
  enabled: true                # ← MUSS auf true stehen, sonst kein Cross-Server-Teleport!
  server-name: "survival"      # ← Den Namen dieses Servers eintragen (siehe unten)
```

> **Woher bekomme ich den `server-name`?**
> Öffne die `config.yml` deines **BungeeCord-Proxys** (nicht des Spigot-Servers!).
> Dort findest du einen Abschnitt wie diesen:
> ```yaml
> servers:
>   lobby:
>     address: localhost:25566
>   survival:
>     address: localhost:25567
>   creative:
>     address: localhost:25568
> ```
> Der `server-name` in der TeleportSuite-Config muss **exakt** dem Namen aus dieser Liste entsprechen.
> Beispiel: Auf dem Survival-Server trägst du `server-name: "survival"` ein.
> Auf dem Lobby-Server trägst du `server-name: "lobby"` ein. Und so weiter.

**5. Datenbank einrichten (empfohlen: MySQL)**

Damit alle Server auf dieselben Homes, Warps usw. zugreifen, solltest du MySQL verwenden und auf jedem Spigot-Server dieselben Zugangsdaten eintragen:

```yaml
database:
  type: mysql
  mysql:
    host: localhost       # Adresse deines MySQL-Servers
    port: 3306
    database: teleportsuite
    username: root
    password: deinPasswort
```

**6. Alle Server neu starten**

Starte jetzt alle Spigot-Server und den BungeeCord-Proxy neu. Wenn alles korrekt konfiguriert ist, siehst du beim Start des jeweiligen Spigot-Servers in der Konsole:

```
[TeleportSuite] BungeeCord-Unterstuetzung aktiviert. Server: survival
```

Falls du stattdessen diese Warnung siehst:

```
[TeleportSuite] BungeeCord deaktiviert (bungee.enabled=false).
```

→ Dann hast du in der `config.yml` dieses Servers `enabled: false` stehen gelassen. Auf `true` ändern und neu starten.

---

## Konfiguration

Die vollständige `config.yml` mit allen Optionen:

```yaml
database:
  type: sqlite        # sqlite oder mysql
  mysql:
    host: localhost
    port: 3306
    database: teleportsuite
    username: root
    password: password
    pool-size: 10
  sqlite:
    file: teleportsuite.db

bungee:
  enabled: true
  server-name: "survival"   # Name dieses Servers in der BungeeCord config.yml

teleport:
  delay: 3                      # Wartezeit in Sekunden vor dem Teleport (0 = sofort)
  cooldown: 5                   # Cooldown in Sekunden zwischen Teleports
  warmup-cancel-on-move: true   # Teleport abbrechen wenn Spieler sich bewegt
  request-timeout: 60           # Sekunden bis eine TPA-Anfrage automatisch verfällt

homes:
  max-homes-default: 3
  max-homes-vip: 10
  max-homes-premium: 25

warps:
  allow-player-warps: false
  warp-permission-prefix: "teleportsuite.warp."

portals:
  check-interval: 5
  particle-effect: true

spawn:
  first-join-teleport: true
  death-respawn-to-spawn: false
```

---

## Commands

| Command | Beschreibung | Permission |
|---|---|---|
| `/tp <spieler>` | Teleportiere zu einem Spieler | `teleportsuite.tp` |
| `/tphere <spieler>` | Teleportiere einen Spieler zu dir | `teleportsuite.tphere` |
| `/tpa <spieler>` | Sende eine Teleportanfrage | `teleportsuite.tpa` |
| `/tpaccept` | Akzeptiere eine Teleportanfrage | `teleportsuite.tpaccept` |
| `/tpdeny` | Lehne eine Teleportanfrage ab | `teleportsuite.tpdeny` |
| `/back` | Teleportiere zur letzten Position | `teleportsuite.back` |
| `/deathback` | Teleportiere zum letzten Todesort | `teleportsuite.deathback` |
| `/sethome [name]` | Setze ein Home | `teleportsuite.sethome` |
| `/home [name]` | Teleportiere zu einem Home | `teleportsuite.home` |
| `/delhome <name>` | Lösche ein Home | `teleportsuite.delhome` |
| `/homes` | Liste alle Homes auf | `teleportsuite.home` |
| `/setwarp <name>` | Setze einen Warp | `teleportsuite.setwarp` |
| `/warp <name>` | Teleportiere zu einem Warp | `teleportsuite.warp` |
| `/delwarp <name>` | Lösche einen Warp | `teleportsuite.delwarp` |
| `/warps` | Liste alle Warps auf | `teleportsuite.warp` |
| `/setportal <name> <server/welt>` | Erstelle ein Portal | `teleportsuite.setportal` |
| `/delportal <name>` | Lösche ein Portal | `teleportsuite.delportal` |
| `/portals` | Liste alle Portale auf | `teleportsuite.portals` |
| `/setsavepoint [name]` | Setze einen Savepoint | `teleportsuite.savepoint` |
| `/savepoint [name]` | Teleportiere zu einem Savepoint | `teleportsuite.savepoint` |
| `/setspawn` | Setze den Spawn | `teleportsuite.setspawn` |
| `/spawn` | Teleportiere zum Spawn | `teleportsuite.spawn` |
| `/setfirstspawn` | Setze den FirstSpawn (für neue Spieler) | `teleportsuite.setfirstspawn` |
| `/tppos <x> <y> <z> [welt]` | Teleportiere zu Koordinaten | `teleportsuite.tppos` |
| `/tpall` | Teleportiere alle Spieler zu dir | `teleportsuite.tpall` |
| `/tpworld <welt>` | Teleportiere in eine Welt | `teleportsuite.tpworld` |
| `/entitytransport <id> <spieler/welt>` | Transportiere ein Entity | `teleportsuite.entitytransport` |

---

## Permissions

| Permission | Beschreibung |
|---|---|
| `teleportsuite.*` | Alle Rechte des Plugins |
| `teleportsuite.home.unlimited` | Unbegrenzte Homes (Standard: nur OPs) |
| `teleportsuite.nodelay` | Kein Teleport-Warmup |
| `teleportsuite.nocooldown` | Kein Teleport-Cooldown |
| `teleportsuite.admin` | Andere Spieler teleportieren (`/tp <von> <zu>`) |

Alle weiteren Einzelrechte entsprechen dem jeweiligen Command-Namen, z.B. `teleportsuite.tp`, `teleportsuite.home`, `teleportsuite.warp` usw.

---

## Häufige Probleme

**„Spieler XY nicht gefunden" beim serverübergreifenden `/tp`**
→ `bungee.enabled` in der `config.yml` steht auf `false`. Auf `true` setzen und neu starten.

**Spieler landet am Spawn statt beim Zielspieler**
→ `server-name` in der `config.yml` stimmt nicht mit dem Namen in der BungeeCord `config.yml` überein.

**TPA-Nachrichten kommen nicht an**
→ Das Plugin läuft nicht auf dem BungeeCord-Proxy. Die JAR muss auch in den `plugins`-Ordner des Proxys.

**Homes/Warps sind auf anderen Servern nicht verfügbar**
→ Alle Server müssen dieselbe MySQL-Datenbank verwenden. SQLite funktioniert nur lokal auf einem Server.

---

## Support

Probleme, Wünsche oder Fehlerberichte bitte als Issue auf GitHub melden. Füge wenn möglich den vollständigen Server-Log sowie deine `config.yml` bei.