All Mods Resource Packs Data Packs Shaders Modpacks Plugins
PlayTimeManager

PlayTimeManager

by TheGabro • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

alt text

Hello and welcome to PlayTimeManager! I initially created this plugin for the server on which I am currently a developer. We don't have thousands or hundreds of players, but we had to find a way to track players' playtime to promote one whenever it reaches a certain amount. I looked around on the web, but I couldn't find any plugin that was able to satisfy our issue: we needed a playtime plugin, somewhat efficient, that could automatically execute a specific task like promoting a player through Luckperms. Well, that's what this plugin is supposed to do!
I thought this could be useful to other server administrators as well, so I decided to share it on Spigot! If interest arises, I'll keep it updated happily :)


alt text

Examples of usage

Formatted Playtime Example Playtime Stats Example

Commands, permissions, placeholders and tutorials

Ready to get started? The comprehensive PlayTimeManager Wiki contains everything you need including detailed command references, permission configurations, placeholder listings, and step-by-step setup tutorials.


Features and Use cases

Core Functionalities

  • Support for both offline and online servers - Works seamlessly regardless of your server's authentication mode
  • Fast, efficient data access with smart caching - Optimized performance for lightweight operation
  • Automatic updates that preserve your settings across versions - Automated update process without losing configurations
  • PlaceholderAPI and LuckPerms integrations - Full compatibility with popular server management plugins
  • MiniMessage, Hex colors and legacy style support - Complete color customization options for all text elements
  • Fully customizable formatting, messages, and GUIs - Tailor every aspect to match your server's theme
  • Dynamic Leaderboards - Real-time player ranking system based on playtime
  • AFK Detection Support - Accurate playtime tracking that excludes idle time
  • Multi-language Support - Player-facing messages can all be localized
  • Multiple database backend support - Choose between SQLite, PostgreSQL, MySQL, and MariaDB with seamless data migration between database types
  • Flexible time format system - Track and display playtime in years, months, weeks, days, hours, minutes, seconds, and Minecraft days (20-minute cycles)
  • Vanish Stealth Mode - Fully vanish-aware integration that prevents vanished players from being exposed by the plugin.

Use Cases

  • Automatic Staff Promotions - Promote players to staff ranks after specific playtime
  • VIP Rewards - Grant special perks to dedicated players
  • Server Statistics - Display engagement metrics
  • Player Retention - Encourage longer play sessions with time-based goals
  • Community Building - Foster competition through leaderboards
  • Server Analytics - Track player engagement and activity patterns
  • Join Streak Rewards - Reward players for consecutive daily logins and playtime

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3 26.2 26.1.x +3
Paper Purpur
23h ago 1
26.2 26.1.x 1.21.x +2
Paper Purpur
23h ago 1
26.1.x 1.21.x 1.20.x +1
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.21.x 1.20.x 1.19.x
Paper Purpur
23h ago 1
1.20.x
Paper Purpur
23h ago 1
1.21.x 1.20.x
Paper Purpur
23h ago 1
# 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.
# 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.


# 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](https://github.com/TheGaBr0/PlayTimeManager/wiki/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](https://github.com/TheGaBr0/PlayTimeManager/pull/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.
❗️**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
❗️**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
❗️**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)
[3.6] PlayTimeManager 3.6 by TheGabro on Oct 15, 2026
Download
❗️**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
❗️**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.

⚠️ 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
❗️ 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.
[3.5] PlayTimeManager 3.5 by TheGabro on Oct 15, 2026
Download
❗️**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.
❗️**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

## 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.


## 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
❗️**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 goals requirements

Goals can now have customizable requirements that must be met to achieve them. A new "Requirements" section in the goals settings GUI allows you to configure:
  • Time requirement** - Previously mandatory, now optional and can be set to none
  • Permission requirements** - Set group or single permissions (e.g., group.newbie) that players must have
  • Placeholder conditions** - Create boolean conditions using PAPI placeholders from this plugin or others, supporting operators: ==, !=, >, <, >=, <=. Includes special PLAYER_NAME placeholder for player-specific comparisons (e.g., %PTM_nickname_top_1% == PLAYER_NAME for leaderboard-based goals)

All configured requirements must be satisfied simultaneously to receive the reward.

## New GUI sections for goals and join streaks rewards

Goals GUI has been redesigned with significant improvements:
  • Removed Anvil-based GUIs** - Replaced with more customizable chat-based input systems
  • New goal creation method** - Removed /playtimegoal set subcommand in favor of a "Create New Goal" button directly in the GUI for easier access

