Skip to content
◆ TTS-STUDIO docs Discord

Plugins / ShopForge

Configuration reference

This is the config.yml ShopForge writes on first start, comments included. Every key you see here is the key the plugin reads; there are no hidden ones. Change a value, reload, and it applies.

Top-level sections: language, chat-prefix, license-key, shop, dynamic-pricing, stock-refill-task-interval-minutes, confirm-gui-threshold.

# =============================================================================
#                        ShopForge — main configuration
# =============================================================================
# Edit this file then run /shop reload (or restart the server) to apply.
# All keys below correspond to options actually consumed by the plugin code;
# adding extra keys here won't change behaviour.
# =============================================================================


# ===== Language =====
# Active language. ISO-639-1 two-letter code (lowercase).
# Bundled out of the box: es (Spanish), en (English).
# Missing keys fall back to en automatically. Operators can drop extra
# lang/<code>.yml files in plugins/ShopForge/lang/.
language: en

# Chat prefix in front of every message (MiniMessage). Empty keeps the built-in
# "◈ ShopForge:". Example for a network style: "<gold>Shop <dark_gray>»"
chat-prefix: ""


# Your licence key, from the store where you bought ShopForge. Required: without it
# ShopForge switches itself off. BuiltByBit downloads already carry theirs, so leave it
# blank there. Checked in the background at startup and every six hours; if the
# licence server cannot be reached, ShopForge keeps running.
license-key: ""


# ===== Shop display =====
shop:
  # How prices are rendered in GUIs and chat messages.
  # Standard Java printf-style format. The single %f is the amount.
  # Examples:
  #   "$%.2f"      ->  $1234.50
  #   "%.0f coins" ->  1234 coins
  #   "%,.2f$"     ->  1,234.50$
  currency-format: "$%.2f"

  # Language whose number style the amount takes, as a language tag ("es", "de",
  # "pt-BR"). Empty keeps the English digits of the pattern above. With a language
  # set, the number conversion in currency-format (%f, %.2f, %s...) receives the
  # amount already written that way: thousands with "." and decimals with "," for
  # "es", and no decimals at all when the amount is whole. The decimals of the
  # pattern (".2") still say how many to show for a broken amount.
  # Examples with "es":
  #   currency-format: "%s $"   ->  1.500 $   and   2,50 $
  #   currency-format: "$%.2f"  ->  $1.500    and   $2,50
  # Applies to shop.currency-formats below as well.
  currency-locale: ""

  # true: a vanilla item always arrives plain, so it stacks with the ones players
  # already have, even when its display-name is a translation ("<white>Trigo" on
  # WHEAT). Off, an item arrives with its shop name unless that name is the
  # material's own English one. An item can override either way with `keep-name`.
  plain-items: false

  # What items are paid with when neither the item nor its shop file says
  # (`currency:` on the item, or at the top of the shop file).
  #   vault             Vault money (EssentialsX, CMI, ... behind it)
  #   playerpoints      PlayerPoints
  #   xp-levels         the player's experience levels
  #   xp-points         raw experience points
  #   tokenmanager      TokenManager tokens
  #   coinsengine:<id>  one currency of ExcellentEconomy / CoinsEngine
  default-currency: vault

  # How amounts of the other currencies are printed (printf-style, one %f).
  # Without an entry each currency prints itself ("1,250 points", "12 levels").
  currency-formats:
    # playerpoints: "%,.0f ✦"

  # How many transaction-log entries fit on one page when a player runs
  # /shop log. Lower this if your chat is cramped, raise it for power users.
  log-page-size: 10


# ===== Market prices =====
# Prices that follow demand: every unit bought pushes the price up by `step`,
# every unit sold pushes it down, between `min` and `max` times the price in
# the shop file. The change fades back to normal by itself (`half-life-hours`:
# after that long, half of it is gone). Buy and sell prices move together, so
# buying and selling straight back never pays. A batch is priced unit by unit.
# `enabled: true` turns it on for every item; or leave it off here and write
# `dynamic: true` (or a section with any of these keys) on the items you want.
# /shop market <shop> shows the current prices; /shop market <shop> reset puts
# them back.
dynamic-pricing:
  enabled: false
  step: 0.002
  min: 0.5
  max: 2.0
  half-life-hours: 12


# ===== Stock =====
# How often (in minutes) the background task wakes up to refill per-player
# stock counters whose `stock-refill-hours` window has elapsed. Lower values
# = snappier refills but more DB hits; higher values = laggier refills but
# lighter load. 5 is a sane default for most servers.
stock-refill-task-interval-minutes: 5


# ===== Transactions =====
# When a player tries to buy >= this many items in one transaction, ShopForge
# opens a ConfirmGui asking them to confirm before deducting money. This
# protects against fat-finger mistakes on bulk purchases.
# Set to 0 to disable confirmation entirely.
# Default: 64 (one full stack)
confirm-gui-threshold: 64

Keep reading