Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

HyperRewards

Latest ReleaseLicenseDiscordGitHub Stars

Advanced playtime tracking with rewards, milestones, leaderboards, and live stats for Hytale servers. Track every session down to the millisecond, reward your players automatically, and give them reasons to keep coming back.

Discord | Releases | Issues

Features

Playtime Rewards — Automatically grant rewards when players hit playtime thresholds. Run any console command as a reward: give items, currency, titles, or anything your server supports. Rewards can be one-time or repeatable per period, so daily/weekly incentives just work.

Per-World Rewards — Scope rewards to specific worlds. A reward set to world: "survival" only triggers for players in that world. Leave it blank to apply everywhere.

Milestones — Long-term progression system separate from rewards. Milestones can grant HyperPerms permissions, add players to permission groups, execute commands, send private messages, and broadcast announcements. Repeatable milestones reset each period.

Live Leaderboards — Real-time rankings that combine database history with active session data. Available as chat text or an interactive GUI. Supports daily, weekly, monthly, and all-time periods.

Player Lookup — Check any player's total playtime with /playtime check <player>. Works for offline players too.

Rest Reminders — Configurable periodic messages reminding players to take breaks after extended sessions. Interval and message are fully customizable.

Crash-Safe Sessions — Active sessions are saved periodically (~1 minute intervals) so player data survives unexpected server crashes or restarts. No more lost playtime.

HyperPerms Integration — Optional deep integration with HyperPerms. Grant permissions, assign groups, and check permission nodes through milestones. Fully reflection-based — runs standalone without HyperPerms installed.

Dual Database — SQLite out of the box, MySQL for networks. HikariCP connection pooling with automatic retry logic and exponential backoff. Database indexes on all hot query paths.

Fully Configurable — Every message, command name, alias, color, period label, and GUI string is customizable. Full & color code support with hex colors.

Quick Start

  1. Drop HyperRewards.jar in your mods/ folder
  2. Start your server
  3. Run /playtime to check your stats, or /playtime help for all commands
/playtime # Check your playtime
/playtime top daily # Daily leaderboard
/playtime rewards # View available rewards
/playtime milestones # Track milestone progress
/playtime check Steve # Look up another player

Commands

CommandPermissionDescription
/playtimeplaytime.checkCheck your total playtime
/playtime check <player>playtime.check.othersView another player's playtime
/playtime rewardsplaytime.checkList rewards and your claim status
/playtime milestonesplaytime.milestonesView milestone progress
/playtime top [period]playtime.topLeaderboard (daily/weekly/monthly/all)
/playtime menuplaytime.guiOpen the GUI leaderboard
/playtime versionShow plugin and integration info
/playtime helpShow command help
/playtime reloadplaytime.reloadReload configuration
/playtime adminplaytime.adminShow reward creation guide
/playtime admin addReward <id> <period> <time> <cmd>playtime.adminAdd a new reward
/playtime admin removeReward <id>playtime.adminRemove a reward
/playtime admin listRewardsplaytime.adminList all configured rewards
/playtime admin listMilestonesplaytime.adminList all configured milestones

Aliases:/pt, /play, /time (configurable)

All Permissions
PermissionDescription
playtime.checkCheck own playtime and view rewards
playtime.check.othersLook up another player's playtime
playtime.topView leaderboards
playtime.guiOpen the GUI leaderboard
playtime.milestonesView milestone progress
playtime.reloadReload configuration
playtime.adminFull admin access (add/remove rewards, list config)

Configuration

Config file: mods/HyperRewards/config.json (auto-generated on first run)

Database

SQLite (default) requires zero configuration. For MySQL:

{
"database": {
"type": "mysql",
"host": "localhost",
"port": 3306,
"databaseName": "hyperrewards",
"username": "root",
"password": "",
"useSSL": false
}
}
Rewards

Add rewards via /playtime admin addReward or directly in config:

{
"rewards": [
{
"id": "daily_gold",
"period": "daily",
"timeRequirement": 3600000,
"commands": ["give %player% gold 100"],
"broadcastMessage": "&6%player% &eclaimed the &6%reward% &ereward!",
"repeatable": true,
"world": ""
},
{
"id": "survival_veteran",
"period": "all",
"timeRequirement": 36000000,
"commands": ["give %player% diamond_sword 1"],
"broadcastMessage": "&6%player% &eis a Survival Veteran!",
"repeatable": false,
"world": "survival"
}
]
}
  • perioddaily, weekly, monthly, or all
  • timeRequirement — Milliseconds (1h = 3600000, 1d = 86400000)
  • repeatabletrue resets each period, false is one-time
  • world — Restrict to a specific world, or "" / null for all worlds
  • %player% — Replaced with the player's username in commands and messages
Milestones

Milestones are progression goals with rich actions:

{
"milestones": {
"enabled": true,
"list": [
{
"id": "10h_veteran",
"timeRequirement": 36000000,
"period": "all",
"grantPermissions": ["server.veteran.tag"],
"addToGroup": "veteran",
"broadcastMessage": "&6%player% &ehas reached &610 hours &eof playtime!",
"privateMessage": "&aCongratulations! You've earned the Veteran rank!",
"commands": ["give %player% emerald 64"],
"repeatable": false
}
]
}
}
  • grantPermissions — Grants permissions via HyperPerms (if installed)
  • addToGroup — Adds the player to a HyperPerms group
  • broadcastMessage — Public announcement (null to disable)
  • privateMessage — Message only the player sees (null to disable)
  • commands — Console commands to execute
  • repeatable — If true, can be re-triggered each period reset
Rest Reminders
{
"restReminder": {
"enabled": true,
"intervalMs": 7200000,
"message": "&e[HyperRewards] &7You've been playing for &e%session_time%&7. Consider taking a break!"
}
}

Sends a reminder after every intervalMs of continuous play (default: 2 hours).

Messages & GUI

Every player-facing string is configurable with & color codes:

{
"messages": {
"selfCheck": "&dTotal Playtime: &e%time%",
"otherCheck": "&d%player%'s Playtime: &e%time%",
"leaderboardHeader": "&6--- Playtime Leaderboard (&e%period_name%&6) ---",
"leaderboardEntry": "&6#%rank% &e%player% &7: &f%time%",
"rewardBroadcast": "&6%player% &ehas played for &6%time% &eand claimed the &6%reward% &ereward!"
},
"command": {
"name": "playtime",
"aliases": ["pt", "play", "time"],
"topStyle": "text"
},
"gui": {
"title": "LEADERBOARD",
"buttonAll": "ALL TIME",
"buttonDaily": "DAILY",
"buttonWeekly": "WEEKLY",
"buttonMonthly": "MONTHLY"
}
}

Set "topStyle": "gui" to open the interactive leaderboard GUI when players run /playtime top.

HyperPerms Integration
{
"integrations": {
"hyperPermsEnabled": true
}
}

When HyperPerms is installed, milestones can grant permissions and assign groups automatically. The integration is reflection-based and fully optional — HyperRewards runs standalone without it.

Check integration status in-game with /playtime version.

For Developers

API Usage
HyperRewardsAPIapi = HyperRewardsAPI.get();
// Get player playtime (returns milliseconds)longtotal = api.getPlaytime(uuid, "all");
longdaily = api.getPlaytime(uuid, "daily");
// Format time for displayStringformatted = api.formatTime(total); // "2h 15m 30s"
Building from Source

Requirements: Java 25, Gradle 9.2+

All dependencies resolve automatically. The Hytale Server API comes from maven.hytale.com.

./gradlew shadowJar
# Output: build/libs/HyperRewards-<version>.jar

Build variants:

./gradlew buildRelease # Build against latest Hytale release
./gradlew buildPreRelease # Build against latest Hytale pre-release
./gradlew buildDev # Dev build with version 0.0.0

Acknowledgements

HyperRewards is a continuation of Advanced Playtime by ItsZib. The original project laid an amazing foundation — session tracking, leaderboards, rewards, the GUI system, and MySQL support were all built by ItsZib. We're grateful for the privilege of continuing this project and building on that work.

Contributors to the original project: shreyjain14 (MySQL support fix).

Links


Part of the HyperSystems suite: HyperPerms | HyperRewards | HyperEssentials | HyperFactions

About

HyperRewards tracks player sessions down to the millisecond, supports local and remote databases, and provides real-time live leaderboards without affecting server performance.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages