❗️**The plugin remains fully compatible with data from version 3.1 and later. 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**
## Revamped Goals System with Flexible Scheduling
The goals system has been completely redesigned with individual completion check schedules for each goal:
- **Individual scheduling per goal** – Each goal now operates independently instead of relying on a single global schedule
- **Two scheduling types available:**
- **Seconds-based intervals** – Traditional timer system (schedules reset on server restart)
- **Cron-based scheduling** – Advanced time-based scheduling with automatic restoration after server restarts
**Cron scheduling advantages:**
- Automatically restored and continue running at defined times after server restarts
- Precise control over when goals are checked (specific times, days, etc.)
**Cron scheduling limitations:**
- If a scheduled time is missed (due to maintenance or downtime), that execution will be skipped and not retried automatically
### Repeatable Goals
Goals can now be set as repeatable, allowing players to:
- Complete the same goal multiple times
- Earn rewards each time the conditions are met
### Offline Reward Delivery
Goals now support rewarding players even when they're offline:
- When enabled, players who meet goal requirements while offline automatically receive rewards on their next login
- **Current limitation:** Only players who were online during the last completion check interval are tracked for reward eligibility
- Example: If a goal checks daily and a player doesn't join that day, they won't receive rewards for that period—even if conditions were met while offline
### New Goal Management Command
Introduced `/playtimegoal <goalname> checknow` for immediate goal verification:
- Manually trigger a completion check for any goal
- Restarts the goal's check schedule
- Replaces the previous method of using `/playtimereload` for goal checks
---
## Enhanced Playtime Format System
### Distribute Removed Time Option
Added `Distribute Removed Time` configuration field to control how omitted time units are handled:
**When enabled:**
- Time from hidden larger units is converted and added to the next visible unit
- Example: `1 day, 12 hours, 1 minute` with format `%h%{hours}, %m%{minutes}` displays **36h, 1m**
- The 1 day converts to 24 hours and adds to the existing 12 hours
**When disabled:**
- Hidden units are simply ignored
- Example: Same playtime displays **12h, 1m**
- The day is hidden without conversion
## AFK Detection Integration
**AntiAFKPlus support** – Integrated AntiAFKPlus as an additional AFK detector option alongside EssentialsX and Purpur
## Database System Overhaul & Optimizations
Complete rewrite of the database management system:
- **Future database support** – Architecture now supports different database types (e.g., MySQL) for future releases
- **Async data retrieval** – Player data is now fetched completely asynchronously. These async improvements ensure smoother gameplay experiences, faster load times, and better scalability across all database operations
- **Enhanced caching system** – Improved data optimization for better performance
## Configuration Reorganization
Relocated common command-related options to `commands.yml` for better organization:
- `prefix`
- `playtime-message-self`
- `playtime-message-others`
- Added additional translation options for error-related messages in the commands configuration
## Join Streak Rewards GUI Enhancements
Expanded placeholder support in the join streak rewards claiming GUI:
- `%PLAYER_NAME%`, `%REQUIRED_JOINS%`, and `%JOIN_STREAK%` are now usable in:
- `reward-message` field
- `description` field
- `reward-description` field
## Support for version 3.0.4 dropped
Now it is no longer possible to update from 3.0.4 directly to 3.6 version. A mid update to 3.5.4 is necessary to then update to future versions.
# **Bug fixes**
- Fixed a rare bug where the onlineUser entry was missing during the join event, causing data inconsistency issues.
- Various fixes and improvements all around
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" }