Configuration
config.yml controls global behavior; the actual reward tables live in separate menu files under menus/.
Reward mode
reward-mode selects which of two completely independent reward systems is active. Only one runs at a time, but switching back and forth doesn't erase the other mode's saved progress — each keeps its own separate data on disk.
DAILY
One reward per calendar day, no continuity requirement. A player can only claim their current day, once per calendar day — missing a day doesn't reset anything, it just sits there waiting to be claimed.
STREAK
Continuous claiming — a player can only claim the very next day in sequence, once per calendar day. Missing a day breaks the streak back to day 1 (subject to the grace period below).
reward-mode: "STREAK", but if this value is ever invalid/unparseable the plugin silently falls back to DAILY — not STREAK. Worth double-checking after a manual edit.Top-level config.yml keys
reward-mode: "STREAK" # DAILY or STREAK
colors:
primary-gold: "#C8A96E" # the only color key actually read — see below
light-gold: "#D4C5A9"
dark-gold: "#8B7355"
accent: "#C8A96E"
text: "#D4C5A9"
error: "#FF6B6B"
success: "#7CFC7C"
locked: "#808080"
storage:
type: "YAML" # not currently read by code — see Storage below
mysql: { host, port, database, username, password }
join-notification:
enabled: true
delay-ticks: 40
auto-claim:
enabled: true
streak:
reset-on-miss: true
grace-period-hours: 6
title-message:
enabled: false
daily-menu: "daily.yml"
streak-menu: "streak.yml"
rewards-per-page: 4
| Key | Default | Behavior |
|---|---|---|
join-notification.enabled | true | Global switch. If on (and the player's own setting is also on), sends a reminder message join-notification.delay-ticks after join, but only if they have ≥1 reward currently claimable. |
auto-claim.enabled | true | Global switch. Actual auto-claiming on join additionally requires the player's own auto-claim setting and the alpharewards.autoclaim permission. |
streak.reset-on-miss | true | Whether missing a day breaks the streak at all (STREAK mode only). |
streak.grace-period-hours | 6 | Only matters when the last streak claim was exactly 2 days ago: if it's still within this many hours past midnight, the streak isn't broken yet. Has no effect for gaps of 0–1 days (never breaks) or 3+ days (always breaks). |
title-message.enabled | false | If true, shows an on-screen title/subtitle (0.5s fade-in, 2.5s stay, 0.5s fade-out) in addition to the chat message on every successful claim. |
daily-menu / streak-menu | daily.yml / streak.yml | Filenames (relative to menus/) used depending on the active reward-mode. |
rewards-per-page | 4 | How many reward-day slots are shown per GUI page; page count = ceil(total days ÷ this number). |
Colors
colors.primary-gold actually does anything. It's used to replace legacy &e/&6 (yellow/gold) color codes throughout messages and menus with this hex value. The other seven keys (light-gold, dark-gold, accent, text, error, success, locked) exist purely as a reference of the hex values already hardcoded directly in the menu YAML files — editing them in config.yml has no effect on anything.Storage
storage.type and storage.mysql.* are present in config.yml but nothing in the plugin currently reads them. Every player's data is saved to its own YAML file under playerdata/ regardless of what this section says. See FAQ.Menu files — daily.yml / streak.yml
Loaded recursively from plugins/AlphaRewards/menus/ — every .yml file found is cached by its relative path (e.g. daily.yml, settings/settings.yml). Shipped defaults: daily.yml defines days 1–7, streak.yml defines days 1–12.
| Key | Meaning |
|---|---|
title, rows | GUI title and inventory row count. |
navigation | previous-page / next-page / settings button slot, material, name, lore. |
reward-slots | List of inventory slots — one template cloned across every page. |
rewards.<day> | One entry per reward day, keyed by day number. |
Reward-day states
Each day has three independent visual states — available, claimed, locked — each with its own material, name, lore, glow, and optional status-line.
Material name, material also accepts basehead-<base64> for a custom player-head skin texture (Paper's PlayerProfile API).Command tiers
Each day's commands block has a default command list, plus any number of named permission-gated tiers (vip, mvp, etc.) each with their own permission and commands list. Commands run as console (support the {player} placeholder) and are dispatched on the correct thread automatically on Folia.
rewards:
1:
available: { material: CHEST, name: "...", lore: [...] }
claimed: { material: MINECART, name: "..." }
locked: { material: GRAY_DYE, name: "..." }
commands:
default:
- "give {player} iron_ingot 64"
vip:
permission: "alpharewards.tier.vip"
commands:
- "give {player} iron_ingot 128"
- "eco give {player} 500"
Player data & persistence
Per-player YAML files at plugins/AlphaRewards/playerdata/<uuid>.yml, holding: current-day, last-claim-date, streak-count, last-streak-date, claimed-days, and the two personal settings toggles. Cached in memory, loaded asynchronously on join, saved asynchronously after every claim/setting change, and flushed synchronously for everyone on plugin disable.