For both goals and join streak GUIs:
  • Reorganized rewards section** - Previous permissions and commands have been moved to a dedicated "Rewards" section within the goal/join streak reward settings GUI for better organization

## Negative playtime values reverted

The restriction on negative playtime values has been removed. Players can now have their playtime reduced below 0 using the /playtime remove command, with values going as low as -Long.MAX() value for maximum flexibility in playtime management.

## New translation options

Added new customizable message configurations for playtimetop command, namely:
  • Permission denied messages - Custom message when players lack command permissions
  • Page navigation messages - Error messages for invalid page numbers and non-existent pages
  • Argument validation - Custom message for invalid command arguments
  • Player data messages - Messages for when no players have joined and data loading errors

These lines will be automatically added into your Translations/Commands/commands-config.yml without interfering with previous values of other fields.

## New playtimejoinstreak set subcommand

A new set subcommand for /playtimejoinstreak has been added, syntax:

/playtimejoinstreak set <playername>|* <value>

This will set the target player's relative join streak to the specified value.

# **Bug Fixes**

  • /playtime remove subcommand now removes playtime correctly
  • /playtime reset all subcommand now resets every database record as intended.
[3.4] PlayTimeManager 3.4 by TheGabro on Oct 15, 2026
Download
❗️**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**

## Rewards based on join streaks are here!
Players can now earn custom rewards by logging in across **configurable time windows** — whether daily, weekly, or any schedule you define using cron expressions.
This join streak system supports **looping reward** cycles and lets you attach messages, commands, sounds, permission grants, and GUI icons to each reward milestone.

