# 🛠️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.&#x20;
* `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 menu configuration files.&#x20;

{% 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.&#x20;
* `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'

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

# 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'

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:
  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
  bedrock:
    enabled: true
    # 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
  # 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
  # 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: ''
  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
  # Legacy Option, do not enable it.
  auto-update-server-data: 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'

    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: []
  # Premium version only
  bedrock:
    enabled: true
    # 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: 64
    only-buy:
      menu: buy-more-buy
      max-amount: 64
    only-sell:
      menu: buy-more-sell
      max-amount: 64
  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;;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

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

# Premium version only.
log-transaction:
  # It will cost extra performance cost.
  enabled: false
  # 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}'
  time-format: "yyyy-MM-dd HH:mm:ss"

display-item:
  # Require Paper 1.17.1+ version.
  auto-translate-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}"
  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
  # Legacy Option, do not enable it.
  auto-update-server-data: 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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ultimateshop.superiormc.cn/info/configuration-files.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
