
PlayTimeManager
PlayTimeManager is a playtime tracker that monitors player activity with extensive customization and automated rewards.
Автор: TheGabro9 тыс.25обновлён 3 сент. 2026 г.
УправлениеХранениеУтилиты
Описание

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 :)

Examples of usage
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
Последние версии
Все версии →release
PlayTimeManager 3.6.6
3.6.63 сент. 2026 г.2,2 тыс.Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2, 26.3paper, purpur
Что нового
# 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.
release
PlayTimeManager 3.6.5
3.6.53 июн. 2026 г.2,3 тыс.Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2paper, purpur
Что нового
# 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.
release
PlayTimeManager 3.6.4
3.6.416 апр. 2026 г.642Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2paper, purpur
Что нового
# 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.
release
PlayTimeManager 3.6.3
3.6.328 янв. 2026 г.1,3 тыс.Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Что нового
❗️**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
release
PlayTimeManager 3.6.2
3.6.210 дек. 2025 г.694Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Что нового
❗️**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
release
PlayTimeManager 3.6.1
3.6.130 нояб. 2025 г.162Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, purpur
Что нового
❗️**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)
release
PlayTimeManager 3.6
3.616 нояб. 2025 г.203Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10paper, purpur
Что нового
❗️**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
release
PlayTimeManager 3.5.4
3.5.44 сент. 2025 г.603Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8paper, purpur
Что нового
❗️**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.
release
PlayTimeManager 3.5.3
3.5.32 сент. 2025 г.70Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8paper, purpur
Что нового
⚠️ 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
release
PlayTimeManager 3.5.1
3.5.127 июл. 2025 г.231Minecraft: 1.19, 1.19.1, 1.19.2, 1.19.3, 1.19.4, 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8paper, purpur
Что нового
❗️ 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.