# Configuration

**Plugin Configuration:** You can change the plugin storage. We recommend using MySQL storage, as it is the only option that is fully supported and utilized in all features.

{% hint style="danger" %}
**REDIS Support:** REDIS support is still under development and testing. If you encounter any bugs, it's best to contact me via [discord](https://discord.groupez.dev/) or on [github](https://github.com/Maxlego08/zEssentials/).
{% endhint %}

## Configuration

{% code fullWidth="true" %}

```yaml
########################################################################################################################
#
#  ███████╗███████╗░██████╗░██████╗███████╗███╗░░██╗████████╗██╗░█████╗░██╗░░░░░░██████╗
#  ╚════██║██╔════╝██╔════╝██╔════╝██╔════╝████╗░██║╚══██╔══╝██║██╔══██╗██║░░░░░██╔════╝
#  ░░███╔═╝█████╗░░╚█████╗░╚█████╗░█████╗░░██╔██╗██║░░░██║░░░██║███████║██║░░░░░╚█████╗░
#  ██╔══╝░░██╔══╝░░░╚═══██╗░╚═══██╗██╔══╝░░██║╚████║░░░██║░░░██║██╔══██║██║░░░░░░╚═══██╗
#  ███████╗███████╗██████╔╝██████╔╝███████╗██║░╚███║░░░██║░░░██║██║░░██║███████╗██████╔╝
#  ╚══════╝╚══════╝╚═════╝░╚═════╝░╚══════╝╚═╝░░╚══╝░░░╚═╝░░░╚═╝╚═╝░░╚═╝╚══════╝╚═════╝░
#
# Documentation: https://zessentials.groupez.dev/
#
########################################################################################################################

# Displays debug items in the console, if you request support please enable debug and send logs with debugs
enable-debug: true

# Storage:
# JSON
# MYSQL
#
# We advise you to use MYSQL, the JSON storage is only there to install the plugin and do some testing.
storage-type: MYSQL

# PAPER
# REDIS
server-type: PAPER

# Configuration of your database, it is recommended to use the database to store your data, JSON does not support everything
database-configuration:
  # For Pterodactyl panel: when you create a database it creates a <prefix>_<database name you chose>. Set "prefix"'s value to the prefix of the database
  tablePrefix: "zessentials_"
  # IP Address of the machine the database is hosted on
  host: 192.168.10.10
  # Port of the database, by default MYSQL's port is 3306
  port: 3306
  user: homestead
  password: 'secret'
  # For Pterodactyl panel: when you create a database it creates a <prefix>_<database name you chose>. Set "database"'s value to the name of the database
  database: zessentials
  debug: true
  # ToDo - Créer un système qui permet de load toutes les données en cache (pour SQL et JSON) et ajouter un moyen de pouvoir filter par rapport à l'activer du joueur
  # ToDo - Par exemple pouvoir load les joueurs actifs durant les 7 derniers jours, ainsi on évite de load tout les joueurs mais seulement les joueurs actifs
  # ToDo - Se système va permettre de load les données des joueurs plus rapidement, en cas de crash serveurs si des centaines de joueurs veulent revenir en même temps cela peut être problématique.
  # ToDo - Cette solution sera très bien pour se genre de cas.

# Configuration for your redis server
redis-configuration:
  host: "192.168.10.10"
  port: 6379
  password: "123456a"

# If you have enabled this option, players with the essentials.bypass.cooldown permission you can execute commands in command-cooldowns without being assigned
enable-cooldown-bypass: false

# Create command cooldowns (can run a command after X amount of seconds)
command-cooldowns:
  - command: heal
    # In this example you can see that the "/heal" command has a 60 seconds cooldown
    cooldown: 60
    permissions:
      - permission: "essentials.cooldown.heal.vip"
        # In this example whoever has "essentials.cooldown.heal.vip" permission can run "/heal" after 40 seconds
        cooldown: 40
      - permission: "essentials.cooldown.heal.staff"
        # In this example whoever has "essentials.cooldown.heal.staff" permission can run "/heal" after 20 seconds
        cooldown: 20

# Trash can GUI size. Must be 9, 18, 27, 36, 45, 54.
trash-size: 27

# Compact materials with the /compact command
compact-materials:
  - from: COAL
    to: COAL_BLOCK
  - from: REDSTONE
    to: REDSTONE_BLOCK
  - from: LAPIS_LAZULI
    to: LAPIS_BLOCK
  - from: IRON_INGOT
    to: IRON_BLOCK
  - from: GOLD_INGOT
    to: GOLD_BLOCK
  - from: IRON_NUGGET
    to: IRON_INGOT
  - from: GOLD_NUGGET
    to: GOLD_INGOT
  - from: DIAMOND
    to: DIAMOND_BLOCK
  - from: EMERALD
    to: EMERALD_BLOCK
  - from: COPPER_INGOT
    to: COPPER_BLOCK
  - from: NETHERITE_INGOT
    to: NETHERITE_BLOCK

# Transforms keys by color, used in messages
message-colors:
  - key: "<primary>"
    color: "#24d65d"
  - key: "<secondary>"
    color: "#656665"
  - key: "<error>"
    color: "#ff0000"
  - key: "<success>"
    color: "#00ff00"

# Allows you to add a cooldown on commands, we will prevent players spam commands for nothing.
# If you want to disable the cooldown on the commands, do this: cooldowns: []
cooldowns:
  - messages: 2
    cooldown: 1500 # max 1.5s
  - messages: 4
    cooldown: 5000 # max 5s
  - messages: 8
    cooldown: 10000 # max 10s

# Stores commands in database, works only with MYSQL storage
enable-command-log: true

# Materials that can be put into furnace, use the /furnace command
smeltable-materials:
  - from: RAW_IRON
    to: IRON_INGOT
  - from: RAW_COPPER
    to: COPPER_INGOT
  - from: RAW_GOLD
    to: GOLD_INGOT
  - from: SAND
    to: GLASS
  - from: CLAY_BALL
    to: BRICK
  - from: ANCIENT_DEBRIS
    to: NETHERITE_SCRAP
  - from: WET_SPONGE
    to: SPONGE
  - from: CACTUS
    to: GREEN_DYE
  - from: KELP
    to: DRIED_KELP

# Default distance for /near
near-distance: 50.0

# Set a distance by permission for /near
near-permissions:
  - permission: "essentials.near.vip"
    distance: 100.0
  - permission: "essentials.near.staff"
    distance: 200.0

# Date format that will be used if no other format is available
global-date-format: "yyyy-MM-dd HH:mm:ss"

# Replace the result of one placeholder with another, very useful for adding colors for example
# Then simply use the placeholder: %zessentials_replace_<placeholder>% to use this configuration
replace-placeholders:
  # Placeholder %player_ping% (https://api.extendedclip.com/expansions/player/) will be replaced to add color to indicate the player’s ping status.
  # For this example, the placeholder to used will be: %zessentials_replace_player_ping%
  # In this example the player’s ping color will change depending on his ping
  - placeholder: 'player_ping' # Placeholder to be replaced, do not add %
    default: '&c%result%' # Default if no condition found
    replaces: # List of conditions to replace placeholder
      - type: STRING # The type of the condition, here STRING allows to check if the result of the placeholder is equal to the given value
        equalsTo: 0 # The value to be verified
        value: '&aWHOA YOU DONT HAVE PING WTF YOU ARE IN A DATACENTER ?' # The value that will be used, you can add %result% to return the value of the placeholder
      - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number
        max: 50 # The maximum possible number
        value: '&a%result%' # The value that will be used, you can add %result% to return the value of the placeholder
      - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number
        max: 99 # The maximum possible number
        value: '&2%result%' # The value that will be used, you can add %result% to return the value of the placeholder
      - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number
        max: 199 # The maximum possible number
        value: '&e%result%' # The value that will be used, you can add %result% to return the value of the placeholder
      - type: NUMBER # The type of the condition, here NUMBER allows to check if a number is lower or equal to a given number
        max: 299 # The maximum possible number
        value: '&c%result%' # The value that will be used, you can add %result% to return the value of the placeholder
```

{% endcode %}

## Replace Placeholders

Need to display different values depending on the result of a placeholder? With zEssentials, this is possible!

In the example above, if you have the placeholder `%player_ping%`, it will be replaced based on various conditions. If none of the conditions are met, you can return a default value.

### Conditions:

#### STRING

Check if the result of the placeholder is equal to another string.

#### NUMBER

Check if the result is a number and if the result is less than a number defined in the configuration.


---

# 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://zessentials.groupez.dev/getting-started/configuration.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.
