Skip to content

FAQ & Troubleshooting

Common questions and solutions for the Season Pass system.


Seasons do not start automatically. An admin must explicitly start a season using:

Terminal window
/spadmin start season_1

Or use the admin panel (/spadmin panel) and click Start Season on the Events or Season tab.

No. Only one season can be active at a time. You must end the current season before starting a new one:

Terminal window
/spadmin end
/spadmin start season_2

When a season ends (either manually via /spadmin end or automatically when the duration expires):

  1. All online players’ season data is archived to their history
  2. Players can view past season summaries in the History tab
  3. The activeSeasonId in config.json is cleared
  4. No more XP, challenges, or shop interactions are possible until a new season starts
  1. Copy seasons/season_1.json to a new file (e.g., season_2.json)
  2. Change the "id" field to match the filename (e.g., "season_2")
  3. Customize tiers, challenges, shop items, and settings
  4. Run /spadmin reload to load the new definition
  5. Start it with /spadmin start season_2

Alternatively, use the admin panel’s Season tab and click Create Season to generate a blank season definition in-game.


Check the following:

  1. Is a season active? Run /spadmin info to verify.
  2. Is the season paused? The admin panel Events tab or /spadmin info shows paused state. Resume with /spadmin resume.
  3. Is Core TrackingService running? XP from gameplay requires the Core mod’s TrackingService. Check the server log for "Registered SeasonPassTrackingListener with Core TrackingService".
  4. Are XP values set to 0? Check the season’s xpSources configuration. Any source set to 0 is disabled.
  5. Has the daily XP cap been hit? If dailyXpCap is set, players stop earning XP after reaching the limit for the day.

Players are not receiving the Season Pass Book

Section titled “Players are not receiving the Season Pass Book”

The Season Pass Book is only given when:

  • item.enabled is true in config.json
  • A season is currently active
  • The player does not already have the item in their inventory (duplicate protection)
  • item.giveOnFirstJoin or item.giveOnEveryJoin is enabled

There is a configurable delay (giveDelaySeconds, default: 3 seconds) before the item appears to allow the world to load first.

Player data is saved in two ways:

  • File mode: configs/kyuubisoft_seasonpass/players/{uuid}.json with .bak backup files
  • MySQL mode: Via the Core mod’s PlayerDataStorage abstraction

Check if a .bak backup file exists. Data is auto-saved at the configured autoSaveIntervalSeconds interval (default: 300 seconds / 5 minutes) and always saved on player disconnect.

Player progress did not reset for a new season

Section titled “Player progress did not reset for a new season”

When a new season starts, player progress is reset on their next login (lazy reset). If a player was online when the season changed, their data is synchronized automatically. If the issue persists, use:

Terminal window
/spadmin resetplayer <playername>

Players can purchase the premium pass using:

Terminal window
/sp buy

This requires:

  • premiumEnabled is true in the season config
  • premiumCommandOnly is false
  • The player has sufficient currency (configured via premiumCost and premiumCurrencyId)

Use the admin command:

Terminal window
/spadmin grantpremium <playername>

Or toggle premium via the admin panel’s Players tab.

Yes. Set premiumEnabled to false in the season definition. This completely hides the premium track, purchase button, and lock overlays. All tiers become free-track only.

When premiumCommandOnly is true, the /sp buy command is disabled. Premium can only be granted by an admin using /spadmin grantpremium. This is useful when premium is sold through an external store or website.

Do players keep premium rewards if premium is revoked?

Section titled “Do players keep premium rewards if premium is revoked?”

Yes. Revoking premium (/spadmin revokepremium) only prevents claiming future premium rewards. Already-claimed rewards are not reclaimed.


Challenges use a lazy reset system — they reset when the player next logs in or opens the Season Pass UI, not at a fixed server time. This is by design to ensure offline players get fresh challenges when they return.

If challenges are stuck, you can force a reset via the admin panel or wait for the player to reconnect.

Players see different challenges from each other

Section titled “Players see different challenges from each other”

This is intended behavior. Challenge rotation uses a per-player seed based on playerUuid.hashCode() + dayOfEpoch, so each player sees a different set of challenges. This prevents coordination where all players do the same thing.

A challenge type appears twice in the same day

Section titled “A challenge type appears twice in the same day”

This should not happen. The rotation algorithm enforces type deduplication — at most one challenge per type within each category (daily or weekly). If this occurs, check that your challenge pool has enough variety across different types.


The shop rotation is deterministic per player per day. The same player will see the same items all day. Items change at midnight in the configured timezone. Different players may see different items.

If the shop pool is small (fewer items than dailyShopSlots), items may repeat across days.

Shop rotation is date-based and per-player. There is no global force-rotation mechanism. To change what appears, modify the shopItems array in the season definition and reload with /spadmin reload.


The XP curve follows an exponential formula:

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

With defaults (baseXpPerTier: 1000, tierXpScaling: 1.08):

  • Tier 1: 1,000 XP
  • Tier 10: ~2,000 XP
  • Tier 20: ~4,316 XP
  • Tier 30: ~9,317 XP

XP multipliers stack multiplicatively:

Final XP = Base XP * Premium Boost * Prestige Boost * Personal Booster * Global Event

For example: 10 XP base with 1.5x premium + 1.05x prestige + 2.0x booster + 2.0x event = 10 * 1.5 * 1.05 * 2.0 * 2.0 = 63 XP.

The soft cap reduces XP earning after a threshold without stopping it entirely. With dailyXpSoftCap: 5000 and softCapMultiplier: 0.25:

  • First 5,000 XP earned at full rate
  • After 5,000 XP: each 100 XP earned only grants 25 XP
  • The hard cap (dailyXpCap) stops all earning when reached
  • Set both to 0 to disable caps entirely
  • Each consecutive daily login increments the streak counter
  • Missing a day resets the streak to 0 (it restarts at 1 on the next login)
  • Streak XP bonus: min(currentStreak, loginStreakMaxDays) * loginStreakPerDay
  • First season login grants a one-time bonus of firstLoginBonusXp XP and firstLoginBonusTokens tokens

When a player reaches the maximum tier and prestigeEnabled is true:

  1. A Prestige button appears in the Tiers tab
  2. Clicking it resets: tier, XP, and claimed rewards
  3. The player gains +1 prestige level
  4. Each prestige level grants a permanent XP boost of prestigeXpBoostPercent%
  5. Prestige resets do not affect: premium status, season tokens, challenge progress, or settings

Yes, controlled by maxPrestigeLevel (default: 10). Once reached, the prestige button no longer appears.


Verify that you have the seasonpass.admin permission. The panel also requires the player to be online (it cannot be opened from console).

  1. Make sure you click the Save button on each tab — changes are not auto-saved.
  2. Check the status bar at the top of the panel for error messages.
  3. If running on a showcase server, write operations are blocked by ShowcaseCompat.

This means no season definition files were found in configs/kyuubisoft_seasonpass/seasons/. Run /spadmin reload or restart the server to regenerate the default season_1.json.


DependencyTypePurpose
kyuubisoft:coreRequiredTrackingService, RewardGrantHelper, ShopService, ModMenuRegistry, PlayerDataStorage
kyuubisoft:achievementsOptionalAchievement XP integration
kyuubisoft:questsOptionalQuest XP integration
Buuz135:MHUDOptionalHUD framework compatibility
  • File mode (default): configs/kyuubisoft_seasonpass/players/{uuid}.json
  • MySQL mode: In the database via Core’s PlayerDataStorage abstraction

File mode creates .bak backup files alongside each player data file.

Back up the entire configs/kyuubisoft_seasonpass/ directory, which contains:

  • config.json — Plugin configuration
  • seasons/ — Season definitions
  • localization/ — Language files
  • players/ — Player data (file mode only)

The plugin requires Java 25 or later (as configured in build.gradle.kts).

Yes. Use /spadmin reload or the admin panel’s Reload button. This reloads config.json, all season definitions in seasons/, and all localization files. No server restart is required.

:::note Active Season Reloading does not affect an active season’s runtime state. It reloads the definition files, so changes to tiers, challenges, or shop items will be reflected for new interactions. Existing player data is not modified. :::