📘 **Everything you need to get started — including setup instructions, configuration tips, and a ready-to-use 30-day template — can be found [here](https://github.com/TheGaBr0/PlayTimeManager/wiki/Joinstreaks)**.

### New commands and permissions

  • /playtimejoinstreak -> Opens the join streak rewards management GUI, requires the permission playtime.joinstreak

  • /playtimejoinstreak seeplayer <playername> -> Opens the **same visual GUI** as /claimrewards, but viewed from the perspective of the **target player**. This GUI is **read-only** when viewing another player’s rewards. Admins **cannot claim or modify** rewards through this interface. It requires the permission playtime.joinstreak.seeplayer

  • /claimrewards -> Opens the GUI to claim available rewards, requires the permission playtime.joinstreak.claim, which **is enabled by default**. <br>
Alternatively, players with the playtime.joinstreak.claim.automatic permission will automatically receive their rewards without needing to use the command.

### New Placeholders

  • %PTM_joinstreak% -> Displays the current player's absolute join streak

  • %PTM_joinstreak_<nickname>% -> Displays the absolute join streak for a specific player

## New aliases for commands

New aliases for commands are avalable:

  • /playtimeaverage -> /ptavg
  • /playtimepercentage -> /ptpercent
  • /playtimetop -> /pttop
  • /playtimegoal -> /ptgoal
  • /playtimereload -> /ptreload
  • /playtimebackup -> /ptbkp
  • /playtimejoinstreak -> /ptjsk

Both complete commands and relative aliases are present in tab completion.

## New translations options

This is part of the full-customization process this plugin aims to achieve. A new folder has been created called Translations this currently contains 2 sub folders:
  • Commands -> This contains a config which will be used to translate commands output of the plugin.
  • GUIs -> This contains a config which will be used to to translate each player-facing GUIs of the plugin.

This is the first step, more will come in the future.

## New option in playtime reset command

Now you can reset player's join streaks with:

playtime <playername>|* reset joinstreak -> this will reset both absolute and relative join streak of the specified player.

## New custom chat input system

A new system to get input from users in terms of messages sent has been put in place. This was necessary to setup certain parameters for join streak rewards and it also benefits goal as well!


# **Bug Fixes**

  • Fixed wrong visualization of refresh rate in console.
  • Various wrong instructions corrected in config files.
  • Fixed spam of errors when updating from 3.0.4 to newer versions.

❗️**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 version supported
Added support for version 1.19!

## Asynchronous optimizations
Database-related background tasks are now executed asynchronously to prevent potential server slowdowns caused by database delays.

## Goals
  • Sounds can now be played directly in-game by right-clicking the corresponding icon in the goal settings GUI.
  • Goal renaming and deletion processes have been optimized using asynchronous methods.
  • Players now receive dedicated chat feedback when renaming or deleting goals to confirm the operation's completion.

## Recoded reset command
The /playtime <playername> reset command has been completely rewritten and now includes three subcommands for more precise usage:

  • all: Resets both the database records and the server's playtime statistics.
  • db: Resets only the database records, including:
  • Total playtime (both artificial and actual)
  • Achieved goals
  • First join and last seen data
  • stats: Resets only the server's play_one_minute statistic, stored in the world’s stats folder.

A new permission, playtime.others.modify.all, is required to use the wildcard *, which resets playtime for all users in the database.

A safe-reset system has also been introduced—when using the * wildcard for a reset, the plugin now prompts the user to confirm by sending the command a second time.

## New backup command
A manual database backup can now be triggered with the command /playtime backup, which requires the playtime.backup permission.

# **Bug Fixes**

  • Fixed the sound-playing system to prevent errors when changing goal sounds in the config and reloading the plugin.
  • Resolved an issue where verbose messages still appeared despite goal-check-verbose being set to false.
  • Online players' achieved goals now update correctly during goal renaming or deletion.
> Previously, renamed goals could not be uncompleted for players who were online during the renaming process.
  • Fixed color formatting in the console.
  • Adjusted the order of command property checks.
> Permission checks now occur before verifying user existence.
Luck
  • UpdateChecker false check has been fixed.
  • Now UpdateChecker uses PaperMC Hangar as source.
  • Double UpdateChecker Instance has been removed.
[3.3] PlayTimeManager 3.3 by TheGabro on Oct 15, 2026
Download
# **New Features & Improvements**

### New placeholders

Added new placeholders for converting formatted playtime into a specific time unit:

  • %PTM_playtime_#_<nickname>%
  • %PTM_lastseen_elapsed_#_<nickname>%
  • %PTM_playtime_top_#_<rank>%
  • %PTM_lastseen_elapsed_top_#_<rank>%

And a new placeholder to display a player’s LuckPerms prefix in the leaderboard:

  • %PTM_lp_prefix_top_<rank>%

Available time units (#): s (seconds), m (minutes), h (hours), d (days), y (years)

### Hex colours

Support for hex colours has been added with the following format: &#rrggbb.
Mixing legacy colours (e.g. &6), styles (e.g. &l) and hex colours is supported, an example:

&l&#8000FF[&#9B00E6M&#B200D9e&#C600CCm&#D900BFb&#EC00BFe&#FF00B3r] → Displays “[Member]” in bold and gradient hex colours.

### New customization options in the config.yml

  • prefix : This will set the custom prefix that will appear before all messages generated by the PlayTimeManager plugin
  • playtimetop.leaderboard-format: This will set the format for each line in the chat leaderboard.
  • Available placeholders:
  • %POSITION% - Player's position in the leaderboard (1, 2, 3, etc.)
  • %PREFIX% - Player's prefix from LuckPerms
  • %PLAYER_NAME% - Player's username
  • %PLAYTIME% - Player's total playtime formatted
  • placeholders.enable-errors: If enabled, errors in placeholders will be displayed otherwise the text in default-message will be shown instead of error messages
  • placeholders.default-message : The default message to display when enable-errors is set to false.
  • A new placeholder %PREFIX% is available for playtime-self-message and playtime-others-message and, if used, will display the LuckPerms prefix of the specified player.

### First join date

Added tracking of players' first server join dates. The system will now automatically record when new players join for the first time. For existing players in the database who joined before this update, their first join date will be set when they next connect to the server after the update is installed.

### Playtime <playername> stats

/playtime <playername> lastseen has been replaced with /playtime <playername> stats and requires the permission playtime.others.stats .

Now upon execution this command will display:

  • Playtime
  • Artificial playtime (modified with add/remove subcommands)
  • Join date
  • Last seen date
  • Time elapsed since last seen date
  • Goals achieved

of the specified player.

### Playtimetop

Playtimetop is now completely customizable through config.yml, making it more adapt to be shown to players.
Now it is no longer needed to specify the number of players to load, as 100 will be default.

Pages are optional and clickable (and hoverable) arrows have been added in chat to scroll the entire leaderboard.

The command has also been optimized.

### Playtimepercentage

PlaytimePercentage now supports second and years, furthermore multiple time formats as input is now accepted (e.g. 1y,2m,3s).

# **Bug Fixes**

Fixed the display of a text-wall of attributes when clicking on the barrier of /playtimegoal ’s GUI when no goals exist.

Fixed sound execution upon goal completion for version 1.20

Fixed /playtime * reset command which was refusing to execute when specifying *

Fixed crash when resetting players data
PlayTimeManager Icon
Download PlayTimeManager
Select game version
Select platform