Skip to main content

Seasons

Season definitions are stored as individual JSON files in configs/kyuubisoft_seasonpass/seasons/. Each file defines one season with its tiers, challenges, shop items and XP configuration.

File Structure

seasons/
├── season_1.json # First season
├── season_2.json # Second season (add as needed)
└── ...

The plugin automatically discovers all .json files in the seasons/ folder.

Metadata

FieldTypeDefaultDescription
idstringUnique season ID (matches filename without .json)
namestringDisplay name (e.g., "Season 1: Explorer")
descriptionstringSeason description
iconItemstringItem ID for the season icon
themeColorstring"#ffd700"Theme color (hex)

Timing

FieldTypeDefaultDescription
startDatestringStart date (set automatically by /spadmin start)
endDatestringEnd date (calculated from startDate + durationDays)
durationDaysint30Season duration in days
Manual Season Control

Seasons don't start/end automatically based on dates. Use /spadmin start <id> and /spadmin end to control the season lifecycle. The durationDays field is used for display and the auto-end check.

Tier System

FieldTypeDefaultDescription
tiersarrayList of 30 standard tier definitions
bonusTiersarrayList of 10 bonus tier definitions
baseXpPerTierint1000Base XP required for tier 1
tierXpScalingdouble1.08Exponential scaling factor

XP Curve Formula

The XP required for each tier follows an exponential curve:

XP for Tier N = baseXpPerTier * (tierXpScaling ^ (N - 1))

Example with defaults (base: 1000, scaling: 1.08):

TierXP RequiredCumulative XP
11,0001,000
51,3605,867
101,99914,487
152,93727,152
204,31645,762
256,34173,106
309,317113,283

Tier Definition

Each tier in the tiers and bonusTiers arrays:

FieldTypeDescription
tierintTier number (1-30 for standard, 31-40 for bonus)
iconItemstringItem ID for the tier icon
freeRewardsarrayRewards available to all players
premiumRewardsarrayRewards for premium pass holders only

See Rewards for reward type details.

XP Sources

The xpSources object defines how much XP each gameplay action grants:

FieldDefaultDescription
blockBroken1XP per block broken
blockPlaced1XP per block placed
mobKill10XP per mob killed
pvpKill25XP per player killed
playtimePerMinute5XP per minute played
zoneDiscovered50XP per zone discovered
blockHarvested2XP per crop harvested
flowerPicked3XP per flower picked
questCompleted100XP per quest completed
achievementUnlocked50XP per achievement unlocked
dailyLogin25XP for daily login
loginStreakPerDay10Bonus XP per login streak day
loginStreakMaxDays30Maximum streak days counted
Disabling XP Sources

Set any XP source to 0 to disable it. For example, set pvpKill to 0 on PvE-only servers.

XP Caps

FieldTypeDefaultDescription
dailyXpCapint0Hard daily XP limit (0 = unlimited)
dailyXpSoftCapint0XP threshold for reduced earning (0 = disabled)
softCapMultiplierdouble0.25XP multiplier after soft cap (0.25 = 75% reduction)

Soft Cap Example

With dailyXpSoftCap: 5000 and softCapMultiplier: 0.25:

  • First 5,000 XP earned at full rate
  • After 5,000 XP: every 100 XP earned only grants 25 XP
  • Prevents no-life grinding while still rewarding continued play

Premium Pass

FieldTypeDefaultDescription
premiumEnabledbooleantrueEnable the premium track
premiumCostint1000Cost in server currency
premiumCurrencyIdstring"gold"Currency ID (via Core ShopService)
premiumXpBoostdouble1.5XP multiplier for premium holders
premiumCommandOnlybooleanfalsePremium only via admin command (no /sp buy)
premiumHintTextstringnullCustom hint text for non-premium lock boxes
Disabling Premium

Set premiumEnabled to false to completely hide the premium track, purchase button, and lock overlays. All tiers become free-track only.

Token System

FieldTypeDefaultDescription
seasonTokenXpRatioint100XP per token earned (100 XP = 1 token)
firstLoginBonusXpint25XP bonus on first login of the season
firstLoginBonusTokensint5Token bonus on first login of the season

Challenge Slots

FieldTypeDefaultDescription
dailyChallengeSlotsint3Number of free daily challenges
weeklyChallengeSlotsint3Number of free weekly challenges
premiumDailyChallengeSlotsint2Extra daily challenges for premium
premiumWeeklyChallengeSlotsint1Extra weekly challenges for premium

Shop Slots

FieldTypeDefaultDescription
dailyShopSlotsint4Number of free shop slots
premiumDailyShopSlotsint2Extra shop slots for premium

Login & Streaks

Login streaks reward consistent daily play:

  • Each consecutive login day grants loginStreakPerDay bonus XP
  • Streak XP = min(currentStreak, loginStreakMaxDays) * loginStreakPerDay
  • Missing a day resets the streak to 0
  • First season login grants firstLoginBonusXp + firstLoginBonusTokens

Teaser Rewards

FieldTypeDescription
teaserRewardsarrayList of reward names shown in season preview

Used for marketing/preview purposes in the UI. Example:

"teaserRewards": [
"Grand Explorer Lootbag",
"Premium Tools",
"Exclusive Titles"
]

Prestige System

FieldTypeDefaultDescription
prestigeEnabledbooleanfalseEnable the prestige system
prestigeXpBoostPercentdouble5.0XP boost per prestige level (%)
maxPrestigeLevelint10Maximum prestige level
prestigeRewardsarray[]Rewards per prestige level

When a player reaches the maximum tier and prestigeEnabled is true, they can prestige to reset their tier progress while keeping a permanent XP boost. Each prestige level adds prestigeXpBoostPercent to the player's XP multiplier.

Prestige Rewards

Configure prestigeRewards as an array of reward objects (same format as tier rewards). Each entry corresponds to a prestige level (index 0 = prestige 1, etc.).

Full Example (Abbreviated)

{
"id": "season_1",
"name": "Season 1: Explorer",
"description": "Explore the world, fight monsters, and earn exclusive rewards!",
"iconItem": "Deco_Map",
"themeColor": "#00bcd4",
"durationDays": 30,
"baseXpPerTier": 1000,
"tierXpScaling": 1.08,
"dailyXpCap": 0,
"dailyXpSoftCap": 0,
"softCapMultiplier": 0.25,
"premiumEnabled": true,
"premiumCost": 1000,
"premiumCurrencyId": "gold",
"premiumXpBoost": 1.5,
"premiumCommandOnly": false,
"premiumHintText": null,
"premiumDailyChallengeSlots": 2,
"premiumWeeklyChallengeSlots": 1,
"premiumDailyShopSlots": 2,
"prestigeEnabled": false,
"prestigeXpBoostPercent": 5.0,
"maxPrestigeLevel": 10,
"prestigeRewards": [],
"seasonTokenXpRatio": 100,
"firstLoginBonusXp": 25,
"firstLoginBonusTokens": 5,
"dailyChallengeSlots": 3,
"weeklyChallengeSlots": 3,
"dailyShopSlots": 4,
"xpSources": {
"blockBroken": 1,
"blockPlaced": 1,
"mobKill": 10,
"pvpKill": 25,
"playtimePerMinute": 5,
"zoneDiscovered": 50,
"blockHarvested": 2,
"flowerPicked": 3,
"questCompleted": 100,
"achievementUnlocked": 50,
"dailyLogin": 25,
"loginStreakPerDay": 10,
"loginStreakMaxDays": 30
},
"tiers": [
{
"tier": 1,
"iconItem": "Ingredient_Bar_Copper",
"freeRewards": [
{ "type": "item", "itemId": "Food_Bread", "amount": 5, "description": "5x Bread" }
],
"premiumRewards": [
{ "type": "tokens", "tokens": 10, "description": "10 Season Tokens" }
]
}
],
"bonusTiers": [
{
"tier": 31,
"iconItem": "Ingredient_Bar_Cobalt",
"freeRewards": [
{ "type": "lootbag", "lootbagId": "explorer_bonus", "description": "Bonus Lootbag" }
],
"premiumRewards": []
}
],
"dailyChallenges": [],
"weeklyChallenges": [],
"shopItems": [],
"teaserRewards": ["Grand Explorer Lootbag", "Premium Tools", "Exclusive Titles"]
}
Season Template

Copy season_1.json, change the id and customize tiers, challenges and shop items. Then start it with /spadmin start <new_id>.