# Claims: Grundlagen

Claims erstellen, vergrößern, unterteilen und aufgeben. Plus Werkzeuge, Grenzanzeige, Claim-Block-Ökonomie und automatischer Ablauf.

## Werkzeuge

| Werkzeug | Config-Key | Default | Zweck |
|---|---|---|---|
| Goldene Schaufel | `Claims.ModificationTool` | `GOLDEN_SHOVEL` | Claims erstellen, vergrößern, unterteilen |
| Stick | `Claims.InvestigationTool` | `STICK` | Claim am Zielblock anzeigen; Sneak+Klick zeigt alle in der Nähe |
| Bone | `Claims.SubdivisionVisualizationTool` | `BONE` | Klick zeigt die Subdivision am Block, Sneak+Klick alle nahen Subdivisions |

> **Tipp:** Jede Werkzeug-Interaktion prüft Rechte und Trust bei jedem Klick neu, nichts wird gecacht. Die Position ermittelt der Server serverseitig aus dem echten Zielblock.

## Claim erstellen (Zwei-Klick-Flow)

Modus `BASIC` (Default für jeden Spieler):

1. **Erster Klick** mit der Schaufel: Position wird gemerkt, ein Diamantblock-Marker erscheint (nur für dich sichtbar).
2. **Zweiter Klick** auf eine andere X/Z-Position: Der Server bildet das Rechteck, validiert es und speichert bei Erfolg. Die Grenze wird visualisiert.

Sneak+Rechtsklick bricht einen offenen ersten Klick ab. Der Marker verschwindet beim zweiten Klick, bei Abbruch, Moduswechsel, Weglegen der Schaufel, Teleport oder Logout.

> **Tipp:** Klickst du zuerst die Ecke eines bestehenden Claims an, startet automatisch eine **Größenänderung** statt einer Neuanlage. Der Marker ist dann ein Redstoneblock statt eines Diamantblocks.

Vor dem Erstellen prüft der Server automatisch: Welt claimbar (`Claims.WorldModes` nicht `Disabled`, nicht in einem globalen Welt-Claim), Mindestgröße, Überlappung, Claim-Limit und verfügbare Claim-Blocks.

## Geometrie

```yaml
Claims:
  MinimumWidth: 5          # minimale Seitenlänge eines Top-Level-Claims
  MinimumArea: 25          # minimale Fläche (Breite × Länge)
  # Höhe: Claims decken IMMER die komplette Weltbauhöhe ab. Die drei Keys
  # unten werden nur vom automatischen Kisten-Claim (unten) beachtet, von
  # Hand erstellte/vergrößerte Claims ignorieren sie.
  ExtendIntoGroundDistance: 5
  MaximumDepth: 0          # aktuell ohne Wirkung (GP-Kompatibilität)
  MinimumY: -2147483648    # nur Kisten-Claim; -2147483648 = keine Grenze
  MinimumYOverrides: {}    # pro Welt: worldName: minimumY
```

Ungültige Werte werden beim Laden abgesichert (`MinimumWidth < 1` → `5`, `MinimumArea` mindestens `MinimumWidth²`). Subdivisions sind von den Mindestgrößen ausgenommen und gehen ab 1×1.

> **Achtung:** `MinimumY` greift nur beim automatischen Kisten-Claim. Von Hand erstellte Claims reichen immer bis ganz oben und unten, auch im Nether.

## Vergrößern (Resize)

Kein eigener Command: Klickst du mit der Schaufel (Modus `BASIC`, `SUBDIVIDE` oder `ADMIN`) eine sichtbare Claim-Ecke an, wird das als Resize erkannt (Redstoneblock-Marker). Der zweite Klick zieht die Ecke, die gegenüberliegende bleibt fest. Das neue Rechteck wird voll validiert; im `BASIC`-Modus zusätzlich gegen verfügbare Claim-Blocks.

