Challenges
The challenge system provides daily and weekly objectives that grant bonus XP and Season Tokens. Challenges are defined per season and randomly rotated for each player.
Challenge Definition
Each challenge in the dailyChallenges or weeklyChallenges arrays:
| Field | Type | Default | Description |
|---|---|---|---|
id | string | — | Unique challenge ID (e.g., daily_mine_50) |
name | string | — | Display name |
description | string | — | Description text |
type | string | — | Challenge type (see below) |
target | string | "any" | Specific target or "any" for wildcard |
count | int | — | Completion count required |
xpReward | int | — | XP granted on completion |
tokenReward | int | 0 | Tokens granted on completion |
weight | int | 10 | Selection weight (higher = more likely) |
iconItem | string | — | Item ID for UI display |
descriptionKey | string | — | Optional i18n key for localized description |
premiumOnly | boolean | false | Only available to premium pass holders |
Challenge Types
| Type | Description | Target Examples |
|---|---|---|
break_block | Break blocks | "any", "Stone", "Ore_Iron" |
place_block | Place blocks | "any", "Wood_Oak" |
mob_kill | Kill mobs | "any", "Skeleton", "Trork" |
player_kill | PvP kills | "any" |
harvest | Harvest crops | "any", "Wheat" |
flower_pick | Pick flowers | "any" |
zone_discover | Discover zones | "any" |
playtime | Minutes played | — (count = minutes) |
travel | Blocks traveled | — (count = blocks) |
When target is "any", any block/mob/zone counts. When a specific ID is provided, only that exact type counts toward progress.
Rotation System
Slot Configuration
| Field | Type | Default | Description |
|---|---|---|---|
dailyChallengeSlots | int | 3 | Number of daily challenges shown |
weeklyChallengeSlots | int | 3 | Number of weekly challenges shown |
Selection Algorithm
- Weighted Random — Challenges with higher
weightvalues are more likely to be selected - Without Replacement — Each rotation picks unique challenges (no duplicates)
- Per-Player Seed — Each player sees a different rotation based on:
playerUuid.hashCode() + dayOfEpoch + offset - Deterministic — Same player sees the same challenges all day (or all week)
Reset Schedule
- Daily Challenges: Reset at midnight in the configured timezone
- Weekly Challenges: Reset every Monday at midnight
Challenges are reset when the player next logs in or opens the Season Pass UI — not at a fixed server time. This means a player who is offline for several days will get fresh challenges when they return.
Premium Challenges
Premium pass holders get additional challenge slots beyond the regular rotation.
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
premiumDailyChallengeSlots | int | 2 | Extra daily challenges for premium |
premiumWeeklyChallengeSlots | int | 1 | Extra weekly challenges for premium |
Behavior
- Premium challenges are drawn from challenges with
premiumOnly: true - Non-premium players see a lock box instead of premium challenges, with the configured
premiumHintText - Premium challenge progress is only tracked for premium players (backend guard)
- Premium challenges use the same weighted random rotation as regular challenges
If a player loses premium status, their premium challenge progress is frozen but not deleted. If they regain premium, progress resumes.
Type Deduplication
The challenge rotation enforces type deduplication within each category:
- Within a category (Daily or Weekly): Maximum 1 challenge per type
- Cross-category: Daily and Weekly may share the same type
Example
If the daily pool contains:
daily_mine_50(type:break_block)daily_mine_100(type:break_block)daily_kill_10(type:mob_kill)
Only one break_block challenge can be selected for the daily rotation. The second break_block challenge is skipped in favor of a different type.
This ensures variety in the daily/weekly challenge lineup and prevents players from seeing repetitive objectives.
Example Challenges
Daily Challenges
"dailyChallenges": [
{
"id": "daily_mine_50",
"name": "Miner",
"description": "Mine 50 blocks",
"type": "break_block",
"target": "any",
"count": 50,
"xpReward": 100,
"tokenReward": 5,
"weight": 15,
"iconItem": "Tool_Pickaxe_Iron"
},
{
"id": "daily_kill_10",
"name": "Monster Slayer",
"description": "Kill 10 mobs",
"type": "mob_kill",
"target": "any",
"count": 10,
"xpReward": 150,
"tokenReward": 8,
"weight": 15,
"iconItem": "Weapon_Longsword_Iron"
},
{
"id": "daily_travel_1000",
"name": "Wanderer",
"description": "Travel 1000 blocks",
"type": "travel",
"target": "any",
"count": 1000,
"xpReward": 75,
"tokenReward": 3,
"weight": 10,
"iconItem": "Deco_Compass"
}
]
Weekly Challenges
"weeklyChallenges": [
{
"id": "weekly_mine_500",
"name": "Deep Miner",
"description": "Mine 500 blocks this week",
"type": "break_block",
"target": "any",
"count": 500,
"xpReward": 500,
"tokenReward": 25,
"weight": 15,
"iconItem": "Tool_Pickaxe_Cobalt"
},
{
"id": "weekly_kill_50",
"name": "Hunter",
"description": "Kill 50 mobs this week",
"type": "mob_kill",
"target": "any",
"count": 50,
"xpReward": 750,
"tokenReward": 40,
"weight": 15,
"iconItem": "Weapon_Longsword_Cobalt"
}
]
UI Display
In the Season Pass Challenges tab:
- 3 Daily Challenges shown at the top with progress bars
- 3 Weekly Challenges shown below
- Completed challenges display a green checkmark
- Each challenge shows: name, progress (
X/Y), XP reward, and token reward (e.g., "+100 XP | +5 T") - Reset countdown displayed per section ("Resets in: Xh Ym")