❗️**The plugin remains fully compatible with data from version 3.0.4 and earlier. Before making any modifications, a backup is automatically created, ensuring a seamless and secure migration to the latest version without data loss.** ❗️
# **New Features & Improvements**
## New support for custom playtime formats
Introduced a comprehensive **playtime format system** enabling the possibility to create **personalized time display formats** through YAML configuration files stored in the `Customization/PlaytimeFormats` directory.
The system supports both **internal plugin placeholders** and **PlaceholderAPI (PAPI) placeholders** by appending the custom format name after a colon (e.g., `%PLAYTIME:custom%` or `%PTM_playtime:custom%`) at the end of the placeholders.
The system features **automatic zero-value hiding** and **singular/plural unit selection**, it also provides configurable labels for all time units with advanced formatting options using time value and unit label placeholders. For more info, take a look at the new [wiki page](https://github.com/TheGaBr0/PlayTimeManager/wiki/playtime-formats)!
## New /playtimereset subcommands
Enhanced the `/playtime <target> reset` command with expanded reset options providing more **granular** control over player data management. The updated system replaces the previous limited parameters (`all`, `db`, `stats`, `joinstreak`) with a comprehensive set of specific reset types, allowing you to target exact data components without affecting unrelated information.
New reset types:
- `server_playtime` - Resets only server statistics (PLAY_ONE_MINUTE)
- `playtime` - Resets database playtime records (artificial and actual)
- `last_seen` / `first_join` - Individual timestamp data management
- `joinstreak`: Resets both absolute and relative join streak records
- `joinstreak_rewards` - Resets reward progress and tracking separately from streak counts
- `goals` - Targets completed goals data specifically
- `everything` - Complete reset (replaces old `all` parameter) with clearer scope definition
## New /playtimeattribute command
Added a new `/playtimeattribute <attribute> [true|false]` command (alias: `/ptattr`) for managing internal player attributes within PlayTimeManager.
- Requires the permission with `playtime.others.attributes`
- Currenlty only 1 attribute supported as argument: `hidefromleaderboard`
- Directly modifies a new config field: `placeholders.playtime-leaderboard-blacklist`
## Folders organization and configs updater
The **"Translations"** folder has been renamed to **"Customizations"** to better reflect its expanded purpose beyond just language files.
- Relocated command messages - `playtime-self-message` and `playtime-others-message` moved from main config to `Customizations/Commands/commands-config.yml`
Completely **rewritten** config file versioning system for better performance and usability, now before updating the updater will create a complete backups of the **entire PlayTimeManager folder** instead of database-only entries.
## More caching!
**Enhanced performance through the implementation of a dedicated cache system for commands and GUIs configuration files**. This optimization reduces file I/O operations by storing frequently accessed configuration data in memory, resulting in less server overhead.
# **Bug Fixes**
- Fixed `not-in-leaderboard-message`: now if a player isn't in the leaderboard the correct config message is displayed whe using `PTM_rank` PAPI placeholder.
- Fixed playtime leaderboard player hiding mechanism: **replaced permission-based system with a config-based one**. See `/playtimeattribute` command in the wiki for more info.
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" }