# GriefPrevention3D v18.1.3
**Wiki:** [GriefPrevention3D Wiki](https://github.com/castledking/GriefPrevention3D/wiki)
## Features
### Locale-based message localization
Messages are now loaded from YAML files based on the `GriefPrevention.Locale` config setting, replacing the single `messages.yml` approach.
**File layout:**
- `GriefPreventionData/messages_{locale}.yml` — active locale files (e.g., `messages_en.yml`, `messages_es.yml`, `messages_pt_BR.yml`)
- `GriefPreventionData/Lang/` — reference copies extracted from JAR on every reload (users copy from here)
- `GriefPreventionData/messages.yml` — legacy file, still supported as fallback
**Priority order:**
1. `messages_{locale}.yml` matching `config_locale` — respects user's locale setting
2. `messages.yml` — legacy fallback for migrated servers
3. Auto-detect — scans for any `messages_*.yml` if config locale file is missing
4. Extract from JAR — creates the file automatically if nothing exists
**Auto-detection:** If `config_locale` is set to `en` but only `messages_es.yml` exists, the plugin auto-switches to `es` and logs:
```
Locale 'en' didn't match provided messages_es.yml. Auto-switched to 'es'
```
**Key merging:** On every startup, missing keys from the JAR bundled version are merged into the user's locale file and saved, so new messages are automatically available after JAR updates.
### Startup header with localized details
The server startup header now displays localized detail lines with consistent two-column alignment:
```
Platform: Paper 26.1.2
3D Subdivisions: ON 3D Admin Claims: ON
Nested Claims: OFF Shaped Claims: OFF
Locale: es Messages loaded: 276
Storage: File Claims Loaded: 0
```
- Detail block generated in code via `${details}` placeholder — consistent formatting across all languages
- `TextColor` utility consolidates `$`/`&` color codes and `&#RRGGBB`/`#RRGGBB` hex to Minecraft legacy format
- `PlatformDetection.getServerVersion()` shows actual server platform (e.g., "Paper 26.1.2") instead of boolean ON/OFF
- Startup header locale matches `config_locale` (with fallback: `pt_BR` → `pt`)
### MessagesLoaded message
New `MessagesLoaded` enum constant outputs localized "Messages loaded: N" in the startup details via `${locale.info}` placeholder.
### Claim expiration permissions
Two new permissions added to `plugin.yml`:
- `griefprevention.checkclaimexpiry` — allows players to check claim expiration status
- `griefprevention.dontexpire` — prevents a player's claims from expiring
## Compatibility
| Category | Support |
| ------------------ | ------------- |
| Minecraft Versions | 1.8.8 -> 26.1.x |
| Minimum Java | Java 8 |
| Bukkit API Target | 1.13 |
## Migration
No data migration is required. Existing `messages.yml` files continue to work as legacy fallback. To use localized messages, copy `messages_{locale}.yml` from `GriefPreventionData/Lang/` to `GriefPreventionData/` and set `GriefPrevention.Locale` in config.yml.
Optional dependencies
VaultUnlocked
Any compatible version
QuickShop-Hikari
Any compatible version
PlaceholderAPI
Any compatible version
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }