Daily Rewards
PluginLicenseRef-All-Rights-Reserved

Daily Rewards

A dependency-free daily reward plugin. Players run /daily (or get it on login) to claim a weighted-random reward once per day. Rewards give items and/or run console commands, so money, keys and ranks route through your existing plugins. No Vault.

34
Downloads
0
Followers
4 weeks ago
Updated
📦
1
Versions

📖About Daily Rewards

DailyRewards

A dependency-FREE daily reward plugin. Players run /daily to claim, once per
cooldown, a reward picked from a configured pool. Rewards grant items and/or run
console commands, so money, crate keys, ranks, and anything else are handed out
through whatever other plugin you already run - without DailyRewards depending
on Vault or any economy library.

The point: an old daily-reward plugin died when a runtime dependency rotted.
This one has zero external/runtime dependencies - it uses only the Bukkit
API. Nothing to break.

What it does

  • /daily claims a reward once per cooldown (default 24 hours).
  • The reward is chosen by weighted-random (default), random, or all.
  • Each reward can give items, run console commands (with a {player}
    placeholder), and show a message - any combination.
  • Cooldowns persist per player UUID in cooldowns.yml across restarts.
  • If a player's inventory is full, overflow items are dropped at their feet
    (configurable to deny instead).

Why no economy dependency

Instead of calling Vault or an economy API at compile time, reward entries can
list console commands. Want to pay 500 coins? Add
"eco give {player} 500" to that reward's commands. Want to give a crate key?
"crate give {player} vote 1". DailyRewards just dispatches the command as the
console - it does not know or care which plugin handles it, and it will not fail
to load if that plugin is missing (the command simply errors in console and is
logged).

Commands

All under /daily (aliases: /dailyreward, /dailyrewards).

Command Description
/daily Claim your daily reward.
/daily give <player> [--force] Make a player claim. Runnable from console and command blocks. --force bypasses the cooldown (and does NOT consume the player's real timer).
/daily reload Reload config.yml.
/daily reset <player> Clear a player's cooldown.

Tab-completion covers subcommands, online player names, and --force.

Console and automation

/daily give <player> is built to run from the server console and from command
blocks, so a scheduler or a returning Geyser setup can hand out rewards. The
target player must be online (items and {player} commands need a live player).
--force skips the cooldown check.

Bedrock players via Geyser just run /daily like everyone else - there is no
special handling.

Permissions

Permission Default Grants
dailyrewards.use true Claim with /daily.
dailyrewards.admin op give, reload, reset (includes dailyrewards.use).

The console always passes permission checks, so give/reload/reset work
from console and command blocks out of the box.

Configuration (config.yml)

Key Default Meaning
cooldown-seconds 86400 Seconds between claims per player.
reward-mode weighted-random weighted-random, random, or all.
overflow drop drop overflow at the player's feet, or deny (skip) it.
rewards (sample pool) The reward pool - see below.
messages.* (defaults) All player-facing strings.

A reward entry

rewards:
  - id: rare-gem          # identifier (used in logs)
    weight: 9             # selection weight for weighted-random (higher = likelier)
    items:                # optional list of items to give
      - material: DIAMOND # Bukkit material name; invalid names are logged + skipped
        amount: 2
        name: "&bLucky Diamond"   # optional, supports & colour codes
        lore:                     # optional
          - "&7A rare find."
    commands:             # optional console commands; {player} = claimer's name
      - "say {player} found a gem!"
    message: "&bDaily reward: a rare gem!"   # optional chat line

weight is only used by weighted-random. A single-entry pool always returns
that entry; if all weights are 0 the plugin falls back to a uniform pick so the
pool still pays out.

Messages

Supports & colour codes. Placeholders: {time} (human-readable remaining
cooldown like 5h 12m 3s) and {player}.

prefix, cooldown, claimed, no-reward, overflow-dropped,
overflow-denied.

Compatibility

Paper / Spigot / Bukkit / Purpur, Minecraft 1.21.1-1.21.11. One jar, built
against the 1.21.1 API (Java 21, class 65), load-tested on Paper 1.21.11; no
Paper-only classes, no NMS, no dependencies.

Known gaps / honesty

  • Not playtested in a live client/server - there is no Minecraft client in
    this build environment. The plugin compiles cleanly, the jar bundles a valid
    plugin.yml (version 1.0.0), and every class is Java-21 bytecode (class 65),
    but in-game behaviour has not been verified by hand.
  • /daily give and the item grant require the target to be online. There is
    no queued/offline delivery - an offline target is reported, not queued.
  • /daily reset resolves offline players via the server's offline-player cache,
    which only knows players who have joined before.
  • Reward console commands are fire-and-forget; DailyRewards does not check
    whether the downstream plugin actually succeeded (it only catches and logs
    exceptions). This is by design to keep it dependency-free.

Original concept by u/DiamondKing1437 on Reddit (r/Minecraft). Built by BeansNToast.