# PvP & Sicherheit

Combat-Tag, Anti-Logout, Anti-Spawn-Camp, Anti-Stash, Pet-Schutz, Death-Loot-Schutz, Belagerungen und das Ignore-/Softmute-System.

## PvP-Regeln

```yaml
PvP:
  Enabled: true                 # globaler Hauptschalter
  RulesEnabledInWorld:          # entscheidet PRO WELT, ob PvP stattfindet
    "*": false                  # Default: PvP ueberall aus, Welten explizit freischalten
  CombatTimeoutSeconds: 15      # so lange gilt man nach dem letzten Treffer als im Kampf
  BlockedCommands: [home, spawn, tpa, tpaccept, tpahere, warp, back, tp, teleport, rtp]
  AllowCombatItemDrop: false    # Items werfen im Kampf
  ProtectPlayersInLandClaims:   # Opfer-Standort entscheidet
    PvPWorld: false
    NonPvPWorld: true
  ProtectPlayersInAdminLandClaims: true
  ProtectPlayersInSubdivisions: false
```

Ob PvP in einer Welt läuft, entscheidet ausschließlich `RulesEnabledInWorld`. In gesperrten Welten wird der Schaden storniert; in erlaubten Welten werden beide Beteiligte kampfmarkiert (auch bei Projektilen).

| Weitere Permissions | Default | Beschreibung |
|---|---|---|
| `coreengineclaim.nopvpimmunity` | false | Verzichtet auf PvP-Schutz in Nicht-PvP-Welten UND auf die Frisch-Spawn-Unverwundbarkeit |
| `coreengineclaim.siegeimmune` | false | Kann nicht belagert werden |

> **Achtung:** Ohne mindestens eine `true`-Welt in `RulesEnabledInWorld` greift das ganze Kampfsystem (Anti-Logout, Anti-Stash, Command-Sperre) nie, denn dafür muss erst ein PvP-Treffer durchgehen.

> **Tipp:** Der Claim-PvP-Schutz kennt zwei bewusste Ausnahmen: Ein bereits kampfmarkiertes Opfer bleibt angreifbar (kein Flucht-Claim mitten im Fight), und während einer Belagerung zwischen den Beteiligten ist er aufgehoben. `AllowPearlsToPvpZones` ist ein reservierter Key ohne Funktion, Enderperlen regelt `Claims.EnderPearlsRequireAccessTrust`.

**Combat-Tag:** Jeder Treffer verlängert die Markierung beider Spieler. Rote Boss-Leiste mit Countdown, verfällt automatisch, wird beim Tod entfernt. Beim Logout bleibt der Status bestehen (für die Anti-Logout-Strafe) und die Leiste kommt beim Rejoin wieder.

**Command-Sperre im Kampf:** Das erste Wort jedes Commands wird gegen `BlockedCommands` geprüft; zusätzlich werden GUI-Teleports abgefangen. Bett, Endportal und Weltwechsel bleiben bewusst frei.

## Anti-Logout

`PvP.PunishLogout: true` (Default): Loggt ein kampfmarkierter Spieler aus, wird sein komplettes Inventar am Standort gedroppt (mit Death-Loot-Schutz), die Gesundheit auf 0 gesetzt und die Aktion ins Audit-Log geschrieben.

## Anti-Spawn-Camp

`PvP.ProtectFreshSpawns: true` (Default): Unverwundbarkeit für `FreshSpawnDurationSeconds` (10 s) bei jedem Respawn und beim allerersten Login, mit grüner Boss-Leiste.

Der Schutz endet sofort, wenn der Geschützte selbst angreift oder ein Item aufhebt (der Pickup wird dabei noch blockiert). Schadenstränke prallen ab, ohne den Schutz zu beenden.

## Anti-Stash

Kampfmarkierte Spieler können keine Items werfen (`AllowCombatItemDrop: false`) und keine fremden Inventare öffnen (Truhen, Öfen, Endertruhen, auch CoreEngine-Menüs). Eigenes Inventar und Crafting bleiben frei.

## Pet-Schutz

Gilt für gezähmte Wölfe, Katzen, Papageien, Pferde-artige, Axolotl, Füchse und Allays.

| Aktion | Regel |
|---|---|
| Schaden | Nur der Besitzer trifft (auch Projektile); Umweltschaden bleibt |
| Füttern/Locken | Nur der Besitzer |
| Anleinen | Nur der Besitzer |
| Reiten | Besitzer immer; Fremde nur mit Access-Trust in einem Claim des Besitzers an der Position |
| Erneut zähmen | Abgelehnt, wenn das Tier schon jemandem gehört |

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Pet übergeben | `/givepet` | (kein Recht geprüft) | true | Auswahlmodus: nächster Rechtsklick aufs eigene Tier, dann Namenseingabe + Bestätigung |

> **Tipp:** `/givepet` prüft die Besitzerschaft dreifach (Auswahl, Eingabe, Bestätigung) und lässt sich per `Pets.EnableGivePetCommand: false` abschalten.

## Death-Loot-Schutz

Alle Todes-Drops sind `PvP.LootProtectionSeconds` (180 s) lang nur vom Besitzer aufhebbar; `<= 0` deaktiviert die Markierung.

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Eigene Drops freigeben | `/claim unlockdrops` | `coreengineclaim.claim.unlockdrops` | true | Entsperrt die eigenen geschützten Drops |
| Fremde Drops freigeben | `/claim admin unlockdrops <player>` | `coreengineclaim.claim.admin.unlockdrops` | false | Entsperrt fremde Drops server-weit |

## Sieges (Belagerungen)

Optional, Default aus.

```yaml
Sieges:
  Enabled: false
  MaxDurationSeconds: 1800
  Worlds: []        # leer = alle Welten erlaubt
```

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Belagerung starten | `/claim siege <player>` | `coreengineclaim.claim.siege` | true | Belagert einen Spieler in dessen eigenem Claim |

Startbedingungen: System an, Welt erlaubt und PvP-Welt, Ziel online, nicht `siegeimmune`, keiner der beiden bereits in einer Belagerung, beide stehen im Claim des Ziels. Beim Start werden beide kampfmarkiert; der Angreifer darf im belagerten Claim bauen und abbauen.

Ende durch: Tod eines Teilnehmers, Verteidiger verlässt seinen Claim, Logout (löst die Anti-Logout-Strafe aus) oder Zeitablauf.

## Ignore & Softmute

Unabhängig von PvP.

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Ignorieren | `/ignoreplayer <player>` (`/ignore`) | (kein Recht) | true | Blendet den Chat eines Spielers aus |
| Aufheben | `/unignoreplayer <player>` (`/unignore`) | (kein Recht) | true | Beendet das Ignorieren |
| Liste | `/ignoredplayerlist` (`/ignorelist`) | (kein Recht) | true | Zeigt die eigene Ignore-Liste |
| Softmute | `/softmute <player>` | `coreengineclaim.softmute` | false | Nur noch für andere Softgemutete sichtbar |
| Trennen | `/separate <p1> <p2>` | `coreengineclaim.admin` | false | Erzwingt gegenseitiges Ignorieren |

| Weitere Permissions | Default | Beschreibung |
|---|---|---|
| `coreengineclaim.notignorable` | false | Kann weder ignoriert noch softgemutet werden |
| `coreengineclaim.eavesdrop` | false | Liest private Nachrichten mit (`/msg`, `/tell`, ...) |
| `coreengineclaim.eavesdropsigns` | false | Bekommt jeden neuen Schildtext gemeldet |

> **Hinweis:** `Spam.Enabled` ist ein reservierter Platzhalter ohne Funktion (CoreEngine übernimmt die Chat-Moderation). Ein SmartBan/Anti-Alt-System existiert nicht; dafür ein separates Plugin nutzen.

## Komplette Beispiel-Config

```yaml
PvP:
  Enabled: true
  RulesEnabledInWorld:
    "*": false
    pvp_world: true
  ProtectFreshSpawns: true
  FreshSpawnDurationSeconds: 10
  PunishLogout: true
  CombatTimeoutSeconds: 15
  AllowCombatItemDrop: false
  BlockedCommands: [home, spawn, tpa, tpaccept, tpahere, warp, back, tp, teleport, rtp]
  ProtectPlayersInLandClaims:
    PvPWorld: false
    NonPvPWorld: true
  ProtectPlayersInAdminLandClaims: true
  ProtectPlayersInSubdivisions: false
  LootProtectionSeconds: 180

Sieges:
  Enabled: true
  MaxDurationSeconds: 1800
  Worlds:
    - pvp_world

Pets:
  EnableGivePetCommand: true
```
