# Config Reference (Claim)

All configuration keys from `plugins/CoreEngine/modules/claim.yml` of CoreEngineClaim. This plugin is GriefPrevention-compatible and uses largely the same configuration keys.

Reload: `/claim admin reload` or a server restart.

---

## Storage

Backend selection for storing claims.

```yaml
Storage:
  # Backend type: flatfile or sqlite. Switching from flatfile to sqlite
  # automatically imports the existing claim data on first start; the
  # migration can also be triggered manually at any time via
  # /claim admin migrate.
  Backend: sqlite
```

---

## Claims (Main Section)

### World Modes

```yaml
Claims:
  # Claim mode per world. The placeholder "*" is the default for all
  # worlds. Possible modes: Survival (normal), Creative (stricter on
  # claim expiration), SurvivalRequiringClaims (building only allowed in
  # claims), PvP (behaves like Survival), Disabled (no claiming).
  WorldModes:
    "*": Survival
  # List of worlds that are treated entirely as admin land. Players
  # cannot create new top-level claims here; subdivisions are still
  # possible. Managed via /claim admin world.
  GlobalWorldClaims: []
```

### Protection Flags

```yaml
Claims:
  # Blocks mob spawner eggs outside claims
  PreventGlobalMonsterEggs: true
  # Blocks theft from containers and attacks on animals
  PreventTheft: true
  # Protects passive mobs (animals) inside claims
  ProtectCreatures: true
  # Requires access trust for buttons and levers
  PreventButtonsSwitches: true
  # Blocks ender pearl teleportation into foreign claims without access
  # trust (the pearl is returned)
  EnderPearlsRequireAccessTrust: true
  # Requires build trust to ring bells (raid triggers)
  RaidTriggersRequireBuildTrust: true
  # Protects horses from foreign access
  ProtectHorses: true
  # Protects donkeys from foreign access
  ProtectDonkeys: true
  # Protects llamas from foreign access
  ProtectLlamas: true
  # If true, pets are also protected in the wilderness
  ProtectPetsOutsideLandClaims: false
```

> **Note:** Doors, trapdoors and fence gates always require access trust inside claims. There is no global config toggle for this; to open them up for everyone instead, use the "Public Access" claim flag in the claim GUI.

### Claim Block Economy (Basics)

```yaml
Claims:
  # Starting allowance (claim blocks) for new players
  InitialBlocks: 400
  # Claim blocks per play hour (playtime)
  BlocksAccruedPerHour: 100
  # Cap on accrued blocks (bonus blocks not included)
  MaxAccruedBlocks: 80000
  # Hours of inactivity before block accrual pauses (0 = disabled)
  AccruedIdleThresholdHours: 0
  # Percentage of the normal rate during idle hours (0 = none)
  AccruedIdleAccrualPercent: 0
  # Fraction of spent blocks refunded on /claim abandon (1.0 = full
  # refund)
  AbandonReturnRatio: 1.0
```

### Claim Block Economy (Rank Tiers)

```yaml
Claims:
  # Named tiers for starting blocks, assigned via the
  # coreengineclaim.rank.<key> permission (highest match wins). The
  # direct permission coreengineclaim.initialblocks.<number> takes
  # precedence. Example:
  # InitialBlocksByGroup:
  #   vip: 800

  # Named tiers for the hourly block accrual, assigned via
  # coreengineclaim.rank.<key> (highest match wins). The direct
  # permission coreengineclaim.blocksperhour.<number> takes precedence.
  # Example:
  # AccrualPerHourByGroup:
  #   premium: 200
```

### Tool & Interaction Tuning

```yaml
Claims:
  # Minimum time (ms) between two stick clicks by the same player.
  # Prevents spam. 0 = disabled.
  StickCooldownMillis: 500
  # Radius (blocks) for the sneak+stick "show all nearby claims" display
  NearbyClaimRadius: 30
  # Minimum time (ms) between two sneak+bone clicks
  SubdivisionVisualizationCooldownMillis: 200
  # Radius (blocks) for the sneak+bone "show nearby subdivisions" display
  SubdivisionNearbyRadius: 200
```

### Auto-Claim on Chest Placement

```yaml
Claims:
  # Radius (blocks) around a newly placed chest of new players for the
  # auto-claim
  AutomaticNewPlayerClaimsRadius: 4
  # Minimum radius override
  AutomaticNewPlayerClaimsRadiusMinimum: 0
```

### Claim Geometry

```yaml
Claims:
  # For GriefPrevention compatibility only, no function of its own;
  # manually created claims always span the full world height
  ExtendIntoGroundDistance: 5
  # Minimum side length (prevents tiny claims)
  MinimumWidth: 5
  # Minimum total area in blocks (width times length)
  MinimumArea: 25
  # Lowest Y coordinate for automatically created claims. The default (a
  # very large negative number) means no restriction. Example: 0
  # prevents auto-claims below sea level.
  MinimumY: -2147483648
  # Per-world overrides for MinimumY. Example: world_nether: 127
  MinimumYOverrides: {}
  # For compatibility only, no function of its own (see
  # ExtendIntoGroundDistance)
  MaximumDepth: 0
```

### Tools

```yaml
Claims:
  # Material for the investigation tool
  InvestigationTool: STICK
  # Material for claim creation/modification
  ModificationTool: GOLDEN_SHOVEL
  # Material for the subdivision overview
  SubdivisionVisualizationTool: BONE
```

### Claim Expiration

```yaml
Claims:
  # Auto-chest claims are deleted after N days of inactivity
  ChestClaimDays: 7
  # Reserved, currently no function; AllClaimDays/ChestClaimDays control
  # expiration
  UnusedClaimDays: 14
  # All claims are deleted after N days of inactivity (0 = disabled)
  AllClaimDays: 0
  # Maximum claims per player (0 = unlimited)
  MaximumNumberOfClaimsPerPlayer: 0
  # Maximum subdivisions per top-level claim (0 = unlimited)
  MaximumSubdivisionsPerClaim: 100
```

### Creative Worlds

```yaml
Claims:
  # Reserved, currently no function. The actual creative behavior
  # (renaturation on claim expiration) depends solely on
  # Claims.WorldModes: <world>: Creative
  CreativeRulesWorlds: []
```

### Pistons & Portals

```yaml
Claims:
  # Piston rules: CLAIMS_ONLY (pistons and all moved blocks must be in
  # the same claim, or everything in the wilderness), EVERYWHERE_SIMPLE
  # (simplified border check), EVERYWHERE (only claim borders
  # protected), IGNORED (all piston checks off, including
  # Wilderness.DisablePistons)
  PistonMovement: CLAIMS_ONLY
  # Blocks portals created by mobs or machines
  PreventNonPlayerCreatedPortals: true
  # Allows ravagers to destroy blocks in claims
  RavagersBreakBlocks: false
  # Warns players building in the wilderness
  WarnWhenBuildingOutsideClaims: true
  # Prevents wildfire from spreading into claims
  ProtectFireSpreadingIntoClaims: true
```

### Visualization

```yaml
Claims:
  # Disables particle optimizations for anti-cheat plugins
  VisualizationAntiCheatCompatMode: false
  # Seconds the claim border stays visible
  VisualizationDurationSeconds: 30
```

---

## GriefPrevention

GriefPrevention compatibility settings.

```yaml
GriefPrevention:
  Database:
    # If Storage.Backend = sqlite, uses CoreEngine's central database
    UseCoreEngine: true
```

---

## PvP

PvP combat rules and protections.

```yaml
PvP:
  # Whether PvP is active at all
  Enabled: true
  # Enables PvP per world. Placeholder "*" = default (false = PvP off)
  RulesEnabledInWorld:
    "*": false
  # Newly spawned players are briefly invincible
  ProtectFreshSpawns: true
  # Seconds of post-spawn immunity
  FreshSpawnDurationSeconds: 10
  # Kills players who log out during combat
  PunishLogout: true
  # Seconds until combat status expires after the last hit
  CombatTimeoutSeconds: 15
  # Whether players can drop items during combat
  AllowCombatItemDrop: false
  # Commands blocked during combat
  BlockedCommands: [home, spawn, tpa, tpaccept, tpahere, warp, back, tp, teleport, rtp]
  ProtectPlayersInLandClaims:
    # Protect players in land claims in PvP worlds?
    PvPWorld: false
    # Protect players in land claims in non-PvP worlds?
    NonPvPWorld: true
  # Protect players in admin claims
  ProtectPlayersInAdminLandClaims: true
  # Protect players in subdivisions
  ProtectPlayersInSubdivisions: false
  AllowLavaNearPlayers:
    # Allow lava buckets near players in PvP worlds?
    PvPWorld: false
    # Allow lava buckets near players in non-PvP worlds?
    NonPvPWorld: false
  AllowFireNearPlayers:
    # Allow flint and steel near players in PvP worlds?
    PvPWorld: false
    # Allow flint and steel near players in non-PvP worlds?
    NonPvPWorld: false
  # Reserved, currently no function. Ender pearl protection runs solely
  # via Claims.EnderPearlsRequireAccessTrust
  AllowPearlsToPvpZones: false
  # Radius (blocks) in which lava buckets and flint and steel are
  # blocked near players
  LavaBucketRadius: 5
  # Seconds during which only the player themself can pick up their own
  # drops
  LootProtectionSeconds: 180
```

---

## Pets

Pet management.

```yaml
Pets:
  # Allows the /givepet command
  EnableGivePetCommand: true
```

---

## Mobs

Mob behavior in the wilderness and in claims.

```yaml
Mobs:
  # Endermen can move blocks (affects all areas)
  EndermenMoveBlocks: false
  # Silverfish can destroy stone blocks
  SilverfishBreakBlocks: false
  # Mobs/animals can trample crops
  CreaturesTrampleCrops: false
  # Rabbits can eat crops
  RabbitsEatCrops: true
  # Zombies can break down wooden doors
  ZombiesBreakDoors: false
```

---

## Fire

Fire spread and destruction.

```yaml
Fire:
  # Fire spreads
  Spreads: false
  # Fire destroys blocks
  Destroys: false
```

---

## Explosions

Explosions from creepers, TNT, beds, etc.

```yaml
Explosions:
  # Blocks creeper/TNT craters above sea level
  BlockSurfaceExplosions: true
  # Allows bed explosions in the wilderness (Nether/End)
  BedExplosionsAllowed: false
  # Allows respawn anchor explosions in the wilderness (Overworld)
  RespawnAnchorExplosionsAllowed: false
```

---

## Wilderness

Wilderness protection rules.

```yaml
Wilderness:
  # Prevents sky platform trees (griefing in the wilderness)
  LimitSkyTrees: true
  # Prevents saplings from growing in the wilderness
  LimitTreeGrowth: false
  # Sets redstone power outside claims to 0
  DisableRedstone: true
  # Cancels pistons outside claims (PistonMovement: IGNORED also covers
  # this)
  DisablePistons: true
  # Sea level override: -1 = uses the regular world sea level,
  # >= 0 = fixed value
  SeaLevelOverride: -1
```

---

## Sieges

Siege system (optional).

```yaml
Sieges:
  # Enables the siege system
  Enabled: false
  # Maximum duration (seconds) of a siege
  MaxDurationSeconds: 1800
  # World allowlist for sieges (empty = all worlds; PvP rules must be
  # active in the respective world)
  Worlds: []
```

---

## Spam

Anti-spam and login controls.

```yaml
Spam:
  # Reserved, no function
  Enabled: false
  # Reserved, no function
  LoginCooldownSeconds: 60
  # Reserved, no function
  WhisperSlashCommands: [tell, pm, msg, r, whisper]
  # Reserved, no function
  ChatSlashCommands: [me, tell, pm, msg, r, whisper]
  # Reserved, no function
  BanOffenders: true
  # Reserved, no function
  AllowedIpAddresses: []
```

> **Note:** The entire spam section currently has **no effect** - CoreEngine handles chat moderation (mutes, spam protection, login cooldowns). Soft-mute/ignore filtering (see `/softmute`, `/ignoreplayer` on the *PvP and Security* wiki page) runs independently of this and is always active.

---

## Economy

Purchase/sell prices for claim blocks and team plots.

```yaml
Economy:
  # Price per claim block when buying (0 = disabled)
  ClaimBlocksPurchaseCost: 0.0
  # Payout per claim block when selling (0 = disabled)
  ClaimBlocksSellValue: 0.0
  # Default price for /claim team buy (paid from the team treasury).
  # Individual plots can be overridden via /claim team price.
  # Rental plots charge this amount per rent period.
  TeamPlotPurchaseCost: 100000.0
  # Price per TEAM claim block (/claim team blocks buy), 0 disables buying.
  # The team pool funds converted team claims (/claim convert).
  TeamClaimBlocksCostPerBlock: 10.0

TeamPlots:
  # Real-time days between two rent payments of a rental plot.
  RentPeriodDays: 30
  # Grace period after a failed payment before the plot is released.
  RentGraceDays: 7
```

