Skip to content

Releases: TheGaBr0/PlayTimeManager

PlayTimeManager 3.6.4

16 Apr 12:02

Choose a tag to compare

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 repeatable property 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 reset on 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

28 Jan 08:47

Choose a tag to compare

❗️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 /playtimemigration command – Manage database migrations, available from console only.
    • Three subcommands available:
      • start <dbtype> – Schedules migration to the specified database type
      • cancel – Cancels any pending migration
      • status – Displays current database type and migration status

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.yml before 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 increments
  • mo (months) – Display playtime in monthly increments
  • mc (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 the mo unit (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-time option is now set to true by 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

10 Dec 09:34

Choose a tag to compare

❗️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

30 Nov 09:47

Choose a tag to compare

❗️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

16 Nov 11:13

Choose a tag to compare

❗️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

PlayTimeManager 3.5.4

04 Sep 11:46

Choose a tag to compare

❗️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-timeout field greater than 0 (minutes) in server.properties
  • Set player.idle-timeout.kick-if-idle field to false in purpur.yml

Bug fixes

  • Fixed a critical bug where artificial playtime was getting added to users after each quit event.

PlayTimeManager 3.5.3

02 Sep 11:47

Choose a tag to compare

⚠️ WARNING FOR 3.5.2 USERS:
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> stats has 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.staff permission
  • 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_Rank placeholder showing 0 instead of placeholders.not-in-leaderboard-message config field (again)
  • Fixed a case where, if the first_join db field is null for a player, a double join streak increment is given.
  • Fixed tab completion for /playtime command

PlayTimeManager 3.5.1

27 Jul 17:32

Choose a tag to compare

❗️ 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.

PlayTimeManager 3.5

23 Jul 08:50

Choose a tag to compare

❗️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!

Closes #7.

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.

PlayTimeManager 3.4.2

03 Jul 11:11

Choose a tag to compare

❗️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 leaderboard permission

Introduced the playtime.hidefromleaderboard permission:

  • Players with this permission will not be displayed on the playtime leaderboard
  • Hidden players are automatically replaced by the next player in playtime ranking
  • Note: Requires LuckPerms to be installed for this feature to function
    [Closes #4]

New placeholders

Added new placeholders to enhance your server's information display:

  • %PTM_rank% and %PTM_rank_<nickname>% – Display the current leaderboard position of the specified player. If the player is not on the leaderboard, a customizable message will be shown instead, as defined in the placeholder.not-in-leaderboard-message field of the config.yml file.
  • %PTM_firstjoin% and %PTM_firstjoin_<nickname>% – Show the first join date of the specified player. The date is formatted according to the date-time format configured in the config.yml.
    [Closes #6 and #5]

New option to avoid the automatic plugin update check

Added a new configuration option to control automatic plugin update checking:

check-for-updates – Toggle automatic update checks on server startup

Particularly useful for versions that can't be upgraded due to dropped support for older Minecraft versions

New wiki section for common issues

Created a troubleshooting section to help server administrator. It contains step-by-step solutions when the intended methods fail.
Currently there's 1 issue:

  • Chat-Based Input System Issues – Documented known compatibility problems with plugins that intercept chat events

New subcommand for /playtimegoal command

Enhanced the /playtimegoal command with a new creation subcommand:

  • /playtimegoal create <goal_name> – Create new goals directly via command line
  • Provides an alternative method for goal creation when GUI-based input systems are not functioning
  • Files can be manually edited in the plugins/PlayTimeManager/goals/ directory after creation

Plugin optimization and stability improvements

  • Reduced file size by 50% – The JAR file has been significantly optimized and is now half the size of the previous version
  • Improved dependency management – All dependencies are now correctly shaded into the plugin to prevent conflicts with other plugins on your server