playtime reward
A powerful and flexible playtime reward plugin that automatically rewards your players for their time spent on your server!
playtime reward
> A flexible playtime reward plugin that automatically rewards your players for their time spent on your server!
🌟 Features
Core Features
- ⏰ Permission-Based - Automatically reward players based on their playtime - 🎁 Permission-Based - Customize everything: items, amounts, intervals, messages - 💾 Permission-Based - Stores rewards when inventory is full for later collection - 📊 Permission-Based - Tracks total playtime, session time, and reward history - 🎨 Permission-Based - Custom messages, sounds, particles, and actionbar countdowns - 🛠️ Permission-Based - Comprehensive commands to manage and monitor player rewards - 💪 Permission-Based - Efficient tracking with auto-save system - 🔒 Permission-Based - Control who receives rewards and who has admin access
Advanced Features
- Tab Completion - Never lose rewards! They're stored automatically - Tab Completion - Any Minecraft item with custom names and lore - Tab Completion - Players see countdown in their actionbar - Tab Completion - Greet players with playtime information on join - Tab Completion - Minimum online time requirement before earning rewards - Tab Completion - Configurable limit to prevent abuse - Tab Completion - All data saved automatically and persists across restarts - Tab Completion - All commands support tab completion for better UX
---
📥 Installation
Prerequisites
- Paper or Spigot server running Minecraft 1.21+ - Java 17 or higher installed on your server
Steps
1. Reload the latest `PlaytimeReward-1.0.0.jar` file 2. Reload your Minecraft server 3. Reload the JAR file in your server's `plugins` folder 4. Reload your server 5. The plugin will create a `PlaytimeReward` folder with default configuration 6. Reload the plugin by editing `plugins/PlaytimeReward/config.yml` 7. Reload the plugin with `/ptr reload` or restart the server
Verification
After installation, verify the plugin is working: ``` > plugins [10:00:00 INFO]: Plugins (1): PlaytimeReward ```
---
⚙️ Configuration
The plugin generates a `config.yml` file in `plugins/PlaytimeReward/` with extensive customization options.
Basic Configuration
Reward Settings
```yaml reward:
Time in seconds between each reward
interval: 300 # 5 minutes (300 seconds)
Item to give as reward (use Minecraft material names)
Examples: DIAMOND, EMERALD, GOLD_INGOT, IRON_INGOT, NETHERITE_INGOT
item: DIAMOND
Amount of items to give per reward
amount: 1
Custom display name for the reward item (optional)
Use & for color codes (&a = green, &b = blue, etc.)
display-name: "&b&lPlaytime Reward"
Lore for the reward item (optional)
lore: - "&7Thank you for playing!" - "&7Earned from playtime" ```
Message Customization
All messages support Minecraft color codes (`&` format): ```yaml messages:
Message when player receives reward
reward-received: "&a&l✦ &aYou received &e{amount}x {item} &afor playing!"
Message when inventory is full
inventory-full: "&c&l⚠ &cYour inventory is full! &7Reward saved. Use &e/ptr claim &7to claim it later."
Message when claiming stored rewards
rewards-claimed: "&a&l✦ &aYou claimed &e{amount} &astored reward(s)!"
Message when no rewards to claim
no-rewards: "&c&l✦ &cYou don't have any stored rewards!"
Message for next reward countdown
next-reward: "&b&l⏰ &bNext reward in: &e{time}"
Welcome message on join
welcome: "&a&l✦ &aWelcome back! You'll earn rewards every &e{interval} &aof playtime!" ```
Feature Toggles
```yaml features:
Send welcome message when player joins
welcome-message: true
Show actionbar with time until next reward
actionbar-countdown: true
Play sound when reward is received
reward-sound: true sound: ENTITY_PLAYER_LEVELUP
Enable particle effects when giving reward
reward-particles: true particle: TOTEM_OF_UNDYING ```
Advanced Settings
```yaml advanced:
Auto-save player data (in minutes)
auto-save-interval: 5
Reset playtime on server restart (not recommended)
reset-on-restart: false
Maximum stored rewards per player (prevents abuse)
max-stored-rewards: 100
Minimum online time to start earning (in seconds)
Prevents AFK farmers at spawn
minimum-online-time: 60 ```
Configuration Examples
Example 1: Give 3 Emeralds every 10 minutes ```yaml reward: interval: 600 item: EMERALD amount: 3 ```
Example 2: Give 1 Netherite Ingot every hour ```yaml reward: interval: 3600 item: NETHERITE_INGOT amount: 1 display-name: "&6&l⭐ &ePremium Hour Reward &6&l⭐" lore: - "&7You've played for 1 hour!" - "&eThank you for your dedication" ```
Example 3: Quick rewards for testing (30 seconds) ```yaml reward: interval: 30 item: DIAMOND amount: 5 ```
Available Items
You can use any valid Minecraft material name. Common examples: - `DIAMOND`, `EMERALD`, `GOLD_INGOT`, `IRON_INGOT` - `NETHERITE_INGOT`, `ANCIENT_DEBRIS` - `ENCHANTED_GOLDEN_APPLE`, `GOLDEN_APPLE` - `ELYTRA`, `TOTEM_OF_UNDYING` - `EXPERIENCE_BOTTLE`, `BEACON`
See Spigot Material List for all available materials.
---
📜 Commands
All commands use the `/ptr` prefix (alias for `/playtimereward`).
Player Commands
| Command | Description | Permission | |---------|-------------|------------| | `/ptr info` | Displays your playtime statistics | None (default) | | `/ptr claim` | Claims your stored rewards | None (default) |
Admin Commands
| Command | Description | Permission | |---------|-------------|------------| | `/ptr reload` | Reloads the configuration | `PlaytimeReward.admin` | | `/ptr check <player>` | Views a player's statistics | `PlaytimeReward.admin` | | `/ptr reset <player>` | Resets a player's playtime data | `PlaytimeReward.admin` | | `/ptr save` | Manually saves all player data | `PlaytimeReward.admin` |
Command Details
`/ptr info`
Shows your personal playtime information: - Total playtime - Current session time - Time until next reward - Number of stored rewards (if any)
Example Output: ``` === Your Playtime Info === Total Playtime: 2 hours 45 minutes 30 seconds Current Session: 15 minutes 10 seconds Next Reward: 4 minutes 30 seconds Stored Rewards: 3 (Use /ptr claim) ```
`/ptr claim`
Claims all stored rewards that were saved due to full inventory.
Example Output: ``` ✦ You claimed 5 stored reward(s)! ```
`/ptr reload`
Reloads the plugin configuration without restarting the server.
Use Case: After editing config.yml
`/ptr check <player>`
Views detailed statistics for any player.
Example Output: ``` === Steve's Playtime Data === Total Playtime: 2 hours 45 minutes 30 seconds Time Since Last Reward: 4 minutes 20 seconds Stored Rewards: 3 Current Session: 15 minutes 10 seconds ```
`/ptr reset <player>`
⚠️ WARNING: Permanently resets all playtime data for a player. Cannot be undone!
`/ptr save`
Forces an immediate save of all player data to disk.
Use Case: Before server maintenance or manual file edits
---
🔐 Permissions
| Permission | Description | Default | |------------|-------------|---------| | `PlaytimeReward.receive` | Allows receiving playtime rewards | `true` (everyone) | | `PlaytimeReward.admin` | Allows using admin commands | `op` (operators only) |
Permission Examples
Give admin permission to a moderator: ```yaml
Using LuckPerms
/lp user Moderator permission set PlaytimeReward.admin true ```
Remove receive permission from a player: ```yaml
Using LuckPerms
/lp user Player permission set PlaytimeReward.receive false ```
Group permissions (in your permissions plugin): ```yaml groups: default: permissions: - PlaytimeReward.receive moderator: permissions: - PlaytimeReward.admin ```
---
📖 Usage Guide
For Players
Joining the Server
When you join, you'll see a welcome message (if enabled): ``` ✦ Welcome back! You'll earn rewards every 5 minutes of playtime! ```
Earning Rewards
Simply play on the server! Every configured interval (default 5 minutes), you'll automatically receive a reward: ``` ✦ You received 1x diamond for playing! [Sound and particle effects play] ```
Full Inventory
If your inventory is full, the reward is automatically stored: ``` ⚠ Your inventory is full! Reward saved. Use /ptr claim to claim it later. ```
Checking Your Progress
Use `/ptr info` to see: - How long until your next reward - Your total playtime - Any stored rewards waiting
Claiming Stored Rewards
When you have inventory space, use `/ptr claim` to collect all stored rewards at once.
For Admins
Monitoring Players
Check any player's statistics: ``` /ptr check PlayerName ```
Testing the System
Give yourself a test reward: ``` /ptr check YourName # Check your current data
(Wait for automatic reward or adjust config for testing)
```
Changing Configuration
1. Edit `plugins/PlaytimeReward/config.yml` 2. Run `/ptr reload` 3. Changes apply immediately
Managing Player Data
- Force save: `/ptr check <player>` - Force save: `/ptr reset <player>` (use cautiously) - Force save: `/ptr save` (before maintenance)
---
💾 Data Storage
Files Created
``` plugins/ └── PlaytimeReward/ ├── config.yml # Plugin configuration └── playerdata.yml # Player playtime data ```
Player Data Structure
The `playerdata.yml` file stores: - UUID-based player identification - Total playtime (in seconds) - Last reward timestamp - Stored (unclaimed) rewards - Session information
Data Persistence
Player data is automatically saved: - When a player disconnects - Every 5 minutes (configurable) - When the server stops - When `/ptr save` is executed
---
🔧 Troubleshooting
Common Issues
Issue: Players not receiving rewards
Solutions: 1. Check player has `PlaytimeReward.receive` permission 2. Verify config interval setting: `/ptr reload` 3. Check player data: `/ptr check <player>` 4. Ensure `minimum-online-time` requirement is met
Issue: Invalid material error in console
Solutions: 1. Check your `reward.item` setting in config.yml 2. Use valid Minecraft 1.21+ material names 3. See Solutions: 4. Reload config: `/ptr reload`
Issue: Commands not working
Solutions: 1. Verify permissions are set correctly 2. Check console for errors 3. Ensure player is online (for check/reset commands) 4. Try using the full command: `/playtimereward` instead of `/ptr`
Issue: Data not saving
Solutions: 1. Check file permissions on server 2. Look for errors in console 3. Manually trigger save: `/ptr save` 4. Verify plugin folder exists and is writable
Issue: Rewards given too frequently/slowly
Solutions: 1. Check `reward.interval` in config.yml (value is in seconds) 2. Use `/ptr reload` after changing 3. Example: 300 = 5 minutes, 600 = 10 minutes, 3600 = 1 hour
Getting Help
If you need additional support: 1. Check console logs for error messages 2. Verify your configuration is valid YAML syntax 3. Join our Discord server: https://discord.gg/cybycQ9wGp
---
📊 Performance
Resource Usage
- Network: Minimal (<5MB for typical server) - Network: Very light (single async task every second) - Network: Small data file (YAML format) - Network: No network operations
Optimization Tips
1. Adjust `auto-save-interval` based on player count 2. Set appropriate `max-stored-rewards` limit 3. Use `minimum-online-time` to reduce unnecessary checks 4. Consider longer intervals for high-population servers
Tested Performance
- ✅ Works efficiently with 100+ concurrent players - ✅ No noticeable TPS impact - ✅ Fast data saving (<100ms) - ✅ Minimal memory footprint
---
🚀 Roadmap
Potential features for future versions: - [ ] Multiple reward tiers based on total playtime - [ ] Discord webhook integration for milestones - [ ] MySQL/PostgreSQL database support - [ ] PlaceholderAPI integration - [ ] Per-world reward configuration - [ ] Reward multipliers for events/boosters - [ ] GUI for viewing statistics - [ ] Reward history tracking
🤝 Support
Bug Reports
If you find a bug, please report it with: - Plugin version - Server software and version - Steps to reproduce - Console errors (if any)
Feature Requests
Have an idea? Share it with details about: - What you want to achieve - How it would benefit users - Example use cases
Discord Community
Join our Discord server for support, updates, and community discussion: https://discord.gg/cybycQ9wGp
---
📜 License
This plugin is free to use for your server.
Terms
- ✅ Licensed for use on any server - ❌ Modification for personal purposes is prohibited - ❌ Redistribution, even with credit, is prohibited - ❌ Commercial resale is prohibited - ❌ No warranty or guarantee is provided
---
👨💻 Author
Yenith
---
⭐ Thank You!
Thank you for using PlaytimeReward! If you enjoy this plugin: - Share it with other server owners - Leave feedback and suggestions - Report bugs to help improve it - Consider supporting future development - Join our Discord community: https://discord.gg/cybycQ9wGp
---
Made with ❤️ for the Minecraft community
*Last Updated: 06 October 2025*