# 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).

Das PvP-Verbot (Welt ohne PvP-Regeln oder schützender Claim) gilt für alle Angriffswege: Nahkampf, Pfeile, Wurf- und Verweiltränke mit schädlichem Effekt (Gift, Schaden, Schwäche, Langsamkeit), TNT, End-Kristalle, gezähmte Wölfe und die Angel. Bei Tränken wird der geschützte Spieler aus der Wirkung entfernt, die Tränke trifft alle anderen normal.

| Weitere Permissions | Default | Beschreibung |
|---|---|---|
| `mira.claim.nopvpimmunity` | op | Verzichtet auf PvP-Schutz in Nicht-PvP-Welten UND auf die Frisch-Spawn-Unverwundbarkeit |
| `mira.claim.siegeimmune` | op | 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. Außerdem kann der Besitzer ihn per Claim-Flag `pvp_override` für seinen Claim abschalten (siehe Trust & Schutz, Claim-Flags). `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) nach jedem Respawn, mit grüner Boss-Leiste. Der allererste Login ist Sache des [Join-Schutzes](joinprotection.md); solange der noch läuft und alle Schäden abdeckt (`mode: all`), legt sich keine zweite Leiste darüber.

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 Mira-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), Ausnahmen siehe unten; 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 |

Ein Nicht-Besitzer darf ein gezähmtes Tier verletzen, wenn es ihn gerade angreift, wenn Besitzer und Angreifer in derselben Belagerung sind, oder in PvP-Welten außerhalb schützender Claims (dieselben Regeln wie für Spieler). Sonst bleibt das Tier geschützt.

| 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. Sammelt der Besitzer seine Drops wieder ein oder läuft die Zeit ab, sind die Items wieder normale Items (stapeln, weitergebbar). Trichter sammeln geschützte Drops nicht ein.

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Eigene Drops freigeben | `/claim unlockdrops` | `mira.claim.claim.unlockdrops` | true | Entsperrt die eigenen geschützten Drops |
| Fremde Drops freigeben | `/claim admin unlockdrops <player>` | `mira.claim.claim.admin.unlockdrops` | op | 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>` | `mira.claim.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>` | `mira.claim.softmute` | op | Nur noch für andere Softgemutete sichtbar |
| Trennen | `/separate <p1> <p2>` | `mira.claim.admin` | op | Erzwingt gegenseitiges Ignorieren |

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

> **Hinweis:** `Spam.Enabled` ist ein reservierter Platzhalter ohne Funktion (Mira ü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
```
