> For the complete documentation index, see [llms.txt](https://ultimateshop.superiormc.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ultimateshop.superiormc.cn/info/configuration-files.md).

# 🛠️Configuration files

The plugin generates the following configuration files, some of which will only be generated after you first use this feature.

* `datas`: The location for storing plugin data files. <mark style="color:red;">It will only be generated without using a database. Do not modify any content here</mark>.
* `items`: The location for storing saved item files.
* `languages`: The location for storing language files. You can set the language file used by the plugin through the `config-files.language` option in the `config.yml` file. You can customize various messages within the plugin game through language files. For per player language, or send action bar/title/boss bar/sound, please view [this page](/features/advanced-language-managment.md).
* `menus`: The location for storing common menu configuration files.
* `shop_menu_templates`: The location for storing shop menu template files.
* `buy_more_menus`: The location for storing buy more menu files.
* `favourite_menus`: The location for storing favourite menu files.
* `search_menus`: The location for storing search menu files.
* `item_sell_menus`: The location for storing item sell menu files.

{% hint style="info" %}
Many people seem to be confused about one thing: what you open through the `/shop` command is a menu, not a shop. If you want to set the slot for items in the shop menu, you should set it in the configuration file of the menu.
{% endhint %}

* `shops`: The location for storing shop configuration files.
* `random_placeholders`: The loaction for storing random placeholder configuration files.
* `conditional_placeholders`: The location for storing conditional placeholder configuration files.
* `sell_sticks`: The location for storing sell stick configuration files.
* `config.yml` file: The location for main common settings for plugins.
* `generated-item-format.yml` file: When using the `/shop generateeitemformat` command, we will parse the item you are holding into an **ItemFormat** and store the parsed **ItemFormat** content in this file.
* `XX_xx.json` file: Localized files automatically generated through [Localized Item Name](/features/localized-item-name-premium.md) feature. The name of this file is determined based on the localized language you have set for this feature, but it usually ends in `.json`.
* `XX.txt` file: The transaction record file generated by the [Log Transaction](/features/log-transaction-premium.md) feature is named using the `log-transaction.file` option in the `config.yml` file.

## Config.yml file content

It is recommend that you view this file at GitHub, becuase Wiki's `config.yml` maybe not **latest**. Click [here](https://github.com/PQguanfang/UltimateShop/blob/master/src/main/resources/config.yml) to view this file on **Github.**

```yaml
# UltimateShop by @PQguanfang
#
# Read the Wiki: ultimateshop.superiormc.cn

# Some options require restart the server to make effect.

debug: false

config-files:
  language: en_US
  # Premium version only.
  per-player-language: true
  force-parse-mini-message: true
  # Premium version only.
  minecraft-locate-file:
    # After enable, we will autoload Minecraft locate file when we need know an item's locate name.
    # It will make server little lag when loading this file because this file is very large.
    enabled: false
    generate-new-one: false
    file: 'zh_cn.json'
  # Premium version only. Generates a Material -> vanilla texture path mapping from the Minecraft client assets.
  minecraft-item-material-file:
    enabled: false
    generate-new-one: false
    file: 'item-materials.json'

# Support value: COMPONENT or LEGACY
# COMPONENT mode only supports 1.21.6+ Paper servers and PREMIUM version.
debuild-item-method: 'LEGACY'

# Support value: DEFAULT or ITEMBRIDGE
hook-item-method: 'DEFAULT'

# By default, we will auto force display fail message to make sure player know whether they have successfully clicked the product button.
# If set to false, we will not force display fail message and you can also use hide-message option in shop configs to hide the fail messages.
force-display-fail-message: false

cache:
  # If you are facing multi servers sync issue, try greater this value.
  load-delay: 7

sell:
  # Support Value: Bukkit or ItemFormat.
  # For each product, you can add match-item section to make custom sell match method, for more info, please view Wiki.
  sell-method: Bukkit
  # Only support ItemFormat sell method.
  item-format:
    require-same-key: false
    ignore-key:
      - 'lore'
      - 'damage'
      - 'enchants'
      - 'tool.damage-per-block'
      - 'nbt.string.CustomNBTKey'
  auto-hide-sell-all-message: true
  sell-all:
    ignore-items:
      # Format: Shop ID;;Item ID
      - 'hideshop;;A'
  # PREMIUM version only.
  sell-stick:
    # The min value here is 5, if you set value less than 5, we will auto set the cooldown to 5 tick.
    # In ticks.
    cooldown: 5
    # Support value: LEFT, RIGHT and LEFT;;RIGHT
    # Do not change this value unless you are know what you are doing!
    click-type: RIGHT
  # PREMIUM version only.
  sell-chest:
    enabled: true
    debug: false
    period-ticks: 600
    batch-count: 5
    send-sell-message: true
    price-empty: '{lang}'
    hologram:
      enabled: true
      # Support value: DecentHolograms, CMI, FancyHolograms
      plugin: 'DecentHolograms'
  max-amount: -1
  # Premium version only.
  shulker-box-sell: true
  # Premium version only
  multiplier:
    enabled: false
    display-original-price: true
    # Support value: MAX, STACK
    # MAX mode: will use the maximum value as the result
    # STACK mode: As long as the player meets the conditions, it will be stacked and multiplied.
    mode: STACK
    value:
      default: 1
      rich: 0.9
      vip: 1.1
    value-conditions:
      # Tax
      rich:
        1:
          type: placeholder
          placeholder: '%vault_eco_balance%'
          rule: '>='
          value: 50000
      # Bonus for VIP
      vip:
        1:
          type: permission
          permission: 'group.vip'
  price-modifier:
    item-sell-menu:
      # Products with `price-modifier: true` open this item sell menu when clicked.
      enabled: true
      menu: item-sell
    durability:
      type: durability
      enabled: true
      deduction-coefficient: 1
      minimum-multiplier: 0.1
    lore:
      type: lore
      enabled: false
      operation: SET
      pattern: 'Item Value[：:]\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))'
      value-group: 1
      minimum-value: 0
      maximum-value: 1000000
      maximum-number-length: 64
    nbt:
      type: nbt
      enabled: false
      key: item_value
      value-type: AUTO
      operation: SET
      minimum-value: 0
      maximum-value: 1000000
      maximum-number-length: 64
    mythic-changer:
      type: match_item
      enabled: false
      mode: STACK
      rules: {}

give-item:
  # Support value: BUKKIT, SMART
  # SMART will cost more server performance but will follow the vanilla max stack to give player item, also support check full.
  give-method: SMART
  # Only support SMART give method.
  check-full: true

menu:
  # Require 1.19+ version and Paper servers.
  # This will cost extra server performance, only enable this if you found any dupe issue from this plugin.
  anti-dupe-checker: false
  prompt:
    cancel-keyword: '{lang}'
  # Recommend use when you are running big server, it will make player no longer quickly click
  # and reopen shop menu to make sure UltimateShop not lag your server.
  # In ticks.
  cooldown:
    click: -1
    reopen: -1
  ignore-click-outside: false
  # PREMIUM version only, if enabled, can update dynamic value used in GUI title.
  title-update:
    # Require packetevents.
    enabled: false
    # Whether gui title will refresh every buttons every 1 second.
    # This will refresh placeholder that displayed in menu title.
    circle-update: false
    # Whether gui title will refresh every buttons when click any of them.
    # This will refresh placeholder that displayed in menu title.
    click-update: true
    resend-items-pack: false
  menu-update:
    # Whether menu will refresh every buttons every 1 second.
    # This will refresh placeholder that displayed in display item lore.
    # But maybe lead to server lag if you have much online players, and they are all opening shop GUI.
    circle-update: false
    # Whether menu will refresh every buttons when click any of them.
    # This will refresh placeholder that displayed in display item lore.
    # But maybe lead to server lag if you have much online players, and they are all opening shop GUI.
    click-update: false
  sell-all:
    size: 54
    title: '{lang}'
    black-slots: []
  search-gui:
    menu:
      - 'search'
    prompt:
      clear-keyword: '{lang}'
  favourite-gui:
    menu:
      - 'favourite'
  # Premium version only
  # Require Paper 1.21.9+ version.
  dialog:
    enabled: false
    auto-add-sprite:
      enabled: true
      format: "<sprite:\"{namespace}:{atlas}\":{path}>"
    default-button: '{lang:menu.dialog.default-button}'
    search:
      input: '{lang:menu.dialog.search.input}'
      buttons:
        search: '{lang:menu.dialog.search.buttons.search}'
    buy-more:
      display-item: true
      title: '{lang:menu.dialog.buy-more.title}'
      input: '{lang:menu.dialog.buy-more.input}'
      buttons:
        confirm: '{lang:menu.dialog.buy-more.buttons.confirm}'
    info:
      title: '{lang:menu.dialog.info.title}'
      buttons:
        buy: '{lang:menu.dialog.info.buttons.buy}'
        sell: '{lang:menu.dialog.info.buttons.sell}'
        buy-more: '{lang:menu.dialog.info.buttons.buy-more}'
        sell-all: '{lang:menu.dialog.info.buttons.sell-all}'
        back: '{lang:menu.dialog.info.buttons.back}'
    favourite-edit:
      title: '{lang:menu.dialog.favourite-edit.title}'
      content: '{lang:menu.dialog.favourite-edit.content}'
      buttons:
        forward: '{lang:menu.dialog.favourite-edit.buttons.forward}'
        backward: '{lang:menu.dialog.favourite-edit.buttons.backward}'
        remove: '{lang:menu.dialog.favourite-edit.buttons.remove}'
        back: '{lang:menu.dialog.favourite-edit.buttons.back}'
  # Premium version only
  bedrock:
    enabled: true
    auto-add-icon:
      enabled: true
      format: "https://raw.githubusercontent.com/InventivetalentDev/minecraft-assets/refs/heads/{version}/assets/minecraft/textures/{path}.png"
    # Support value: FLOODGATE, UUID
    check-method: FLOODGATE
    # If enabled, we will try to reopen shop menu after player successfully buy or sell products.
    not-auto-close: true
    # Make this option be empty to disable.
    price-extra-line:
      default: '{lang}'
      only-buy: '{lang}'
      only-sell: '{lang}'
    buy-or-sell:
      title: '{lang}'
      buttons:
        amount:
          name: '{lang}'
          tip: '{lang}'
    info:
      title: '{lang}'
      buttons:
        buy: '{lang}'
        sell: '{lang}'
        buy-more: '{lang}'
        sell-all: '{lang}'
        # Remove this option if you don't want this button.
        back: '{lang}'
  buy-more-menu:
    not-open-when-invalid: true
    display-item-max-stack: true
    default:
      menu: buy-more
      max-amount: 693
    only-buy:
      menu: buy-more-buy
      max-amount: 693
    only-sell:
      menu: buy-more-sell
      max-amount: 693
  auto-open:
    enabled: true
    menu: main
  # Support value: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/event/inventory/ClickType.html
  # Support use ;; symbol to make multi click type.
  click-event:
    buy: 'SHIFT_LEFT'
    sell: 'RIGHT'
    buy-or-sell: 'LEFT'
    # If you want to disable select-amount feature, set this to NEVER.
    select-amount: 'SHIFT_RIGHT'
    add-favourite: 'SWAP_OFFHAND'
    sell-all: 'DROP'
    # buy-one-stack: 'SWAP_OFFHAND'
  # Custom click actions for shop menu.
  # Premium version only.
  click-event-actions:
    buy-one-stack:
      display-name: 'Buy One Stack'
      buy-only: true
      1:
        type: buy
        shop: '{shop}'
        item: '{item}'
        amount: 64
    sell-one-stack:
      display-name: 'Sell One Stack'
      sell-only: true
      1:
        type: sell
        shop: '{shop}'
        item: '{item}'
        amount: 64
    add-favourite:
      display-name: '{lang:add-favourite-action}'
      1:
        type: conditional
        conditions:
          1:
            type: not
            conditions:
              1:
                type: menu_type
                menu-type: 'favourite'
        actions:
          1:
            type: add_favourite
            menu: favourite
            shop: '{shop}'
            item: '{item}'

secret-shop-items:
  require-display-in-menu: true
  require-meet-menu-open-conditions: true

use-times:
  default-reset-mode: 'NEVER'
  default-reset-time: '00:00:00'
  # This only works for CUSTOM type of reset mode.
  default-reset-time-format: 'yyyy-MM-dd HH:mm:ss'
  default-reset-value: 0
  # Set -1 to disable.
  default-max-value: -1
  # If set to true, product default buy / sell times will be set to reset value set in product configs or default value above.
  set-reset-value-by-default: true
  # If set to true, max value set in product configs or default value set above will only work for total placeholder.
  max-value-for-total-only: true
  auto-reset-mode: true

math:
  enabled: true
  scale: 2
  static-scale: false

number-display:
  format:
    enabled: true
    decimal: "#,##0.00##########"
    integer: "#,##0"
  strip-trailing-zeros:
    enabled: true

# Premium version only.
log-transaction:
  # It will cost extra performance cost.
  enabled: false
  # file | database — database requires database.enabled: true
  storage: file
  # Used when storage is file. If set to empty value, we will just print the log into console.
  file: 'log.txt'
  format: '{time} | {player} | {shop} | {buy-or-sell} | {item-name} x{amount} | {price} | Price Multiplier: x{multiplier}'
  time-format: "yyyy-MM-dd HH:mm:ss"

display-item:
  # Require Paper 1.17.1+ version.
  auto-translate-item-name: true
  # Require Paper 1.21.9+ version, only supports Java players.
  auto-use-sprite-item-name: true
  # If set to true, if your product default amount is 10, and you purchase it x64 in one time, we will display 640 as result in amount placeholder.
  calculate-amount: true
  auto-set-first-product: true
  # @+lower case means conditional lore, do not remove them here.
  # Otherwise, the line without this will always display it.
  add-lore:
    - '{lang}'

placeholder:
  auto-settings:
    # If enabled, we will auto add conditional placeholder at all price amount.
    # This can avoid the need to add the discount option in the amount options for each price.
    add-conditional-in-all-price-amount:
      enabled: false
      buy-placeholder: buy
      sell-placeholder: sell
      black-dynamic-price: true
      black-shops:
        - 'example'
    # We will try adds dynamic up or down symbol for all dynamic price placeholder.
    # Please note that in your dynamic price amount option, first number must be the base price.
    # If you made the dynamic price according to the Wiki's instructions, then there is no problem at all.
    add-status-in-dynamic-price-placeholder:
      enabled: true
    # If enabled, we will try change {amount} in price placeholder option to the value you set here.
    change-amount-in-all-price-placeholder:
      enabled: false
      replace-value: '%formatter_number_format_{amount}%'
  # Premium version only
  compare:
    up: '{lang}'
    down: '{lang}'
    same: '{lang}'
  cron:
    format: "{lang}"
  data:
    # If your server never use dynamic value in prices or similar things, you can set this option to false.
    # This will improve little plugin performance.
    can-used-in-amount: true
  refresh:
    format: "{lang}"
    never: "{lang}"
  # Premium version only
  next:
    with-day-format: "{lang}"
    without-day-format: "{lang}"
    never: "{lang}"
  price:
    split-symbol-any: '{lang}'
    split-symbol-all: '{lang}'
    replace-new-line-symbol: '{lang}'
    unknown: "{lang}"
    unknown-price-type: "{lang}"
    empty: "{lang}"
    filter-for-one-line: ''
    item-auto-use-sprite: true
  click:
    # If enabled, {buy-click} and {sell-stick} will display different value according to product status.
    # But, it will maybe make server lag if you are running big server and have many products in your shop.
    enabled: false
    buy: '{lang}'
    sell: '{lang}'
    buy-with-no-sell: '{lang}'
    sell-with-no-buy: '{lang}'
    buy-max-limit-player: '{lang}'
    buy-max-limit-server: '{lang}'
    sell-max-limit-player: '{lang}'
    sell-max-limit-server: '{lang}'
    buy-price-not-enough: '{lang}'
    sell-price-not-enough: '{lang}'
    error: '{lang}'
    buy-condition-not-meet: '{lang}'
    sell-condition-not-meet: '{lang}'
  # Premium version only.
  sell-stick:
    infinite: "{lang}"

database:
  enabled: false
  jdbc-url: "jdbc:mysql://localhost:3306/ultimateshop?useSSL=false&autoReconnect=true"
  properties:
    user: root
    password: 123456

# Premium version only.
bungeecord-sync:
  enabled: false

prices:
  example:
    economy-plugin: Vault
    amount: 200
    placeholder: '{amount} Coins'
  mmoitems-example:
    hook-plugin: MMOItems
    hook-item: AXE;;TEST_AXE
    amount: 1
    placeholder: '{amount} Mythic Axe'

conditions:
  products-key: 'products-conditions'
  buy-prices-key: 'buy-prices-conditions'
  sell-prices-key: 'sell-prices-conditions'
  display-item-key: 'display-item-conditions'

time-offset:
  enabled: false
  offset-hours: 0
  offset-minutes: 0
  offset-seconds: 0

auto-save:
  enabled: true
  hide-message: false
  period-tick: 6000

bypass-plugin-check:
  - 'PluginNameHere'
```