Wer fremde Ecken ziehen darf: Besitzer oder `MANAGE`-Trust; `SUBDIVIDE` nur Subdivisions; Admins mit `coreengineclaim.adminclaims` überall.

> **Tipp:** Jede Ecke wird als kleine L-Form gezeichnet (Eckblock plus je ein Armblock). Ein Klick auf den Eckblock oder einen Arm snapt auf die echte Ecke.

## Subdivisions

Unterbereiche innerhalb eines Top-Level-Claims mit eigener Trust-Liste (Zimmer, Shop, Team-Plot). Commands gehören zu `coreengineclaim.claims` (Default `true`).

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Subdivide-Modus | `/claim subdivide` (`sc`) | `coreengineclaim.claim.subdivide` | true | Schaufel in den Subdivisions-Modus; erneut = zurück zu `BASIC` |
| Vererbung schalten | `/claim restrictsubclaim` (`rsc`) | `coreengineclaim.claim.restrictsubclaim` | true | Trust-Vererbung vom Elternclaim an/aus (in der Subdivision stehend) |

Im `SUBDIVIDE`-Modus derselbe Zwei-Klick-Flow; der erste Klick bestimmt den Elternclaim. Die Subdivision muss ganz im Elternclaim liegen und darf keine Geschwister überlappen. Sie erbt den Besitzer, kostet keine eigenen Claim-Blocks und folgt dem Elternclaim bei Transfer und Löschung.

`/claim restrictsubclaim`: **Aus** (Standard) = fehlender Trust fällt auf den Elternclaim zurück; **An** = nur die eigene Trust-Liste zählt.

```yaml
Claims:
  MaximumSubdivisionsPerClaim: 100   # 0 oder negativ = unbegrenzt
```

## Stick: Claim inspizieren

| Aktion | Ergebnis |
|---|---|
| Rechtsklick auf Block | Claim an dieser Stelle oder „Wilderness" |
| Rechtsklick in die Luft | Prüft bis 30 Blöcke in Blickrichtung, sonst die eigene Position |
| Sneak+Rechtsklick (Stick) | Alle Claims im Umkreis `Claims.NearbyClaimRadius` (Default 30) |
| Rechtsklick (Bone) | Subdivision an dieser Stelle (Block oder bis 30 Blöcke in Blickrichtung), sonst Hinweis |
| Sneak+Rechtsklick (Bone) | Alle Subdivisions im Umkreis `Claims.SubdivisionNearbyRadius` (Default 200) |

Ein Klick auf Wildnis bricht eine laufende Anzeige sofort ab. Cooldowns: `Claims.StickCooldownMillis` (500), `Claims.SubdivisionVisualizationCooldownMillis` (200).

Die Info-Actionbar zeigt je nach Recht mehr:

| Weitere Permissions | Default | Zusatzinfo |
|---|---|---|
| `coreengineclaim.seeclaimsize` | false | Exakte Breite/Länge/Fläche |
| `coreengineclaim.seeinactivity` | false | Tage seit letzter Aktivität des Besitzers |
| `coreengineclaim.seeblockhistory` | false | CoreProtect-Blockhistorie an der Stelle (falls installiert) |
| `coreengineclaim.visualizenearbyclaims` | true | Sneak+Stick zeigt Claims im Umkreis |
| `coreengineclaim.visualizenearbysubdivisions` | true | Sneak+Bone zeigt Subdivisions im Umkreis |

## Grenzanzeige

Reine Fake-Blöcke, nur für dich sichtbar, kein Client-Mod nötig.

| Claim-Art | Ecke | Kante |
|---|---|---|
| Normale Claims | Glowstone | Goldblock |
| Subdivisions | Eisenblock | Weiße Wolle |
| Admin-Claims | Glowstone | Kürbis |

```yaml
Claims:
  VisualizationDurationSeconds: 30       # danach automatischer Revert
  VisualizationAntiCheatCompatMode: false
```

Endet sofort bei Logout, Kick, Weltwechsel oder wenn eine neue Anzeige sie ersetzt. Ecken als L-Form, Kanten als gepunktete Marker alle 6 Blöcke.

## Auto-Claim für neue Spieler

Platziert ein Spieler zum ersten Mal eine Kiste, entsteht automatisch ein Claim darum.

```yaml
Claims:
  AutomaticNewPlayerClaimsRadius: 4   # negativ = deaktiviert
```

Passiert genau einmal pro Account (wird nie zurückgesetzt), nur in Welten `Survival`/`SurvivalRequiringClaims`, und nur wenn die Stelle noch frei ist. Das Quadrat bildet sich exakt um den platzierten Block. Fehlen Claim-Blocks, wird die Differenz dem Bonus-Pool gutgeschrieben, der Auto-Claim schlägt daher praktisch nie fehl.

> **Tipp:** Das Claim-Handbuch lässt sich jederzeit per `/claim book` aus einem gehaltenen Buch erzeugen.

## Claim-Blocks-Ökonomie

Jeder Claim kostet dauerhaft seine Fläche. Zwei Pools pro Spieler: **Accrued** (erspielt, gedeckelt) und **Bonus** (gekauft/Admin, ohne Grenze).

```yaml
Claims:
  InitialBlocks: 400
  BlocksAccruedPerHour: 100
  MaxAccruedBlocks: 80000
  AccrualIntervalMinutes: 5
  AbandonReturnRatio: 1.0          # < 1.0 zieht die Differenz als Strafe ab
  InitialBlocksByGroup: {}         # z. B. vip: 800
  AccrualPerHourByGroup: {}        # z. B. vip: 150
Economy:
  ClaimBlocksPurchaseCost: 0.0     # <= 0 deaktiviert Kaufen
  ClaimBlocksSellValue: 0.0        # <= 0 deaktiviert Verkaufen
```

Der Zuwachs wird alle `AccrualIntervalMinutes` und bei jedem Login aus der Lebenszeit-Spielzeit neu berechnet und sinkt nie.

**Rang-Boni** (höchster Wert gewinnt):

| Weitere Permissions | Default | Beschreibung |
|---|---|---|
| `coreengineclaim.initialblocks.<Zahl>` | false | Start-Blöcke direkt, z. B. `.800` |
| `coreengineclaim.blocksperhour.<Zahl>` | false | Zuwachs/Stunde direkt, z. B. `.150` |
| `coreengineclaim.rank.<key>` | false | Stufe aus `InitialBlocksByGroup`/`AccrualPerHourByGroup` |

**Kaufen/Verkaufen** (Kinder von `coreengineclaim.buysellclaimblocks`, Default true):

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Kaufen | `/claim blocks buy <amount>` (`buy`, `buyblocks`) | `coreengineclaim.claim.blocks.buy` | true | Bonus-Blocks kaufen |
| Verkaufen | `/claim blocks sell <amount>` (`sell`, `sellblocks`) | `coreengineclaim.claim.blocks.sell` | true | Bonus-Blocks verkaufen |

Ablauf: erst Geld buchen, dann Blocks anpassen; scheitert Schritt zwei, wird das Geld zurückgebucht. Verkaufen kann die Gesamtbilanz nicht unter den effektiven Startwert des Spielers drücken.

**Admin** (Kinder von `coreengineclaim.adjustclaimblocks`):

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Anpassen | `/claim admin blocks adjust <player> <delta>` | `coreengineclaim.claim.admin.blocks.*` | false | Bonus-Blocks eines Spielers |
| Alle online | `/claim admin blocks adjustall <delta>` | `coreengineclaim.claim.admin.blocks.*` | false | Bonus-Blocks aller Online-Spieler |
| Accrued setzen | `/claim admin blocks setaccrued <player> <amount>` | `coreengineclaim.claim.admin.blocks.*` | false | Erspielte Blocks exakt setzen |

