promotional bannermobile promotional banner

PlayerPlayTime

Track players playtime, reward them for it, and easily see the top playtimes.
 
• Fully configurable
• EXTREMELY lightweight plugin
• Reward players for their playtime
 
• Playtime Top GUI
• Playtime Reward GUI
 
• MySQL support
• PlaceholderAPI support
 
• Per-file configuration
 
This plugin can be used as-is, but it's
highly recommended to setup rewards
specifically tailored to your server.
 
Commands »
 
 
Aliases:
pt, playertime, onlinetime, timeplayed, ot
 
Permissions »
 
• playtime.reload
Access to reload sub-command.
 
• playtime.clearrewards
Access to clearrewards sub-command.
 
Images »
(/playtime)
(/playtime top)
(/playtime rewards)
 
 
(/playtime clearrewards (player))
 
PlaceholderAPI »
 
Placeholders:
 
%playtime_playtime%
Description:  Displays the playtime of the player viewing the placeholder.
 
%playtime_(name)_playtime%
Example: %playtime_RexlessTazz_playtime%
Description: Displays the playtime of the specified player.
 
%playtime_top_(spot)_name%
Example: %playtime_top_1_name%
Description: Displays up to the top 10 spots username.
 
%playtime_top_(spot)_time%
Example: %playtime_top_1_time%
Description: Displays up to the top 10 spots playtime.
 
Configurable files »
 
[SPOILER="config.yml"][code]# config.yml</div> <div data-redactor="1">settings:</div> <div data-redactor="1">&nbsp; # Which time units to display in formatted playtime.</div> <div data-redactor="1">&nbsp; # Valid units: day, hour, minute, second.</div> <div data-redactor="1">&nbsp; # Comment out 'second' if you don't want seconds to appear.</div> <div data-redactor="1">&nbsp; Time-Format-Units:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; - day</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; - hour</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; - minute</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; - second # comment this out if you don't want seconds</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; # What labels to use for each unit.</div> <div data-redactor="1">&nbsp; # These strings are appended to the number of days, hours, etc.</div> <div data-redactor="1">&nbsp; Time-Formats:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Day: " day"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Hour: " hour"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Minute: " minute"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Second: " second"</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; # Whether to automatically append an "s" to the labels when plural (e.g., "2 days" instead of "2 day").</div> <div data-redactor="1">&nbsp; Append-Formats-With-An-S: true</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; Rewards-Cleared:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # When an admin clears a player's rewards, should the player be informed in chat?</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Tell-Target-All-Their-PlayTime-Rewards-Were-Cleared: true</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; Use-existing-playtime: true</div> <div data-redactor="1">&nbsp; # Use the data found in the world file for the players data that provides a playtime for the player.</div> <div data-redactor="1">&nbsp; # With this disabled, PlayTime uses its internal system that starts tracking upon the plugin being installed.</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">update-check:</div> <div data-redactor="1">&nbsp; # Automatically check for plugin updates on SpigotMC.</div> <div data-redactor="1">&nbsp; enabled: true</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; # Permission required to see the update notification.</div> <div data-redactor="1">&nbsp; permission: playtime.update</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; # Message shown to admins when an update is available.</div> <div data-redactor="1">&nbsp; # Placeholders: %latest% = latest version, %current% = your version.</div> <div data-redactor="1">&nbsp; message: "&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;e&diams; &amp;fA new version, &amp;b%latest%&amp;f, is available. You're running &amp;e%current%&amp;f."</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">mysql:</div> <div data-redactor="1">&nbsp; enabled: false</div> <div data-redactor="1">&nbsp; host: localhost</div> <div data-redactor="1">&nbsp; port: 3306</div> <div data-redactor="1">&nbsp; database: playtime</div> <div data-redactor="1">&nbsp; username: root</div> <div data-redactor="1">&nbsp; password: password</div> <div data-redactor="1">&nbsp; table: playtime_data</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">guis:</div> <div data-redactor="1">&nbsp; Top:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # Title of the GUI that shows the top playtimes.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Title: '&amp;fᴛᴏᴘ &amp;bᴘʟᴀʏᴛɪᴍᴇꜱ'</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # How many players to display in the Top Playtimes GUI.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; How-Many-Players-To-Display-In-The-GUI: 10</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # How to format each player's name line in the Top GUI.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # Placeholders: %position% = rank number, %player% = player name.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Players-Name: '&amp;b#%position% &amp;7&raquo; &amp;b%player%'</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # How to format the playtime shown for each player in the Top GUI.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # Placeholder: %playtime% = formatted playtime.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Players-Playtime: '&amp;7%playtime%'</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">&nbsp; Rewards:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; # Title of the GUI that shows available and claimed rewards.</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; Title: '&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;fʀᴇᴡᴀʀᴅꜱ'[/code][/SPOILER]
 
[SPOILER="messages.yml"][code]# messages.yml</div> <div data-redactor="1">prefix: "&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;e&diams; &amp;f"</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1">messages:</div> <div data-redactor="1">&nbsp; playtime:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; self:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;fYou've played for &amp;b%playtime%&amp;f."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;fTimes Joined: &amp;b%joins%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;fFirst Joined: &amp;b%date-joined%"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; other:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;b%player% &amp;fhas played for &amp;b%playtime%&amp;f."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;b%player% &amp;fjoined &amp;b%joins% &amp;ftimes."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;b%player% &amp;ffirst joined on &amp;b%date-joined%&amp;f."</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; not-found:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "%prefix%&amp;cNo &amp;fplaytime data found for &amp;b%target%&amp;f."</div> <div data-redactor="1">&nbsp; reloaded: "%prefix%&amp;aConfiguration reloaded."</div> <div data-redactor="1">&nbsp; top-header: "%prefix%Opening top playtimes..."</div> <div data-redactor="1">&nbsp; no-permission: "%prefix%&amp;cYou do not have permission to do that."</div> <div data-redactor="1">&nbsp; player-only: "%prefix%&amp;cOnly players can run this command."</div> <div data-redactor="1">&nbsp; invalid-player: "%prefix%&amp;cPlayer not found."</div> <div data-redactor="1">&nbsp; invalid-usage: "%prefix%&amp;cInvalid usage."</div> <div data-redactor="1">&nbsp; rewards-were-cleared: "%prefix%Your playtime reward data has been &amp;creset&amp;f." # in the config.yml, the setting: "Tell-Target-All-Their-PlayTime-Rewards-Were-Cleared" must be set to "true" for the target to receive this message.</div> <div data-redactor="1">&nbsp; cleared-players-rewards: "%prefix%All reward data for &amp;b%player% &amp;fhas been &amp;ccleared&amp;f."</div> <div data-redactor="1">&nbsp; player-not-on-the-confirm-list: "%prefix%That players' PlayTime rewards aren't pending clear. &amp;7(&amp;e/pt clearrewards %player%&amp;7)"</div> <div data-redactor="1">&nbsp; constant-rewards-cant-be-cleared: "%prefix%&amp;bConstant &amp;frewards can't be reset. The rewards are intended to always be able to be redone."</div> <div data-redactor="1">&nbsp; per-session-rewards-were-cleared: "%prefix%&amp;6Per-session &amp;frewards were &amp;ccleared &amp;ffor &amp;b%player%&amp;f."</div> <div data-redactor="1">&nbsp; unique-rewards-were-cleared: "%prefix%&amp;aUnique &amp;frewards were &amp;ccleared &amp;ffor &amp;b%player%&amp;f."</div> <div data-redactor="1">&nbsp; invalid-reward-type: "%prefix%&amp;cInvalid &amp;freward type. Use: &amp;aunique &amp;for &amp;6per-session"</div> <div data-redactor="1">&nbsp; players-data-already-in-confirm-list: "%prefix%The reward data for &amp;b%player% &amp;fis already pending confirmation. &amp;7(&amp;e/pt clearrewards %player% confirm&amp;7)"</div> <div data-redactor="1">&nbsp; hover-message:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; message-in-chat: "%prefix%You need to confirm clearing &amp;lALL &amp;fof &amp;b%player%s' &amp;freward data. &amp;7(&amp;a&amp;lClick to confirm&amp;7)"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; hover: "&amp;fClick to confirm clearing of &amp;b%player%s' &amp;freward data."</div> <div data-redactor="1">&nbsp; clear-rewards-breakdown:</div> <div data-redactor="1">&nbsp; - "%prefix%Usage: &amp;e/pt clearrewards (player) [reward-type]"</div> <div data-redactor="1">&nbsp; - "&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &amp;7(required) [optional]"</div> <div data-redactor="1">&nbsp; - ""</div> <div data-redactor="1">&nbsp; - "&amp;fValid reward types: &amp;aunique &amp;f&amp; &amp;6per-session"</div> <div data-redactor="1">&nbsp; help:</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime &amp;7- &amp;fView your playtime."</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime (player) &amp;7- &amp;fView another player's playtime."</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime rewards &amp;7- &amp;fView rewards for playtime milestones."</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime clearrewards (player) [reward-type] &amp;7- &amp;fClear all or a specified type of reward data for a player."</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime top &amp;7- &amp;fView top playtimes."</div> <div data-redactor="1">&nbsp; - "%prefix%&amp;e/playtime reload &amp;7- &amp;fReload plugin configuration."[/code][/SPOILER]
 
[SPOILER="rewards.yml"][code]# rewards.yml</div> <div data-redactor="1"># Constant rewards repeat every X seconds of TOTAL playtime.</div> <div data-redactor="1"># Each reward entry requires:</div> <div data-redactor="1">#&nbsp;&nbsp; interval: seconds (integer)</div> <div data-redactor="1">#&nbsp;&nbsp; command: command to run (use %player% as placeholder)</div> <div data-redactor="1">#&nbsp;&nbsp; message: (optional) message to send to the player</div> <div data-redactor="1">constant:</div> <div data-redactor="1">&nbsp; two_hours:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; material: DIAMOND</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; name: "&amp;b%interval%"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; lore:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;7Earn a reward every &amp;b%interval%&amp;7."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - ""</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fReward: &amp;a%reward%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fType: &amp;bConstant"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; interval: 7200 # 2 hours</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; command: "eco give %player% 100"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; message: "&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;e&diams; &amp;fYou received &amp;a$100 &amp;ffor reaching 2 hours played!"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; gui-interval: "2 hours"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; reward-desc: "$100"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; permissions-required: []</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1"># Unique rewards are given ONCE when total playtime reaches the threshold.</div> <div data-redactor="1">unique:</div> <div data-redactor="1">&nbsp; one_day:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; unique:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; material: EMERALD</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; name: "&amp;a%interval%"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; lore:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;7Earn a special reward for"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;7hitting a specific milestone."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - ""</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fReward: &amp;a%reward%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fType: &amp;aUnique"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; achieved:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; material: LIME_WOOL</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; name: "&amp;aAchieved - %interval%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; lore:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;7You've already achieved this reward."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - ""</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;fReward: &amp;a%reward%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;fType: &amp;aUnique"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; at: 86400&nbsp; # 24 hours</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; command: "give %player% diamond 5"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; message: "&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;e&diams; &amp;b24 hour &amp;fmilestone reached! Enjoy &amp;b5 diamonds&amp;f."</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; gui-interval: "1 day"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; reward-desc: "5x diamonds"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; permissions-required:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - playtime.rewards.unique1</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - playtime.rewards.rank1</div> <div data-redactor="1">&nbsp;</div> <div data-redactor="1"># Per-session rewards can be earned once per calendar day</div> <div data-redactor="1"># when the player's playtime for that day reaches the interval.</div> <div data-redactor="1">per-session:</div> <div data-redactor="1">&nbsp; daily_half_hour:</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; material: GOLD_INGOT</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; name: "&amp;6%interval%"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; lore:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;7Come back every day and"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;7play for at least &amp;b%interval%&amp;7!"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - ""</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fReward: &amp;a%reward%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - "&amp;fType: &amp;6Per-session"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; achieved:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; material: LIME_WOOL</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; name: "&amp;aAchieved - %interval%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; lore:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;7You've already achieved this reward."</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - ""</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;fReward: &amp;a%reward%"</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; - "&amp;fType: &amp;aUnique"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; interval: 1800 # 30 minutes in a single day</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; command: "crate key give %player% daily 1"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; message: "&amp;bᴘʟᴀʏᴛɪᴍᴇ &amp;e&diams; &amp;fThank you for playing &amp;b30 minutes &amp;ftoday! &mdash; Here&rsquo;s a daily key!"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; gui-interval: "30 minutes"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; reward-desc: "1x Daily Key"</div> <div data-redactor="1">&nbsp;&nbsp;&nbsp; permissions-required:</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - playtime.rewards.per-session1</div> <div data-redactor="1">&nbsp;&nbsp; &nbsp;&nbsp; - playtime.rewards.rank1[/code][/SPOILER]
 
 
Support »
The quickest way to get support for any of my resources
would be to join my Resource Discord.
 
Note »
Please DO NOT leave bad reviews for any issues
that you have. Please simply PM me or leave it
in the discussion tab. Thank you. (y)
 
That and reviews are highly appreciated! :alien:
 

The PlayerPlayTime Team

profile avatar
  • 1
    Projects
  • 264
    Downloads