# GUIs

The plugin features a powerful and intuitive GUI creator to build interactive menus for your players, which can be used for enchanting, shops, navigation, and more.

### Creating a GUI

Create a new `.yml` file in `plugins/EdTools/guis/`. The filename becomes the GUI's unique ID.

**Example: `guis/hoe-enchants.yml`**

```yaml
# The title displayed at the top of the GUI. Supports color codes.
title: '&8Hoe Enchantments'
# The number of rows for the inventory. Must be between 1 and 6.
rows: 6
# The sound to play when the GUI is opened.
open-sound: 'BLOCK_CHEST_OPEN'
# Optional: A permission required to open this GUI.
# permission: 'edtools.gui.crop'

# This section defines every item inside the GUI.
contents:
  # The key 'black-glass' is a unique identifier for this item within the GUI.
  'black-glass':
    material: 'BLACK_STAINED_GLASS_PANE'
    name: '&f'
    slots: '0-53' # You can define single slots (e.g., '4') or ranges ('0-8').

  'mining-pickaxe':
    material: 'WOODEN_PICKAXE'
    name: '&e&lMining Pickaxe'
    lore:
      - '&aClick here to switch to the Mining Pickaxe Tool'
    slots: '5'
    # Actions to run on any click type (left, right, middle, etc.).
    any-click-actions:
      - '[swaptool] pickaxe-tool' # Switches the player's held OmniTool
      - '[menu] pickaxe'         # Opens the 'pickaxe' GUI

  'fortune-enchant':
    slots: '10'
    material: '%edtools_enchant_material_crop-fortune%' # Material can be dynamic
    name: '&9&lꜰᴏʀᴛᴜɴᴇ &d&lᴇɴᴄʜᴀɴᴛ'
    lore:
      # Lore can use placeholders and supports conditional logic.
      - 'if(%edtools_leveling_level_crop-level% >= 5) then &9[CLICK TO UPGRADE]'
      - 'if(%edtools_leveling_level_crop-level% < 5) then &c[REQUIRES HOE LEVEL 5]'
    # A requirement that must be met for the click actions to fire.
    # Uses PlaceholderAPI placeholders.
    click-requirement: '%edtools_leveling_level_crop-level% >= 5'
    any-click-actions:
      # Opens another menu, passing context for what is being upgraded.
      - '[menu] upgrade-enchant enchant crop-fortune'
```

### GUI Actions

Actions are commands executed when a player clicks an item. They are defined in a list under keys like `any-click-actions`, `left-click-actions`, `right-click-actions`, etc. The format is `[action] <arguments>`.

Here is a list of all registered actions:

* `[command] <command>`: Makes the player execute a command.
* `[console] <command>`: Executes a command from the server console. Placeholders `{player}`, `{uuid}`, and `{world}` will be replaced.
* `[swapzoneblocks] <zoneId> <zoneBlock>`: Changes the block type for a player within a specific regeneration zone.
* `[close]`: Closes the current GUI for the player.
* `[message] <message>`: Sends a formatted message to the player. Supports color codes and PlaceholderAPI.
* `[menu] <menuName> [placeholder1] [value1]...`: Opens another GUI. You can pass key-value pairs to be used as placeholders in the target menu.
* `[enable-enchant] <enchant>`: Enables a specific enchantment for the player.
* `[disable-enchant] <enchant>`: Disables a specific enchantment for the player.
* `[upgrade-enchant] <enchant> <amount>`: Upgrades a specified enchantment for the player by a given amount.
* `[swaptool] <tool>`: Swaps the player's active OmniTool to the one specified.
* `[sound] <sound_name> [volume] [pitch]`: Plays a sound for the player. Volume and pitch are optional (default to 1.0).
* `[broadcast] <message>`: Broadcasts a message to all players on the server.
* `[title] <title> <subtitle> [fadeIn] [stay] [fadeOut]`: Sends a title and subtitle to the player. The time values are optional.
* `[permission] <permission> <successAction> [failAction]`: Checks if the player has a permission. Executes `successAction` if they do, and `failAction` if they don't. The actions must be a single string (e.g., `'[message] You have permission!'`).