## Verwalten & aufgeben

| Command | Syntax | Permission | Default | Beschreibung |
|---|---|---|---|---|
| Eigene Claims | `/claim list` (`claims`) | `coreengineclaim.claim.list` | true | Paginierte Übersicht |
| Aufgeben | `/claim abandon` (`unclaim`) | `coreengineclaim.claim.abandon` | true | Claim/Subdivision, in der man steht |
| Alle aufgeben | `/claim abandonall` (`unclaimall`) | `coreengineclaim.claim.abandonall` | true | Alle eigenen Top-Level-Claims |
| Handbuch | `/claim book` (`claimbook`) | `coreengineclaim.claim.book` | true | Gehaltenes Buch ins Handbuch wandeln |
| Aus Claim fliehen | `/claim trapped` | `coreengineclaim.claim.trapped` | true | Teleport zur nächsten freien, sicheren Stelle |

`/claim abandon` fragt zur Bestätigung `abandon` ab; in einer Subdivision betrifft es nur diese. `/claim abandonall` verlangt danach den exakten eigenen Namen. Bei `AbandonReturnRatio < 1.0` wird pro Claim die Strafe vom Accrued-Pool abgezogen.

`/claim trapped`: nur in fremdem Claim ohne `ACCESS`-Trust und ohne Combat-Tag. Nach 60 s Wartezeit (bricht bei Bewegung ab) Teleport zur nächsten freien Stelle, danach 300 s Cooldown.

Claims lassen sich auch im Web-Interface (`/cweb`, Kategorie „Claims") ansehen und aufgeben.

## Claim-Ablauf

```yaml
Claims:
  ChestClaimDays: 7      # Tier 1: nur Auto-Claims, MIT Rückerstattung
  AllClaimDays: 0        # Tier 2: alle Top-Level-Claims, OHNE Rückerstattung; 0 = aus
Advanced:
  ClaimExpirationCheckRate: 60   # Minuten; <= 0 = Task aus
```

Inaktive Spieler: Tier 1 gibt die Fläche dem Accrued-Pool zurück, Tier 2 nicht. Trifft Tier 1, wird Tier 2 im selben Lauf übersprungen. Admin-Claims und Subdivisions werden nie direkt geprüft (Subdivisions gehen mit dem Elternclaim). In `Creative`-Welten löst das Löschen zusätzlich Restore-Nature aus.

> **Hinweis:** `Claims.UnusedClaimDays` ist ein reservierter Kompatibilitäts-Key ohne Funktion. Nutze `AllClaimDays` bzw. `ChestClaimDays`.

## Komplette Beispiel-Config

```yaml
Claims:
  InvestigationTool: STICK
  ModificationTool: GOLDEN_SHOVEL
  SubdivisionVisualizationTool: BONE
  StickCooldownMillis: 500
  NearbyClaimRadius: 30
  SubdivisionVisualizationCooldownMillis: 200
  SubdivisionNearbyRadius: 200
  MinimumWidth: 5
  MinimumArea: 25
  MinimumYOverrides:
    world_nether: 127
  AutomaticNewPlayerClaimsRadius: 4
  InitialBlocks: 400
  BlocksAccruedPerHour: 100
  MaxAccruedBlocks: 80000
  AbandonReturnRatio: 1.0
  InitialBlocksByGroup:
    vip: 800
    premium: 1200
  AccrualPerHourByGroup:
    vip: 150
    premium: 200
  ChestClaimDays: 7
  AllClaimDays: 0
  MaximumNumberOfClaimsPerPlayer: 0
  MaximumSubdivisionsPerClaim: 100
  VisualizationDurationSeconds: 30
Economy:
  ClaimBlocksPurchaseCost: 0.0
  ClaimBlocksSellValue: 0.0
Advanced:
  ClaimExpirationCheckRate: 60
```
