
About
DailyStreak turns consistent play into real rewards. It tracks active playtime — not just logins — toward a daily streak, hands out fully configurable rewards for showing up, and exposes everything through PlaceholderAPI and a clean developer API. Drop it in, edit a config, done.
Streak Tracking
DailyStreak measures genuine active playtime, not just whether a player logged in and alt-tabbed away. A day only counts once a player has actually put in the required time, so streaks reflect real engagement — not clock-farming.
Reward
Every streak day can carry its own reward, with support for multiple commands per day — items, economy payouts, permissions, anything your server needs. Admins can add, replace, remove, or list reward commands entirely from in-game, no restart required.
Leaderboard & Placeholder
/streak top gives players a live leaderboard to compete over, while a full set of PlaceholderAPI placeholders — current streak, highest streak, today's progress, remaining playtime — plug straight into scoreboards, tab lists, and chat formats from any other plugin.
Commands
| Command | Description |
|---|---|
/streak / /streak info |
Show current streak information |
/streak progress |
Show today's active playtime progress |
/streak top |
Show the leaderboard |
/streak reload |
Reload config, rewards, and messages |
/streak reset <player> |
Reset a player's streak |
/streak set <player> <days> |
Set a player's streak |
/streak give <player> <days> |
Add days to a player's streak |
/streak reward add <day> <command> |
Append a reward command |
/streak reward set <day> <command> |
Replace reward commands for a day |
/streak reward remove <day> <index> |
Remove a reward command by index |
/streak reward list |
List reward commands |
/streak debug |
Show runtime diagnostics |
/streak migrate |
Ensure database schema exists |

Permission
| Permission | Description |
|---|---|
dailystreak.use |
Basic player commands |
dailystreak.admin |
All admin actions |
dailystreak.reload |
Reload command |
dailystreak.reward |
Reward editor commands |
dailystreak.modify |
Reset, set, and give commands |
dailystreak.top |
Leaderboard command |

Placeholder
Used internally in DailyStreak's own messages and reward commands:
%player% %uuid% %streak% %highest_streak% %today% %today_playtime% %required_playtime% %remaining_playtime% %completed_today%
Registered with PlaceholderAPI for use in other plugins (scoreboards, tab lists, chat formats):
%dailystreak_streak% %dailystreak_highest_streak% %dailystreak_today_playtime% %dailystreak_remaining_playtime% %dailystreak_completed_today%

Developer Api
DailyStreakApi api = DailyStreakApiProvider.get();
api.getCurrentStreak(player.getUniqueId()).thenAccept(streak ->
player.sendMessage("Current streak: " + streak)
);
Every API method that reads or mutates persistent data returns a CompletableFuture and is safe to call from the main thread.

Installation
Standard Installion
- Download the latest
DailyStreak-*.jarfrom the Files tab on this page. - Drop it into your server's
plugins/folder. - Restart or reload your server.
- Edit
plugins/DailyStreak/config.ymlto taste, then run/streak reload.
⚠️ Requires Java 21 and Paper 1.20+. Optional: PlaceholderAPI for cross-plugin placeholders.

Features
- Real activity tracking — measures active playtime, not just logins
- Configurable rewards — per-day, multi-command reward chains
- Built-in leaderboard —
/streak top, no extra plugin needed - PlaceholderAPI support — 5 placeholders exposed for other plugins
- Async developer API — thread-safe
CompletableFuture-based hooks - Full admin toolkit — reset, set, give, reward editor, debug, migrate

FAQ
Does this work with any Paper server? Yes — DailyStreak avoids version-pinned internals and sticks to stable Bukkit/Paper APIs, so it targets forward compatibility across Paper 1.20+.
Do I need PlaceholderAPI? No — it's optional. Without it, DailyStreak's own internal placeholders still work in its messages and reward commands; PlaceholderAPI just exposes them to other plugins.
Can I use this on a pay-to-win server? Not if you're selling streak-related advantages (paid resets, day-skips, boosted rewards) for real money — see the License section below.
Is the developer API safe to call from the main thread?
Yes — every method that reads or writes persistent data returns a CompletableFuture and is safe to call from the main thread.

License
DailyStreak is source-available, not permissively licensed:
- ✅ Free to use, self-host, and modify on any server that doesn't sell gameplay advantages
- ✅ Free to fork and contribute back
- ✅ Free to redistribute (unmodified or modified), provided the license travels with it
- ❌ May not be used on servers selling streak-related advantages for real money
- ❌ May not be sold, sublicensed, or bundled into a paid plugin without permission
Full text: LICENSE

🐛 Report a bug or request a feature 💬 Ask a question 📦 Source code