Skip to content

battlepass.yml

Jan Kluka edited this page Jun 29, 2026 · 4 revisions
# ============================================================================
#  X-Prison - Battle Pass
# ----------------------------------------------------------------------------
#  Players earn Battle Pass XP from quests, daily rewards, prestige and rebirth,
#  climbing tiers that grant rewards on a FREE and a PREMIUM track. Reset the
#  season periodically (/bp newseason <id>) to keep players coming back.
#
#  All text uses MiniMessage formatting (https://docs.advntr.dev/minimessage).
#  Enable/disable the whole module in config.yml -> modules.battlepass
# ============================================================================

season:
  # Stable id used as the database key. Changing it (or running /bp newseason)
  # starts a fresh season; old progress is archived under the previous id.
  id: "season-1"
  display-name: "<gradient:#00c6ff:#0072ff><bold>Season 1</bold></gradient>"
  # Optional yyyy-MM-dd bounds. Leave empty for an always-active season.
  start-date: ""
  end-date: ""

# Highest obtainable tier this season.
max-tier: 10

# XP required to advance EACH tier: required(tier) = base + (tier-1) * increment.
xp:
  base: 1000
  increment: 500
  # Per-tier overrides (optional):
  # overrides:
  #   10: 25000

premium:
  # Players with this permission are treated as premium without a stored flag.
  # You can also grant premium per-player with /bp setpremium <player> true.
  permission: "xprison.battlepass.premium"

# Passive XP awarded from gameplay milestones (set to 0 to disable a source).
# Quest and daily-reward XP is configured in those modules, not here.
xp-sources:
  prestige: 500
  rebirth: 2500

messages:
  prefix: "<gradient:#00c6ff:#0072ff><bold>BATTLEPASS</bold> <dark_gray>»</dark_gray></gradient> "
  tier-up: "<white>You reached <yellow>Tier %tier% <white>of %season%<white>! Open <yellow>/bp <white>to claim your rewards."
  reward-claimed: "<green>Claimed your <yellow>Tier %tier% <green>reward!"
  reward-already-claimed: "<red>You have already claimed that reward."
  reward-locked: "<red>You have not reached Tier %tier% yet."
  premium-required: "<red>That reward is on the <light_purple>Premium <red>track. Unlock the premium pass to claim it."
  no-season: "<red>There is no active Battle Pass season right now."

# ----------------------------------------------------------------------------
#  Tiers
#  Each tier may define a 'free' and/or 'premium' track. A track has a 'display'
#  item (shown in the GUI) and a 'rewards' bundle (commands/messages/sound run on
#  claim). Display name/lore support: %tier%, %track%, %required_xp%,
#  %cumulative_xp% and %status% (see gui.status below). Reward messages and item
#  text all use MiniMessage.
# ----------------------------------------------------------------------------
tiers:
  1:
    free:
      display:
        material: PAPER
        name: "<white>Tier 1 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$5,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 5000"
        messages:
          - "<green>+ $5,000"
        sound: ENTITY_PLAYER_LEVELUP
    premium:
      display:
        material: DIAMOND
        name: "<light_purple>Tier 1 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <aqua>250 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 250"
        messages:
          - "<aqua>+ 250 Tokens"
        sound: ENTITY_PLAYER_LEVELUP
  2:
    free:
      display:
        material: PAPER
        name: "<white>Tier 2 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$10,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 10000"
        messages:
          - "<green>+ $10,000"
    premium:
      display:
        material: DIAMOND
        name: "<light_purple>Tier 2 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <aqua>500 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 500"
        messages:
          - "<aqua>+ 500 Tokens"
  3:
    free:
      display:
        material: PAPER
        name: "<white>Tier 3 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$25,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 25000"
        messages:
          - "<green>+ $25,000"
    premium:
      display:
        material: EMERALD
        name: "<light_purple>Tier 3 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <green>10 Gems"
          - ""
          - "%status%"
      rewards:
        commands:
          - "gems give %player% 10"
        messages:
          - "<green>+ 10 Gems"
  4:
    free:
      display:
        material: PAPER
        name: "<white>Tier 4 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <aqua>750 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 750"
        messages:
          - "<aqua>+ 750 Tokens"
    premium:
      display:
        material: DIAMOND
        name: "<light_purple>Tier 4 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <aqua>1,000 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 1000"
        messages:
          - "<aqua>+ 1,000 Tokens"
  5:
    free:
      display:
        material: CHEST
        name: "<white>Tier 5 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$100,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 100000"
        messages:
          - "<green>+ $100,000"
        sound: ENTITY_PLAYER_LEVELUP
    premium:
      display:
        material: ENDER_CHEST
        name: "<light_purple>Tier 5 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <green>25 Gems"
          - ""
          - "%status%"
      rewards:
        commands:
          - "gems give %player% 25"
        messages:
          - "<green>+ 25 Gems"
        sound: ENTITY_PLAYER_LEVELUP
  6:
    free:
      display:
        material: PAPER
        name: "<white>Tier 6 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <aqua>1,500 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 1500"
        messages:
          - "<aqua>+ 1,500 Tokens"
    premium:
      display:
        material: EMERALD
        name: "<light_purple>Tier 6 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <green>40 Gems"
          - ""
          - "%status%"
      rewards:
        commands:
          - "gems give %player% 40"
        messages:
          - "<green>+ 40 Gems"
  7:
    free:
      display:
        material: PAPER
        name: "<white>Tier 7 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$250,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 250000"
        messages:
          - "<green>+ $250,000"
    premium:
      display:
        material: DIAMOND_BLOCK
        name: "<light_purple>Tier 7 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <aqua>2,500 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 2500"
        messages:
          - "<aqua>+ 2,500 Tokens"
  8:
    free:
      display:
        material: CHEST
        name: "<white>Tier 8 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <aqua>3,000 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 3000"
        messages:
          - "<aqua>+ 3,000 Tokens"
    premium:
      display:
        material: EMERALD_BLOCK
        name: "<light_purple>Tier 8 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <green>75 Gems"
          - ""
          - "%status%"
      rewards:
        commands:
          - "gems give %player% 75"
        messages:
          - "<green>+ 75 Gems"
  9:
    free:
      display:
        material: GOLD_BLOCK
        name: "<white>Tier 9 <gray>- <green>Free"
        lore:
          - "<gray>Reward: <green>$500,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 500000"
        messages:
          - "<green>+ $500,000"
    premium:
      display:
        material: DIAMOND_BLOCK
        name: "<light_purple>Tier 9 <gray>- <light_purple>Premium"
        lore:
          - "<gray>Reward: <aqua>5,000 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "tokens give %player% 5000"
        messages:
          - "<aqua>+ 5,000 Tokens"
  10:
    free:
      display:
        material: NETHER_STAR
        name: "<white><bold>Tier 10</bold> <gray>- <green>Free <gray>(Final)"
        lore:
          - "<gray>Reward: <green>$1,000,000"
          - ""
          - "%status%"
      rewards:
        commands:
          - "money give %player% 1000000"
        messages:
          - "<green><bold>+ $1,000,000"
        sound: UI_TOAST_CHALLENGE_COMPLETE
    premium:
      display:
        material: BEACON
        name: "<light_purple><bold>Tier 10</bold> <gray>- <light_purple>Premium <gray>(Final)"
        lore:
          - "<gray>Reward: <green>200 Gems <gray>+ <aqua>10,000 Tokens"
          - ""
          - "%status%"
      rewards:
        commands:
          - "gems give %player% 200"
          - "tokens give %player% 10000"
        messages:
          - "<green><bold>+ 200 Gems <gray>& <aqua><bold>10,000 Tokens"
        sound: UI_TOAST_CHALLENGE_COMPLETE

gui:
  title: "<dark_gray>Battle Pass <gray>- %season%"
  rows: 6
  filler: "BLACK_STAINED_GLASS_PANE"
  # The free track renders across these slots, the premium track across the
  # parallel slots below it. Both lists must be the same length; tiers paginate.
  free-slots: [10, 11, 12, 13, 14, 15, 16]
  premium-slots: [28, 29, 30, 31, 32, 33, 34]
  # Replaces %status% in each tier's display lore based on its state.
  status:
    claimed: "<green><bold>✔ Claimed</bold>"
    claimable: "<yellow><bold>➜ Click to claim!</bold>"
    locked: "<red><bold>✖ Locked</bold> <gray>(reach this tier)"
    premium-locked: "<light_purple><bold>✖ Premium required</bold>"
  info:
    slot: 4
    material: KNOWLEDGE_BOOK
    name: "%season%"
    lore:
      - "<gray>Tier: <yellow>%tier%<gray>/<yellow>%max_tier%"
      - "<gray>Total XP: <yellow>%xp%"
      - "<gray>XP to next tier: <yellow>%xp_next%"
      - "<gray>Premium: <yellow>%premium%"
  items:
    close:
      slot: 49
      material: BARRIER
      name: "<red>Close"
    prev-page:
      slot: 48
      material: ARROW
      name: "<yellow>Previous Page"
    next-page:
      slot: 50
      material: ARROW
      name: "<yellow>Next Page"

Clone this wiki locally