---

## Advanced

Advanced settings for performance and diagnostics.

```yaml
Advanced:
  # Admin warning when a player owns more than N claims (0 = off)
  ClaimsPerPlayerWarningCount: 0
  # Automatically corrects negative block balances on load
  fixNegativeClaimblockAmounts: true
  # Minutes between checks for expired claims
  ClaimExpirationCheckRate: 60
  # Days for how long offline player profiles are cached
  OfflinePlayer_cache_days: 90
```

---

## Logging

Audit log for claim actions.

```yaml
Logging:
  # Writes all claim actions to the audit log
  AuditLog: true
  # Name of the log file in the plugin data folder
  LogToFile: claim-audit.log
  # Rotates the log file daily
  RotateDaily: true
  # Size limit per log file (0 = no limit). When exceeded, rotates to a
  # new file.
  MaxFileSizeMb: 10
```

---

## Complete Example Config

The complete `config.yml` with all sections. The example blocks that were previously commented out (`WorldModes`, `GlobalWorldClaims`, `InitialBlocksByGroup`, `AccrualPerHourByGroup`, `MinimumYOverrides`, `Sieges.Worlds`) are here filled in active with example values so the structure can be understood directly. All other values correspond to the shipped default state.

```yaml
# =====================================================================
# CoreEngineClaim: config.yml
# Default claim protection settings.
# Reload: restart the server or run /claim admin reload.
# =====================================================================

Storage:
  # 'flatfile' = YAML files under plugins/CoreEngine/modules/coreClaim/data/
  # 'sqlite'   = CoreEngine's shared SQLite pool (default; requires CoreEngine).
  # When switched from flatfile to sqlite, claim data is auto-imported on first start.
  Backend: sqlite

Claims:
  # Per-world claim mode. Key = world name, or "*" for a wildcard default.
  # Modes: Survival, Creative, SurvivalRequiringClaims, PvP, Disabled.
  WorldModes:
    "*": Survival
    world_creative: Creative
    world_hardcore: SurvivalRequiringClaims
    pvp_world: PvP
    world_minigames: Disabled

  # Worlds listed here are treated as fully claimed admin worlds.
  # Normal claims are still indexed normally; subdivisions can be created inside
  # these worlds later without storing a massive full-world claim.
  GlobalWorldClaims:
    - shopping_district

  # ── Protection flags ────────────────────────────────────────────────
  PreventGlobalMonsterEggs: true         # block mob-spawner eggs outside claims
  PreventTheft: true                     # stops container theft and animal attacks
  ProtectCreatures: true                 # protect passive mobs inside claims
  PreventButtonsSwitches: true           # require access-trust for buttons/levers

  # NOTE: Doors, trapdoors and fence gates always require ACCESS trust inside
  # claims. Use the per-claim "Public Access" flag (claim GUI) to open them
  # up for everyone instead of a global config toggle.

  EnderPearlsRequireAccessTrust: true    # deny ender-pearl teleport into claim without access-trust
  RaidTriggersRequireBuildTrust: true    # prevent raid-trigger blocks (bells) from being rung
  ProtectHorses: true
  ProtectDonkeys: true
  ProtectLlamas: true
  ProtectPetsOutsideLandClaims: false    # if true, pets are protected even in wilderness

  # ── Claim-block economy ─────────────────────────────────────────────
  InitialBlocks: 400                     # starting block allowance for new players
  BlocksAccruedPerHour: 100             # blocks earned per Minecraft play-hour
  MaxAccruedBlocks: 80000               # cap on earned blocks (bonus blocks not counted)
  AccruedIdleThresholdHours: 0          # hours of inactivity before accrual pauses (0 = disabled)
  AccruedIdleAccrualPercent: 0          # percentage of normal rate to award during idle hours (0 = none)
  AbandonReturnRatio: 1.0               # fraction of spent blocks returned on /claim abandon (1.0 = full refund)

  # ── Per-rank starting blocks (permission-based) ─────────────────────
  # Simplest way: grant the number directly as a permission, no config
  # entry needed. Highest number wins and beats the entries below:
  #   /lp group vip permission set coreengineclaim.initialblocks.800 true
  #
  # Alternative: define named tiers here and assign them via the
  # `coreengineclaim.rank.<key>` permission. If a player matches multiple
  # entries, the HIGHEST start value wins.
  InitialBlocksByGroup:
    vip: 800
    premium: 1200
    mvp: 1600

  # ── Per-rank block accrual (permission-based) ───────────────────────
  # Simplest way: grant the hourly rate directly as a permission. Highest
  # number wins and beats the entries below:
  #   /lp group vip permission set coreengineclaim.blocksperhour.150 true
  #
  # Alternative: define named tiers here and assign them via the
  # `coreengineclaim.rank.<key>` permission. If a player matches multiple
  # entries, the HIGHEST rate wins. Without any match,
  # BlocksAccruedPerHour is used. The effective rate is applied to the
  # player's full Minecraft playtime, including time before install.
  #
  # Example LuckPerms setup for named tiers:
  #   /lp group vip permission set coreengineclaim.rank.vip true
  #   /lp group premium permission set coreengineclaim.rank.premium true
  AccrualPerHourByGroup:
    vip: 150
    premium: 200
    mvp: 300

  # ── Tool / interaction tuning ───────────────────────────────────────
  # Minimum time (in ms) between two stick (investigation tool) clicks
  # by the same player. Prevents spamming the visualiser. 0 = disabled.
  StickCooldownMillis: 500
  # Radius (blocks) for sneak+stick "show all nearby claims" lookup.
  NearbyClaimRadius: 30
  # Minimum time (in ms) between two sneak+bone subdivision overview clicks.
  SubdivisionVisualizationCooldownMillis: 200
  # Radius (blocks) for sneak+bone "show all nearby subdivisions" lookup.
  SubdivisionNearbyRadius: 200

  # ── Auto-claim on chest placement ───────────────────────────────────
  AutomaticNewPlayerClaimsRadius: 4     # radius (blocks) of the auto-chest claim
  AutomaticNewPlayerClaimsRadiusMinimum: 0  # minimum radius override

  # ── Claim geometry ──────────────────────────────────────────────────
  # NOTE: Manually created claims always span the FULL world height
  # (bottom to build limit). ExtendIntoGroundDistance and MaximumDepth are
  # accepted for GriefPrevention config compatibility but have no effect.
  ExtendIntoGroundDistance: 5
  MinimumWidth: 5                       # minimum side length to prevent tiny claims
  MinimumArea: 25                       # minimum total area (X*Z) in blocks

  # Lowest Y for AUTOMATIC chest claims (manual claims ignore this and
  # always use the full world height).
  # Default -2147483648 = no restriction (uses world bottom).
  MinimumY: -2147483648
  MinimumYOverrides:                    # per-world overrides: worldName: minimumY
    world_nether: 127

  # Accepted for compatibility: currently no effect (see note above).
  MaximumDepth: 0

  # Claim creation and inspection tools.
  InvestigationTool: STICK
  ModificationTool: GOLDEN_SHOVEL
  SubdivisionVisualizationTool: BONE

  # ── Claim expiration ────────────────────────────────────────────────
  ChestClaimDays: 7                     # auto-chest claim deleted after N idle days
  UnusedClaimDays: 14                   # reserved (not implemented yet): use AllClaimDays instead
  AllClaimDays: 0                       # all claims deleted after N idle days (0 = disabled)
  MaximumNumberOfClaimsPerPlayer: 0     # 0 = unlimited
  MaximumSubdivisionsPerClaim: 100      # maximum sub-divisions per top-level claim (0 = unlimited)

  # ── Creative worlds ─────────────────────────────────────────────────
  CreativeRulesWorlds: []

  # ── Piston & portal rules ───────────────────────────────────────────
  PistonMovement: CLAIMS_ONLY           # EVERYWHERE / EVERYWHERE_SIMPLE / CLAIMS_ONLY / IGNORED

  # Blocks portals created by mobs or machines.
  PreventNonPlayerCreatedPortals: true

  RavagersBreakBlocks: false            # allow/deny ravagers breaking blocks in claims
  WarnWhenBuildingOutsideClaims: true   # educate players who build in unclaimed land
  ProtectFireSpreadingIntoClaims: true  # prevent wildfire from entering claimed land

  # ── Visualisation ───────────────────────────────────────────────────
  VisualizationAntiCheatCompatMode: false  # disables particle optimisation for anti-cheat plugins
  VisualizationDurationSeconds: 30      # seconds the claim border stays visible

GriefPrevention:
  Database:                             # if Storage.Backend = sqlite, use CoreEngine pool
    UseCoreEngine: true

PvP:
  Enabled: true
  RulesEnabledInWorld:                  # per-world PvP rule toggle; "*" = wildcard default
    "*": false
  ProtectFreshSpawns: true              # invincibility for new/fresh respawns
  FreshSpawnDurationSeconds: 10         # seconds of post-spawn immunity
  PunishLogout: true                    # kill players who log out during combat
  CombatTimeoutSeconds: 15             # seconds in-combat after last PvP damage
  AllowCombatItemDrop: false            # whether players can drop items mid-fight
  BlockedCommands: [home, spawn, tpa, tpaccept, tpahere, warp, back, tp, teleport, rtp]
  ProtectPlayersInLandClaims:
    PvPWorld: false
    NonPvPWorld: true
  ProtectPlayersInAdminLandClaims: true
  ProtectPlayersInSubdivisions: false
  AllowLavaNearPlayers:
    PvPWorld: false
    NonPvPWorld: false
  AllowFireNearPlayers:
    PvPWorld: false
    NonPvPWorld: false
  AllowPearlsToPvpZones: false
  LavaBucketRadius: 5
  LootProtectionSeconds: 180

Pets:
  EnableGivePetCommand: true

Mobs:
  EndermenMoveBlocks: false             # allow endermen to move blocks (affects all areas)
  SilverfishBreakBlocks: false          # deny silverfish from breaking stone blocks
  CreaturesTrampleCrops: false          # deny mobs/animals trampling crops
  RabbitsEatCrops: true                 # allow rabbits to eat farm crops
  ZombiesBreakDoors: false              # deny zombies breaking wooden doors

Fire:
  Spreads: false                        # allow fire to spread
  Destroys: false                       # allow fire to destroy blocks

Explosions:
  BlockSurfaceExplosions: true          # block creeper/TNT craters above sea level
  BedExplosionsAllowed: false           # allow bed explosions in nether/end dimensions
  RespawnAnchorExplosionsAllowed: false # allow respawn-anchor explosions in the overworld

Wilderness:
  LimitSkyTrees: true                   # prevent sky-platform tree griefing
  LimitTreeGrowth: false                # deny saplings from growing in the wilderness
  # Anti-grief kill switches for unclaimed land. When enabled, redstone
  # power is forced to 0 and pistons will not move outside of claims.
  DisableRedstone: true
  DisablePistons: true                  # PistonMovement: IGNORED also skips this check
  # SeaLevelOverride: -1 delegates to World.getSeaLevel(); >= 0 forces a fixed value.
  SeaLevelOverride: -1

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

Spam:
  # Reserved for a future spam-detection module, currently has NO effect.
  # CoreEngine already handles chat moderation (mutes, spam protection).
  # Soft-mute (/softmute) and ignore (/ignoreplayer) filtering is always
  # active regardless of this setting.
  Enabled: false

Economy:
  ClaimBlocksPurchaseCost: 0.0          # 0 = buying disabled
  ClaimBlocksSellValue: 0.0             # 0 = selling disabled
  TeamPlotPurchaseCost: 100000.0        # paid from team treasury by /claim team buy; rent plots charge this per period
  TeamClaimBlocksCostPerBlock: 10.0      # price per TEAM claim block (/claim team blocks buy); 0 = buying disabled

TeamPlots:
  RentPeriodDays: 30                    # real-time days between rent payments for rented plots
  RentGraceDays: 7                      # grace period after a failed payment before the plot is released

Advanced:
  ClaimsPerPlayerWarningCount: 0        # warn admins when a player owns more than N claims (0 = off)
  fixNegativeClaimblockAmounts: true    # auto-correct negative block balances on load
  ClaimExpirationCheckRate: 60          # minutes between expiration sweeps (PHASE 14)
  OfflinePlayer_cache_days: 90          # how long to cache offline player profiles

Logging:
  AuditLog: true                        # write all claim actions to the audit log
  LogToFile: claim-audit.log            # log file name inside the plugin data folder
  RotateDaily: true                     # rotate the audit log file each day
  MaxFileSizeMb: 10                     # rotate to a new file when the daily log exceeds this size (0 = no cap)

# CoreEngineClaim is inspired by GriefPrevention's land-claim workflow.
```
