Skip to content

Releases: TheGaBr0/PlayTimeManager

PlayTimeManager 3.6.6

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 03 Sep 16:24

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 /playtimegoal GUI 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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 03 Jun 07:30

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 16 Apr 12:02

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 28 Jan 08:47

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 10 Dec 09:34

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 30 Nov 09:47

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 16 Nov 11:13

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 04 Sep 11:46

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 02 Sep 11:47

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

Choose a tag to compare

@TheGaBr0 TheGaBr0 released this 27 Jul 17:32

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