Releases: TheGaBr0/PlayTimeManager
Release list
PlayTimeManager 3.6.6
New Features
- Per-Player Goal Completion Checks: goals can now run each online player's completion check on their own individual timer instead of one shared check for everyone. It spreads out the check load, starting when a player joins and stopping when they leave. Configurable per-goal from the goal settings GUI.
- MiniMessage Support: goal messages and other configurable text now understand MiniMessage tags (
<red>,<gradient:...>, etc.), freely mixed with the existing&/hex legacy color codes - New PAPI Placeholders: added
%PTM_onlinefor%and%PTM_afkfor%(plus per-unit and per-nickname variants) to track a player's current online/AFK session length. - Richer Goal List Tooltips: the main
/playtimegoalGUI now shows a full status summary per goal at a glance
Bug Fixes
- Fixed changing a goal's completion check interval/cron from the GUI not actually rescheduling the running check.
- Fixed the join streak cycle reset processing online players off the main thread, which could cause issues on low-TPS servers.
- Fixed inconsistent chat prefix placement in some messages (including
/claimrewards) by centralizing prefix handling.
PlayTimeManager 3.6.5
New features
Vanish stealth mode
PlayTimeManager now includes a vanish-aware stealth mode, ensuring that a player's vanish status cannot be exposed by the plugin.
When enabled, vanished players are completely hidden from both PlaceholderAPI placeholders and the /playtimestats GUI, preventing any indirect disclosure of their presence.
Console, staff members with appropriate permissions, and the vanished player themselves can still view real-time playtime data through the /playtimestats GUI.
AFKPlus integration and Universal AFK support
AFKPlus support – Integrated AFKPlus as an additional AFK detector option.
Added placeholder-based AFK detection: PTM can now determine whether a player is AFK by evaluating a configurable PAPI placeholder (e.g. %essentials_afk%), making it possible to support AFK plugins that aren't natively integrated. This option only applies when afk-detection-plugin is set to none. [@The0Felon, #26]
Join streak rewards
Join streak reward messages now support a configurable delay, so reward notifications can be timed independently of the join event.
Reward icons now preserve their enchantment glint, keeping enchanted items visually distinct in reward GUIs.
Nested placeholders support
Nested placeholders are now natively supported, so a PTM placeholder can take another PAPI placeholder as its argument
e.g. %PTM_rank_{player}%, where {player} is resolved by the Player expansion PAPI placeholder before PTM evaluates the rank.
Bug fixes
- Fixed a bug where trailing whitespaces in chat event messages could cause wrongly formatted input resulting in various exceptions.
PlayTimeManager 3.6.4
New features
New join streak rewards repeatability option
Streak rewards can now be configured as non-repeatable, meaning they will only be granted to a player once even if their streak resets and they reach the required join count again. Note that this option is only available for single-join rewards, range rewards are always repeatable.
New PAPI placeholders
-
New PAPI placeholders have been added for join streak rewards, allowing you to query reward state and metadata directly, including whether a reward is pending collection, expired, or already received. A
repeatableproperty is also exposed. -
New PAPI placeholders have been added for goals, letting you check goal completion status and completed goal counts for the current player or by nickname.
See the refactored Placeholders page index for the full references.
Claimrewards GUI overhaul
All GUI slot positions (filter buttons, pagination, claim-all, no-rewards indicator) are now configurable from GUIs-config.yml rather than hardcoded. Border material and visibility, filter button materials, and sound effects for claim success, errors, and permission denials are likewise config-driven. PlaceholderAPI placeholders are now resolved in all GUI strings if PAPI is installed. Reward items now support PLAYER_HEAD as available icon material, same with the stats GUI.
Improvements
Nickname lookups for premium servers are no longer case-sensitive across all plugin features. You can now reference a player as Steve, steve, or STEVE and the plugin will resolve them correctly. On cracked (offline-mode) servers, the player's original casing is still required.
Bug fixes
- Fixed a display bug in the goal settings GUI where the repeatability toggle was showing the wrong label. [@MM4096, #23]
- Fixed an issue where using
/playtime reseton a currently online player would not correctly clear their playtime data. - Fixed a desync issue affecting join streak reward processing on servers with low TPS. If a player who had not finished loading disconnected and reconnected repeatedly, the plugin could grant streak rewards out of order, bypassing the normal join streak schedule. This has been corrected.
- Various improvements all around.
PlayTimeManager 3.6.3
❗️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
Database Migration System
Introduced a comprehensive database migration system allowing seamless switching between database types:
- New
/playtimemigrationcommand – Manage database migrations, available from console only.- Three subcommands available:
start <dbtype>– Schedules migration to the specified database typecancel– Cancels any pending migrationstatus– Displays current database type and migration status
- Three subcommands available:
Supported database types:
- MySQL (
mysql) - MariaDB (
mariadb) - PostgreSQL (
postgresql) - SQLite (
sqlite)
Migration process:
- Migration executes automatically on the next server reload/restart after scheduling
- Automatic backup creation before migration begins
- Existing PlayTimeManager tables in target database are automatically dropped to ensure clean migration
- Important: Target database credentials must be correctly configured in
config.ymlbefore server restart (username, password, connection details, etc.)
Expanded Time Unit Support
Added three new time units for placeholders, playtime formats, and commands:
w(weeks) – Display playtime in weekly incrementsmo(months) – Display playtime in monthly incrementsmc(minecraft days) – Display playtime in Minecraft day units (1 Minecraft day = 20 minutes of real playtime)
New configuration option:
month-value-in-days– Customize how many days equal one month for themounit (defaults to 30 days)
These units can be used anywhere time units are supported, including placeholders, playtime format configurations, and command arguments.
AFK Detection Integration
JetsAntiAFKPro support – Integrated JetsAntiAFKPro as an additional AFK detector option.
Configuration Changes
distribute-removed-timeoption is now set totrueby default in the default playtime format
Bug fixes
- Fixed
%SUBCOMMAND%internal placeholder not being correctly parsed - Fixed automatic update process from some old versions of the plugin
- Fixed
%PTM_rank_<nickname>%placeholder returning nothing when queried for an offline player - Fixed an issue which prevented players data up to 5 minutes from being saved correctly to the database on server shut down
- Various optimizations
PlayTimeManager 3.6.2
❗️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. ❗️
Bug fixes
- Fixed a bug where periodic database updates would stop AFK time counting for players who were still AFK, causing inaccurate AFK playtime tracking
PlayTimeManager 3.6.1
❗️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
New update check system
This won't change anything for you, but now there's a homemade update checker instead of
relying on Spigot-UpdateChecker. I had to do this cause the latter was no longer maintained
by his developer and having Maven warnings after each compile process wasn't something I really liked!
Bug fixes
- Fixed an issue where updating a player’s nickname (when they previously had another nickname) resulted in failure and consequent inconsistent values across database tables. The problem was caused by referencing the wrong column during the updateNickname process.
- This affects mostly premium servers!
- This version automatically fixes database incosistencies caused by this problem.
- Fixed GUIs-config update system not preserving intentionally removed view sections (e.g., removed player/staff/owner views are now kept removed after updates)
PlayTimeManager 3.6
❗️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
/playtimereloadfor 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 minutewith 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:
prefixplaytime-message-selfplaytime-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-messagefielddescriptionfieldreward-descriptionfield
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
PlayTimeManager 3.5.4
❗️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
Purpur's AFK detection support added
Now you can use Purpur's built-in AFK detection system alongside the existing EssentialsX option.
If you want to use Purpur base afk detection, you need to:
- Set
player-idle-timeoutfield greater than 0 (minutes) inserver.properties - Set
player.idle-timeout.kick-if-idlefield tofalseinpurpur.yml
Bug fixes
- Fixed a critical bug where artificial playtime was getting added to users after each quit event.
PlayTimeManager 3.5.3
A critical bug has been fixed where players’ AFK time was being subtracted twice when ignore-afk-time was enabled. This caused total playtime to be undercounted after players quit the server. Updating to this version is strongly recommended to ensure accurate playtime tracking.
❗️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
AFK detection system is here!
Introduced AFK detection capabilities with external plugins integration:
afk-detection-plugin– Configure which plugin will serve as the AFK detector that PTM will hook into (currently only EssentialsX is supported)ignore-afk-time– When enabled, AFK time is excluded from total playtime calculations used throughout the plugin (goals requirements, displays, etc.)- Enhanced player information display with dedicated AFK time tracking in the new stats GUI
- Added new PAPI placeholders for AFK time monitoring:
%PTM_afk_playtime%,%PTM_afk_playtime_#%,%PTM_afk_playtime_<nickname>%,%PTM_afk_playtime_<nickname>_#%
New customizable stats GUI system
Completely redesigned the stats display system with a flexible, view-based GUI:
- Command restructure:
/playtime <target> statshas been converted to/playtimestats <target>with enhanced functionality - View-based customization: GUI adapts based on the player accessing it and their permission level
- Owner view: Full access to personal statistics when players check their own stats
- Player view: Public statistics display when viewing other players
- Staff view: Enhanced administrative details for users with
playtime.others.stats.staffpermission
- New permission system: Updated permissions structure for granular access control
playtime.stats– Access to/playtimestats(/ptstats) | AKA access to personal statistics (enabled by default)playtime.others.stats– Access to/playtimestats <target>(/ptstats <target>) | AKA View other players' statistics (disabled by default)playtime.others.stats.staff– Enhanced staff view with administrative details
- Console compatibility: Text-based statistics output for console usage with detailed formatting instead of in-game GUI.
- Configuration location: The new stats GUI can be found in
Customizations/GUIs/GUIs-config.yml - Wiki documentation: A detailed guide on the views system and customization tutorial is available in the wiki
Internal placeholder format update
Updated internal placeholder formatting for improved consistency:
Format change: Internal placeholders have been converted from {placeholders} to %PLACEHOLDER%.
Do not confuse internal placeholders with PAPI placeholders, which maintain the format %PTM_PLACEHOLDER%.
Bug fixes
- Fixed
PTM_Rankplaceholder showing0instead ofplaceholders.not-in-leaderboard-messageconfig field (again) - Fixed a case where, if the
first_joindb field is null for a player, a double join streak increment is given. - Fixed tab completion for
/playtimecommand
PlayTimeManager 3.5.1
❗️ IMPORTANT: Update recommended for all servers to prevent playtime data inconsistency. ❗️
Bug Fixes
- Fixed playtime data not being saved when players disconnect from the server. This could result in up to 5 minutes of playtime loss per session. Thanks to @Cr4zyGeek for finding this critical bug.