Skip to content

Daily Rewards

Jan Kluka edited this page Jun 29, 2026 · 2 revisions

Daily Rewards

The Daily Rewards module gives players a reason to log in every day. Each day they can claim one reward from a configurable cycle; claiming on consecutive days builds a streak that walks through the cycle and unlocks milestone bonuses. Missing a day resets the streak. Claims also grant Battle Pass XP.


Overview

Feature Details
Storage Database
Cycle Unlimited number of days
Streaks Tracks current & longest streak, resets if a day is missed
Milestones Bonus rewards at any streak values you choose
Day boundary Configurable timezone & reset hour
Battle Pass XP Configurable per claim
Join prompt Players are notified on join when a reward is ready

Commands

/daily   Open the daily rewards menu (aliases: /dailyreward, /dailyrewards)

How Streaks Work

  • The first claim starts the streak at 1 and grants cycle day 1.
  • Claiming again the next day increases the streak and advances to the next cycle day.
  • The cycle loops: after the last day it returns to day 1 (the streak keeps counting up).
  • Missing a day resets the streak back to 1 on the next claim.
  • A "day" is defined by the configurable timezone and reset-hour (claims before the reset hour count toward the previous day).

Creating Unlimited Cycle Days & Milestones

There is no cap on the cycle length or the number of milestones.

timezone: ""        # empty = server timezone, or e.g. "Europe/Bratislava"
reset-hour: 0       # hour a new claim becomes available
pass-xp: 100        # Battle Pass XP granted per claim

cycle:
  1:
    display:
      material: PAPER
      name: "<white>Day 1"
      lore:
        - "<gray>Reward: <green>$10,000"
        - "%status%"
    rewards:
      commands: ["money give %player% 10000"]
      messages: ["<green>+ $10,000"]
      sound: ENTITY_PLAYER_LEVELUP
  2:
    display: { material: PAPER, name: "<white>Day 2", lore: ["<gray>Reward: <aqua>100 Tokens", "%status%"] }
    rewards:
      commands: ["tokens give %player% 100"]
      messages: ["<aqua>+ 100 Tokens"]
  # ...add as many days as you like

milestones:
  7:
    rewards:
      commands: ["gems give %player% 50"]
      messages: ["<gold>7-day streak bonus: <green>+ 50 Gems!"]
      sound: UI_TOAST_CHALLENGE_COMPLETE
  30:
    rewards:
      commands: ["gems give %player% 300", "tokens give %player% 10000"]
      messages: ["<gold>30-day streak bonus!"]

A milestone is granted in addition to the cycle reward when the streak reaches exactly that value. Every reward is a reward bundle — an unlimited list of commands (with %player%), messages, and an optional sound.

Tip: Make sure gui.cycle-slots has at least as many slots as your cycle has days, so every day is shown in the menu.


The Daily Rewards Menu

/daily opens a calendar-style menu showing every cycle day with its state — claimed, claimable (click to claim) or locked — plus an info icon with the player's current streak, longest streak and total claims, and a claim button. Day states, the claim buttons and the info icon are all configurable under gui in dailyrewards.yml.


Titles & Sounds

Claiming fires a configurable on-screen title and sound, set under effects: in dailyrewards.yml. A normal claim uses the claim block; a claim that lands on a streak milestone uses the (stronger) milestone block instead. Each block has an optional title (enabled, title, subtitle, fade-in/stay/fade-out in seconds) and an optional sound (enabled, sound, volume, pitch). Both ship on by default and support %streak% and %total%.

effects:
  claim:
    title:
      enabled: true
      title: "<gradient:#11998e:#38ef7d><bold>DAILY REWARD</bold></gradient>"
      subtitle: "<white>%streak%<gray>-day streak - keep it going!"
      fade-in: 1
      stay: 3
      fade-out: 1
    sound:
      enabled: true
      sound: ENTITY_PLAYER_LEVELUP
  milestone:
    title:
      enabled: true
      title: "<gold><bold>%streak%-DAY STREAK!</bold>"
      subtitle: "<white>Milestone bonus unlocked!"
    sound:
      enabled: true
      sound: UI_TOAST_CHALLENGE_COMPLETE

Sound names are standard Bukkit/XSound names.


Display Placeholders

In a cycle day's name/lore you can use %day% and %status%. The info icon supports %streak%, %longest_streak%, %total% and %can_claim%.


PlaceholderAPI

Placeholder Returns
%xprison_dailyrewards_streak% Current streak
%xprison_dailyrewards_longest_streak% Longest streak ever
%xprison_dailyrewards_total% Total rewards claimed
%xprison_dailyrewards_can_claim% Yes / No

Related Pages

Clone this wiki locally