Configuration

Main sections

SectionPurpose
license-keyYour Storefront license key.
presetActive classic shop preset (folder in presets/).
compact-numbers1.2K / 3.4M style numbers in menus and messages.
currenciesTurn money (Vault) and shards on or off.
shardsStarting balance, change log, /shards pay and the leaderboard.
shard-arenasWand, default payout and permission-based reward tiers.
shopClick cooldown and the purchase log.
daily-shopItem shop preset, chat broadcast and Discord webhook.
storageSQLite (default) or MySQL. Needs a full restart.

Apply changes with /storefront reload. If a file has a mistake, the reload is refused and the previous configuration keeps running.

Default config

yaml
license-key: "PUT-LICENSE-HERE"

# ============================================================
#  Storefront
#  Paper / Folia 26.1+
#
#  Colors in every message and menu:
#    Legacy:  &a, &c, &l ...
#    HEX:     &#RRGGBB
# ============================================================

# Shop layout. Each preset is a folder in plugins/Storefront/presets/.
# Copy a preset folder to make your own, then set its folder name here.
preset: donut

# 1.2K / 3.4M style numbers in menus and messages. false = 1,200 / 3,400,000
compact-numbers: true

currencies:
  # Money uses Vault. Needs Vault + an economy plugin (EssentialsX, CMI, ...).
  money:
    enabled: true
  # Shards are built in and stored in the Storefront database.
  shards:
    enabled: true

shards:
  # Shards a new player starts with.
  starting-balance: 0
  # Keep a history of every shard change in the database (sf_shard_log).
  log-changes: true
  pay:
    # /shards pay <player> <amount>
    enabled: false
    minimum: 1
    cooldown-seconds: 5
    # Percentage removed from every payment (0-90).
    tax-percent: 0
    # Payments of at least this amount must be confirmed. 0 = never ask.
    confirm-above: 10000
  top:
    size: 10
    refresh-seconds: 60
  # Shards for killing another player.
  kill-rewards:
    enabled: true
    amount: 10
    # No reward for killing the same player again within this time (prevents kill farming). 0 = off.
    same-victim-cooldown-seconds: 300
    # No reward when both players connect from the same IP address (alternate accounts).
    ignore-same-ip: true
    sound:
      sound: ""

# ------------------------------------------------------------
#  Shard arenas - players earn shards for staying inside an area.
#  /storefront arena wand                     left click = corner 1, right click = corner 2
#  /storefront arena create <name> [seconds] [shards]
#  /storefront arena list | info | set | redefine | delete
#  Arenas are saved in arenas.yml. Create as many as you want.
# ------------------------------------------------------------
shard-arenas:
  enabled: true
  wand-material: BLAZE_ROD
  # Used by arenas that don't set their own (seconds inside -> shards paid).
  default-interval-seconds: 60
  default-amount: 1
  # Leaving the arena resets the timer.
  reset-on-leave: true
  # Titles and texts are in messages.yml (arena-enter-title, arena-reward, ...).
  sounds:
    enter:
      sound: BLOCK_NOTE_BLOCK_BELL
    exit:
      sound: ENTITY_PLAYER_LEVELUP
    reward:
      sound: ENTITY_ITEM_PICKUP
  # Permission-based rewards: a player receives the highest amount of any tier they have
  # the permission for. Add, rename or remove tiers freely.
  # Example (LuckPerms): /lp group <group> permission set storefront.arena.tier.1
  tiers:
    tier-1:
      permission: storefront.arena.tier.1
      amount: 10
    tier-2:
      permission: storefront.arena.tier.2
      amount: 20

# Shard booster: a consumable item that multiplies shard arena payouts for a set time.
# Give it with /storefront booster give <player> [amount] [multiplier] [hours],
# for example as a shop, crate or store reward. Right click to use. One booster at a time.
shard-booster:
  enabled: true
  material: POTION
  multiplier: 4
  duration-seconds: 86400
  glow: true
  # Also multiply shards from player kills.
  affects-kill-rewards: false
  # %multiplier%, %hours%, %duration%
  name: "&#6d0de7Shard Booster"
  lore:
    - "&7Shard booster: &ax%multiplier% &7shards for &f%hours%h&7!"
    - ""
    - "&fRight click to use"

# /afk menu: every shard arena with a teleport point (/storefront arena setteleport <name>).
afk-menu:
  title: "&#444444ᴀꜰᴋ ᴀʀᴇᴀѕ"
  rows: 6
  # %index% = position in the list, %arena% = arena name
  area-name-format: "ᴀꜰᴋ %index%"
  # Areas fill these slots in order (0 = top-left). Default: the first five rows (0-44).
  area-slots: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
               23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44]
  # %area_name%, %arena%, %interval%
  area-item:
    material: ITEM_FRAME
    name: "&#961CE8%area_name%"
    lore:
      - "&7Click to go to this"
      - "&7AFK area."
  previous-page:
    slot: 45
    material: ARROW
    name: "&#34ee80ʙᴀᴄᴋ"
    lore:
      - "&7Click to go to the previous page"
  next-page:
    slot: 53
    material: ARROW
    name: "&#34ee80ɴᴇхᴛ"
    lore:
      - "&7Click to go to the next page"
  random-area:
    slot: 49
    material: AMETHYST_BLOCK
    name: "&#34ee80ᴀꜰᴋ"
    lore:
      - "&7Click to teleport to a random AFK area"
  page-sound:
    sound: UI_BUTTON_CLICK
  filler:
    enabled: false
    material: BLACK_STAINED_GLASS_PANE
    name: " "
  teleport:
    # Players with storefront.afk.instant skip the countdown. Moving to another block cancels it.
    delay-seconds: 5
    countdown-sound:
      sound: BLOCK_NOTE_BLOCK_PLING

shop:
  # Minimum time between two clicks in a Storefront menu.
  click-cooldown-ms: 150
  # Save every purchase in the database (sf_purchases).
  log-purchases: true

# Rotating item shop (/dailyshop). Presets live in plugins/Storefront/daily-presets/.
daily-shop:
  enabled: true
  preset: fortnite
  announce:
    # Chat message to everyone online when new items arrive.
    broadcast: true
    # Optional Discord webhook that posts the new items. Leave empty to turn it off.
    webhook-url: ""
    webhook-title: "New items in the shop"

# Changing storage settings needs a full server restart.
storage:
  # sqlite = local file (default). mysql = MySQL/MariaDB, required to share shards between servers.
  type: sqlite
  mysql:
    host: "localhost"
    port: 3306
    database: "storefront"
    username: "root"
    password: ""
    use-ssl: true
    pool-size: 6

Messages

messages.yml holds every message. %prefix% works in any message, and an empty message ("") turns it off. Missing keys fall back to the defaults after updates.