# Welcome

Here you can find all the various information for all of our plugins and some other useful guides!

## HelpChat's Plugins

{% content-ref url="/pages/rWxp8cjWi8MOiaYmRhoX" %}
[ChatChat](/helpchat-plugins/chatchat)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkPVzDluQTurhhiLKu" %}
[DeluxeMenus](/helpchat-plugins/deluxemenus)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPwe9Hckm-VD\_SA" %}
[DeluxeTags](/helpchat-plugins/deluxetags)
{% endcontent-ref %}

{% embed url="<https://wiki.placeholderapi.com>" fullWidth="false" %}

## Clip's Plugins

{% content-ref url="/pages/-LjfBDitMYJqqTCYc\_g0" %}
[AutoSell](/clips-plugins/autosell)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPYgRqu30\_9vHXg" %}
[ActionAnnouncer](/clips-plugins/actionannouncer)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPaXugIH73sBG8-" %}
[ChatReaction](/clips-plugins/chatreaction)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPn3PiKgWYnXJoN" %}
[DeluxeChat](/clips-plugins/deluxechat)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPqzHBZMjYwvWfk" %}
[DeluxeCommands](/clips-plugins/deluxecommands)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPtGos-zTHucMlz" %}
[DeluxeJoin](/clips-plugins/deluxejoin)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgPzgP-BT-l8G1z8" %}
[EzPrestige](/clips-plugins/ezprestige)
{% endcontent-ref %}

{% content-ref url="/pages/-MB-395rEaML0O-ULOie" %}
[EzRanksPro](/clips-plugins/ezrankspro)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQ4Vzj25NeuREfz" %}
[MessageAnnouncer](/clips-plugins/messageannouncer)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQ7g9iipuwebBYG" %}
[MineCrates](/clips-plugins/minecrates)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQAUTTg3thjKDWC" %}
[NoFlyZone](/clips-plugins/noflyzone)
{% endcontent-ref %}

## Funnycube's Plugins

{% content-ref url="/pages/-LjkMgQFuNTJX-7VSXjS" %}
[CowPunch](/funnycubes-plugins/cowpunch)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQI54i7zE73a5D9" %}
[Firework Chests](/funnycubes-plugins/fireworkchests)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQLVAt-OHC-0Xrp" %}
[Fish Slapper](/funnycubes-plugins/fishslapper)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQOddc1rihygfLV" %}
[RawMsg](/funnycubes-plugins/rawmsg)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQRt5gTOCj9T0xn" %}
[Spit](/funnycubes-plugins/spit)
{% endcontent-ref %}

{% content-ref url="/pages/-LjkMgQUWMW\_qv\_h3-NR" %}
[Temp MOTD](/funnycubes-plugins/tempmotd)
{% endcontent-ref %}

## Glare's Plugins

{% content-ref url="/pages/-M-BNCY3XZmOMgP9aUFN" %}
[Guilds \[W.I.P Migration\]](/glares-plugins/guilds-w.i.p-migration)
{% endcontent-ref %}

{% content-ref url="/pages/-Lxgwq6LMZWeO5MuHGjD" %}
[VoteParty](/glares-plugins/voteparty)
{% endcontent-ref %}

{% hint style="info" %}
**Something Missing?**\
Let us know shooting us a message on our [*Discord*](https://helpch.at/discord).

**Did you know our wiki is open source?**\
[Contribute Here!](https://github.com/helpchat/wiki2)
{% endhint %}


# ChatChat


# Commands

List of all commands and the required permission that ChatChat has.

## Admin Commands

|                  Command                 |      Permission      |                                     Description                                    |
| :--------------------------------------: | :------------------: | :--------------------------------------------------------------------------------: |
|        /chatchat dump \[filename]        |     chatchat.dump    | Creates and posts a dump containing all files of the plugin or the file specified. |
| /chatchat test \<format-name> \<message> | chatchat.test.format |                    Sends the message using the specified format.                   |
|             /chatchat reload             |    chatchat.admin    |                          Reload the ChatChat configuration                         |

## Player Commands

|            Command            |             Aliases            |            Permission           |                               Description                              |
| :---------------------------: | :----------------------------: | :-----------------------------: | :--------------------------------------------------------------------: |
| /whisper \<player> \<message> | /tell, /w, /msg, /message, /pm |           chatchat.pm           |                 Send a private message to another user.                |
|       /reply \<message>       |               /r               |           chatchat.pm           | Send a reply to the last user that you messaged or sent you a message. |
|           /togglemsg          |     /toggledms, /togglepms     |        chatchat.pm.toggle       |                Toggle your private messages on and off.                |
|       /ignore \<player>       |                -               |         chatchat.ignore         |                             Ignore a user.                             |
|      /socialspy \[on/off]     |       /sspy, /pmspy, /spy      |        chatchat.socialspy       |                   Turn your own social spy on or off.                  |
|    /togglemention personal    |      /toggleping personal      | chatchat.mention.personal.block |             Toggle if you receive personal mentions or not.            |
|     /togglemention channel    |       /toggleping channel      |  chatchat.mention.channel.block |             Toggle if you receive channel mentions or not.             |

## Channel Commands

In ChatChat, each channel can have its own commands. Those commands can be set when creating the channels in `plugins/ChatChat/channels.yml` under the toggle-command option.

{% hint style="danger" %}
To make sure channel commands are properly registered, restart the server after any modifications to them.
{% endhint %}

## Command Overriding

If by any chance there are other plugins taking over a command that you want ChatChat to use, or vice versa, you can select which one is going to be used in the `commands.yml` bukkit file.

**Example:**\
\
Let's say you have a plugin that takes over the /msg command and you want ChatChat to take over. You open the `commands.yml` file and add the following under the `aliases:` option:

```yaml
  msg:
  - chatchat:msg $1-
```

{% hint style="danger" %}
Restart the server after modifying the `commands.yml` file to make sure all changes are properly applied!
{% endhint %}


# Permissions

A list of all permissions used by the plugin and a simple description.

{% hint style="info" %}
Some permissions might have limited descriptions on this page but might have more detailed descriptions on other pages. This page is just for listing all permissions.
{% endhint %}

|                Permission                |                                                               Description                                                              |
| :--------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: |
|              chatchat.admin              |                                                      Get access to admin commands.                                                     |
|               chatchat.dump              |                                  Get access to create and publish dumps. Learn more about dumps here.                                  |
|           chatchat.test.format           |                                                 Get access to the format test command.                                                 |
|                chatchat.pm               |                                                  Get access to send Private Messaging.                                                 |
|            chatchat.pm.toggle            |                                              Get access to toggle your Private Messaging.                                              |
|            chatchat.socialspy            |                                             Get access to spy on other's private messages.                                             |
|              chatchat.ignore             |                                                       Get access to ignore users.                                                      |
|          chatchat.ignore.bypass          |                                                   Get access to bypass user ignores.                                                   |
|               chatchat.utf               |  Get access to send any UTF-8 characters in chat. (by default, users only get access to [0-127 and 248](https://www.asciitable.com/)). |
|               chatchat.url               |                                               Get access to send clickable URLs in chat.                                               |
|   chatchat.channel.see.\<channel-name>   |                                                Get access to send messages in a channel.                                               |
|   chatchat.channel.use.\<channel-name>   |                                              Get access to see messages sent in a channel.                                             |
|      chatchat.channel.bypass-radius      | Get access to bypass channels' radii. Sending messages in a radius channel will be broadcasted to all users listening to that channel. |
|      chatchat.format.\<format-name>      |                                                   Get access to use a channel format.                                                  |
|         chatchat.mention.personal        |                                      Get access to mention other online users in public messages.                                      |
|         chatchat.mention.channel         |                 Get access to mention channels. Read more [here](/helpchat-plugins/chatchat/mentions#channel-mentions).                |
|      chatchat.mention.personal.block     |                                            Get access to toggle personal mentions on or off.                                           |
|      chatchat.mention.channel.block      |                                            Get access to toggle channel mentions on or off.                                            |
| chatchat.mention.personal.block.override |                         Get access to mention any online users even if they turned their personal mentions off.                        |
|  chatchat.mention.channel.block.override |                      Get access to mention channels including people that have turned their channel mentions off.                      |
|         chatchat.tag.\<tag-name>         |                         Get access to use custom tags inside public messages. See all the available tags here.                         |


# Formats

Everything about formats, how they work, permissions they require, etc.

In ChatChat there are 2 types of formats: **BasicFormat** and **PriorityFormat.**

## **Basic Format**

In ChatChat, every format is a BasicFormat. Basic formats have 2 components: Name and Parts.\
These formats are usually used for: private messaging, social spy, mentions, etc.

### Format Name

The format name is also the format identifier. This is what you use to find formats, it's also the name you use when giving people permission to formats. Multiple formats should not have the same name.

### Format Parts

The format parts are made out of a key (the name) and a list of strings (the part).\
\
\- the **key** is the part's name and is going to be completely ignored by the plugin. It was added at the requested of the users as it makes the config look a lot more cleaner.\
\- the **part** is the actual format that will be used. ChatChat will just take the list of strings and append them together into one big string and then parse it to a message.

## Priority Format

Priority formats have everything that Basic Formats have but they also have a priority. These formats are the ones used in `formats.yml` for example.

### Priority

If a player has access to multiple formats, the priority will decide what format will be used when they sends a message in chat.

{% hint style="info" %}
The `addons.deluxechat.inverse_priorities` setting in `extensions.yml` dictates if the lowest or the highest number has priority. If this setting is true, lower numbers have higher priority. If this setting is false, it is the other way around.
{% endhint %}

## Permissions

Formats are given away to players using permissions. Every format has a similar permission and that is: `chatchat.format.<format-name>`

## Default Format

In your `formats.yml` file, you can specify the name of the default format. You must also create a format in there with that name. The default format will be used when a user has no permission for any other format.


# Channels

Everything about channels, how they work, permissions they require, etc.

## Channel

Channels are made out of 6 components, some of which are optional.

### Channel Name

The channel name is also the channel identifier. This is what you use to find channels, it's also the name you use when giving people permission to see or send messages in a channel. Multiple channels should not have the same name.

### Message Prefix (optional)

Also known as a quick prefix, the message prefix option is used to quickly send messages in different channels without having to switch to that channel before.\
**Default Value:** `empty`

### Channel Prefix (optional)

Also known as a channel display name, is used for display purposes only. Currently the only use is inside the `%chatchat_channel_prefix% placeholder.`\
**Default Value:** `empty`

### Channel Commands (optional)

Are commands that can be used to switch to the respective channel or to directly send a message in that channel. If for example, you have a staff-chat channel and you add the `staff` command as a channel command, users with access to the staff-chat channel can use `/staff` to switch to the staff-chat channel or they can use `/staff <message>` to send a message in the staff-chat channel.\
**Default Value:** `empty list`

### Channel Radius (optional)

If a channel has a radius, the messages will only be sent to players within x blocks from the sender. Set radius to -1 to mark the channel as global instead.\
**Default Value:** `-1`

### Channel Type (optional)

The channel type option is used to determin the channel's type. By default, ChatChat registers one channel type caleld `default`. When it finds Towny installed it registers 2 new channel types: `towny_town` and `towny_nation`. Other plugins can also use the API to register new channel types.\
**Default Value:** `default`

## Permissions:

Channels have 2 main permissions and some secondary ones:

|              Permission              |                 Description                |
| :----------------------------------: | :----------------------------------------: |
| chatchat.channel.use.\<channel-name> |   Ability to send messages in a channel.   |
| chatchat.channel.see.\<channel-name> | Ability to see messages sent in a channel. |
|    chatchat.channel.bypass-radius    | Ability to bypass the radius in a channel. |

## Default Channel

In your `channels.yml` file, you can specify the name of the default channel. You must also create a channel in there with that name. The default channel will be given to players when they first join the server and also messages sent by people with no permission to other channels will be sent in the default channel.


# Mentions

Everything you need to know about mentions.

Mentions are a way to get someone's attention to your messages. Messages only work in public messages. Mentions are also highly customizable and can be modified in the settings.yml file.

By default ChatChat registers 2 mention types but other plugins can register their own mention types. The default types are: personal and channel mentions.

## Personal Mentions

These are used to directly mention one specific user.

### How they work:

To use them you just type in chat the mention prefix that you can modify in the settings which by default is `@` followed by the user's name. E.g. `@BlitzOffline`. You also need to have the personal mention usage permission and the block bypass permission in case the mentioned user had turned their mentions off.

### What these mentions do:

The user's name will be highlighted in the message to both the sender and the mentioned person and also the mentioned person will hear a sound. The sound is customizable.

If the mentioned user has their personal mentions turned off and the person mentioning them doesn't have the bypass permission the receiver will still see the highlighted name but they won't hear the sound. Also the sender won't see the highlighted name.

### Permissions:

|                Permission                |                                       Description                                       |
| :--------------------------------------: | :-------------------------------------------------------------------------------------: |
|         chatchat.mention.personal        |               Get access to mention other online users in public messages.              |
|      chatchat.mention.personal.block     |                    Get access to toggle personal mentions on or off.                    |
| chatchat.mention.personal.block.override | Get access to mention any online users even if they turned their personal mentions off. |

### Channel Mentions

These are used to mention all the viewers of the channel the message is sent in.

### How they work:

To use them you just type in chat the mention prefix that you can modify in the settings which by default is `@` follwed by `channel`, `here`, or `everyone`. E.g. `@here`. You also need to have the channel mention usage permission.

### What these mentions do:

The mention will be highlighted in the message to both the sender and the users that receive messages in that channel. The recipients will also hear a sound. The sound is customizable.

If there are receivers that have their channel mentions turned off and the sender does not have the the bypass permission, they will not see the highlighted mention and will not hear sound but everyone else will.

### Permissions:

|             Permission            |                                          Description                                         |
| :-------------------------------: | :------------------------------------------------------------------------------------------: |
|      chatchat.mention.channel     |                                Get access to mention channels.                               |
|   chatchat.mention.channel.block  |                       Get access to toggle channel mentions on or off.                       |
| chatchat.mention.channel.override | Get access to mention channels including people that have turned their channel mentions off. |


# Placeholders

A list of internal and PlaceholderAPI placeholders provided by ChatChat.

## PlaceholderAPI

PlaceholderAPI placeholders that can be used both in ChatChat but also in any other plugin that supports PlaceholderAPI placeholders.

<table><thead><tr><th width="398" align="center">Placeholder</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center"><code>%chatchat_channel_name%</code></td><td align="center">Get the name of the channel that the user is currently in.</td></tr><tr><td align="center"><code>%chatchat_channel_prefix%</code></td><td align="center">Get the prefix of the channel that the user is currently in.</td></tr><tr><td align="center"><code>%chatchat_channel_message_prefix%</code></td><td align="center">Get the message prefix of the channel that the user is currently in.</td></tr><tr><td align="center"><code>%chatchat_social_spy_enabled%</code></td><td align="center">Get whether or not this user has social spy enabled.</td></tr><tr><td align="center"><code>%chatchat_private_messages_enabled%</code></td><td align="center">Get whether or not this user has private messages enabled.</td></tr><tr><td align="center"><code>%chatchat_private_messages_recipient%</code></td><td align="center">Get the player that this user has last had a private conversation with. (This user expires after 5 minutes by default but can be configured in <code>settings.yml</code>)</td></tr></tbody></table>

## Internal

Placeholders that can be used inside ChatChat itself but nowhere else.

ChatChat has a few internal placeholders, or more so tags that give users more freedom to customise their chats. These are tags you can only use in ChatChat, and sometimes only in some parts of ChatChat.

### \<recipient:PAPI-PLACEHOLDER>

This tag let's your parse PlaceholderAPI placeholders for the recipient of a message. This tag will work with both: private messages and public messages.

**Example of usage: `<recipient:player_name>`.** This would parse the `%player_name%` placeholder for the recipient of the message.

{% hint style="warning" %}
A thing to note is that you don't use the percent sign (%) for the PAPI placeholders inside this tag.
{% endhint %}

### \<papi:PAPI-PLACEHOLDER>

This tag let's you parse PlaceholderAPI placeholders for the sender of a message. This tag will work with both: private messages and public messages.

Since ChatChat already supports PlaceholderAPI placeholders using the normal format (%placeholder\_name%), this tag does have some special features:

* ChatChat doesn't support the legacy formatting anymore but most placeholders still return strings using those formats. This tag will translate those legacy colors to the new ones for you.
* Because of how legacy formatting works, it will bleed into the message but this tag gives you the ability to stop this. You can add a special argument that will determin if the formatting bleeds into the message or not. The argument is either `inserting` -it will bleed into the rest of the message- or `closing` -it will not bleed into the rest of the message-.

Example of usage: `<papi:player_displayname>`, `<papi:closing:player_displayname>` and `<papi:inserting:player_displayname>`. All of these will show the sender's display name but with the colors translated to MiniMessage. The first 2 tags will make the formatting of the display name not bleed into the message, while the last one will let it bleed.


# API

All the documentation required to start using the API provided by ChatChat.

{% hint style="success" %}
You can find more information about the API by reading the javadocs! (TO BE ADDED)
{% endhint %}

{% hint style="danger" %}
Currently the API is going thru constant changes so information here might be missing or outdated!
{% endhint %}


# Getting Started

Get started using the ChatChat API.

### Declare the ChatChat API repository and dependency in your build files

#### Maven

```xml
<repositories>
    <repository>
        <url>https://repo.helpch.at/snapshots/</url>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>at.helpch</groupId>
        <artifactId>chat-chat-api</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
```

#### Gradle

```kotlin
repositories {
    maven("https://repo.helpch.at/snapshots/")
}
dependencies {
    compileOnly("at.helpch:chat-chat-api:1.0.0-SNAPSHOT")
}
```

## Get an instance of the ChatChatAPI

The ChatChatAPI interface is how you can access and modify most functionalities of ChatChat.

```java
package at.helpch.example;

import at.helpch.chatchat.api.ChatChatAPI;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;

public class ExamplePlugin extends JavaPlugin {

    private ChatChatAPI chatChatAPI;

    @Override
    public void onEnable() {
        if (!getServer().getPluginManager().isPluginEnabled("ChatChat")) {
            getLogger().severe("Could not find ChatChat! Disabling plugin...");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        RegisteredServiceProvider<ChatChatAPI> registeredServiceProvider = getServer().getServicesManager().getRegistration(ChatChatAPI.class);
        if (registeredServiceProvider == null) {
            getLogger().severe("Could not find the ChatChatAPI! Disabling plugin...");
            getServer().getPluginManager().disablePlugin(this);
            return;
        }

        chatChatAPI = registeredServiceProvider.getProvider();
    }

    @Override
    public void onDisable() {
        getLogger().info("Disabling plugin...");
        chatChatAPI = null;
    }

    public @NotNull ChatChatAPI getChatChatAPI() {
        return chatChatAPI;
    }
}

```


# ChatChatAPI

The main way to interact with the plugin

{% hint style="info" %}
You can see more detailed documentation about each holder and manager in the JavaDocs.
{% endhint %}

The ChatChatAPI interface provides access to multiple Holders and Managers.

## UsersHolder

A way to get existent user instances, create new user instances, unload existent user instances and save existent user instances to file.

## HookManager

A way to load new Hooks into ChatChat or get any already loaded hooks.

## ChannelTypeRegistry

A way to add new Channel types to ChatChat.

## RuleManager

A way to add new Rules into ChatChat or get any already loaded rules.

## MentionManager

A way to add new Mention types to ChatChat or get any already loaded mention types.

## MiniPlaceholderManager

A way to register new MiniPlaceholders in ChatChat, get any already loaded mini placeholders or compile all the MiniPlaceholders into a [TagResolver](https://jd.advntr.dev/text-minimessage/4.13.1/net/kyori/adventure/text/minimessage/tag/resolver/TagResolver.html).


# Events

ChatChat triggers a few events. You can find a list with all the events on this page.

## ChatChatEvent

The event is fired whenever a public chat message is being processed and about to be sent.

## PMSendEvent

The event is fired when a private message is being processed and about to be sent.

## ChannelMentionEvent

The event is fired when a user is mentioned in a public message using a channel mention such as: @here, @everyone, @channel

## PersonalMentionEvent

The event is fired when a user is mentioned in a public message using a direct mention such as: @BlitzOffline

## MentionEvent

The event is fired whenever a user is mentioned in a public message thru a channel mention or a direct mention.

## Example

Example of a class listening to the ChatChatEvent and canceling it if the sender's name is BlitzOffline.

```java
package at.helpch.example.listener;

import at.helpch.chatchat.api.event.ChatChatEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class ChatChatEventListener implements Listener {

    @EventHandler(ignoreCancelled = true)
    public void onChatChatEvent(final ChatChatEvent event) {
        if (event.user().player().getName().equals("BlitzOffline")) {
            event.setCancelled(true);
            return;
        }
    }
}

```


# Files

List of the default files the plugin contains.

## settings.yml

```yaml
# The format to send to the sender of a private message
# All formats can be formatted using MiniMessage: https://docs.adventure.kyori.net/minimessage/index.html

private-messages:
  enabled: true
  formats:
    sender-format:
      parts:
        sender:
          - '<gray>you'
        separator:
          - ' <color:#40c9ff>-> '
        recipient:
          - '<gray><recipient:player_name>'
        message:
          - ' <#e81cff>» <white><message>'
    # The format to send to the recipient of a private message
    recipient-format:
      parts:
        sender:
          - '<gray>%player_name%'
        separator:
          - ' <#40c9ff>-> '
        recipient:
          - '<gray>you'
        message:
          - ' <#e81cff>» <white><message>'

    # The format to send to any players with socialspy enabled
    social-spy-format:
      parts:
        prefix:
          - '<gray>(spy) '
        sender:
          - '%player_name%'
        separator:
          - ' <#40c9ff>-> '
        recipient:
          - '<gray><recipient:player_name>'
        message:
          - ' <#e81cff>» <white><message>'

# The format that the <item> placeholder will use in chat. Needs to contain <item>.
# Another available internal placeholder is <amount>.
item-format: '<gray>[</gray><item><gray> x <amount>]'

# Custom line that can show in the hover of the <item> placeholder displaying stuff like item's exact name and amount
# Set to empty string '' if you want to disable it from ever showing.
item-format-info: '<dark_gray><item> x <amount>'

# The prefix to use for mentioning players
mention-prefix: '@'

# The format to use for individual player mentions
mention-format:
  parts:
    name:
      - '<hover:show_text:"<gold>This is a mention!">'
      - '<yellow>@%player_name%'
      - '</hover>'

# The format to use for @channel/@here/@everyone
channel-mention-format: '<yellow>'

# The sound to play when a player is mentioned
# The sounds use the format of adventure sounds, which in turn use the original minecraft names, NOT spigot's.
# Name - Set the sound to play: names of all sounds can be found here: https://www.digminecraft.com/lists/sound_list_pc.php
# Source - set where the source can be played through, the list of all sources can also be found on the above website.
mention-sound:
  name: entity.experience_orb.pickup
  source: master
  pitch: 1
  volume: 1

# Whether to play the mention sound when a user receives a private message
mention-on-message: true

# After how many seconds should the last messaged user be cleared. Set to below 0 to disable expiration.
last-messaged-cache-duration: 300

```

## channels.yml

```yaml
# Set the default channel to talk in.
default-channel: 'global'

# Channels configuration
channels:
  global: # default channel as set in default-channel, no permission required.
    # command to switch channel
    # Changes to this setting REQUIRES a server restart
    toggle-command:
      - 'global'
    # prefix the message with this to automatically type the message in channel
    message-prefix: ''
    # pretty much a variable for the channel prefix, which can be accessed using the PAPI placeholder: %chatchat_channel_prefix%
    # Channel prefixes can be formatted using MiniMessage: https://docs.adventure.kyori.net/minimessage/index.html
    channel-prefix: '[global]'
    # radius from sender other players need to be in to see sender's message. -1 for no radius
    radius: -1
  staff: # permission node: chatchat.channel.see.staff to access this channel (or chatchat.channel.use.staff to talk)
    toggle-command:
      - 'staffchat'
    message-prefix: '#'
    channel-prefix: '[STAFF]'
    radius: -1

#  # this one's for towny, uncomment this section if you have towny installed
#  town:
#    # a special, optional value, indicating that this is a towny town chat
#    # valid options are 'TOWNY_TOWN', 'TOWNY_NATION'
#    # if the type is not valid, it falls back to a standard chat channel
#    type: 'TOWNY_TOWN'
#    toggle-command: 'townchat'
#    message-prefix: 't:'
#    channel-prefix: '[Town]'
#  # as above, but for nations instead of towns
#  nation:
#    type: 'TOWNY_NATION'
#    toggle-command: 'nationchat'
#    message-prefix: 'n:'
#    channel-prefix: '[Nation]'

```

## formats.yml

```yaml
# Set the default format. This will be used when players do not have any other format permissions
default-format: 'default'
# Set the console format. This is the format that will be seen from the console. You will have to use %s to specify
# the player name and the message location instead of <message>
console-format:
  parts:
    channel:
      - '%chatchat_channel_prefix% '
    prefix:
      - '<gray>[<color:#40c9ff>Chat<color:#e81cff>Chat<gray>] '
    name:
      - <white>%player_name%
    message:
      - ' <gray>» <white><message>'


formats:
  default: # this is the default format as set by default-format. No permission is needed.
    priority: 2 # lower number = higher priority
    # list of all the parts of the format, supports unlimited amount of parts.
    # Technically only 1 part is needed and every part only needs one line but to clean up the config, multiple parts
    # can be used and each part can have multiple lines.
    # These parts can be formatted using MiniMessage, which can be found here:
    # https://docs.adventure.kyori.net/minimessage/index.html
    parts:
      channel:
        - '<click:open_url:"https://google.com">'
        - '<hover:show_text:"I am chatting in the %channel_name% channel<newline>Some new line">'
        - '%chatchat_channel_prefix%'
        - '</hover>'
        - '</click>'
      group:
        - '<hover:show_text:"Hey look, i am in the %vault_group% permission group.<newline>Some new line">'
        - ' [%vault_group%]'
        - '</hover>'
      name:
        - '<hover:show_text:"Hey look, i am in the %vault_group% permission group.<newline>Some new line">'
        - ' %player_displayname%'
        - '</hover>'
      divider:
        - '<hover:show_text:"Cool diver tooltip here">'
        - ' > '
        - '</hover>'
      message:
        - '<message>'
        - '<hover:show_text:"This forces everyone to have a ! on the end. Haha">'
        - '!'
        - '</hover>'

  staff: # user needs 'chatchat.format.staff' permission
    priority: 1
    parts:
      channel:
        - '<click:open_url:"https://google.com">'
        - '<hover:show_text:"I am chatting in the %channel_name% channel<newline>Some new line">'
        - '%chatchat_channel_prefix%'
        - '</hover>'
        - '</click>'
      prefix:
        - '<hover:show_text:"Hey look, i am staff<newline>Some new line">'
        - ' [STAFF]'
        - '</hover>'
      name:
        - '<hover:show_text:"Hey look, i am in the %vault_group% permission group.<newline>Some new line">'
        - ' %player_displayname%'
        - '</hover>'
      message-and-divider:
        - '<hover:show_text:"Cool diver tooltip here"> ></hover>'
        - '<message>'

```

## messages.yml

```yaml
# https://wiki.helpch.at

console-only: <red>Only the console can do this!
players-only: <red>Only players can do this!
user-offline: <red>The user is not online!
user-no-town-found: <red>You are not in a town!
no-replies: <red>You have no one to reply to!
replies-disabled: You can't send private messages while they're disabled!
target-replies-disabled: <red>This user has their private messages disabled!
private-messages-enabled: <green>Your private messages have been enabled!
private-messages-disabled: <red>Your private messages have been disabled!
cant-message-yourself: <red>You can't message yourself!
empty-message: <red>You can't send an empty message!
special-characters-no-permission: <red>You do not have permission to use special characters!
social-spy-enabled: <green>Social spy enabled
social-spy-disabled: <red>Social spy disabled
channel-no-permission: <red>You do not have permission to use this channel!
dump-fail: <red>Failed to create dump!
dump-success: '<green>Dump created successfully! You can find it at: <url>'
channel-switched: <green>You have switched to the <channel> channel!
command-unknown-command: <red>Unknown Command.
command-invalid-usage: <red>Invalid usage.
command-invalid-argument: <red>Invalid argument.
command-no-permission: <red>No Permission.

```


# DeluxeMenus

The all in one GUI menu plugin!

![](/files/-LyUBxNKvOIZbhWSmzGC)

## Description

**DeluxeMenus** is the all in one inventory GUI menu plugin!\
You can create GUI menus that open with custom commands that will show stats or perform actions specific to the player who opened it. Your menus are fully configurable. You can create menus that show specific items to different players, or perform different actions depending on what requirement they have for the specific slot in a certain GUI.

## Features

* Ability to create unlimited GUI menus with various tasks.
* Argument support in GUI menu's open command (e.g. `/Menu <Player>`).
* Has no limit with what you can make with it! It's up to your creativity.
* Highly customizable.
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) support.

## Required Dependencies

* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/).

## Optional Dependencies

* [HeadDatabase](https://www.spigotmc.org/resources/14280/) - Use custom heads inside menus - [documentation](/helpchat-plugins/deluxemenus/options-and-configurations/item#material)
* [ItemsAdder](https://www.spigotmc.org/resources/73355/) - Use custom items inside menus - [documentation](/helpchat-plugins/deluxemenus/options-and-configurations/item#material)
* [Oraxen](https://www.spigotmc.org/resources/%E2%80%8D%E2%9C%85-20-%E2%98%84%EF%B8%8F-oraxen-custom-items-blocks-emotes-furniture-resourcepack-and-gui-1-18-1-20-4.72448/) - Use custom items inside menus - [documentation](/helpchat-plugins/deluxemenus/options-and-configurations/item#material)


# Commands & Permissions

List of commands and permissions for the plugin

{% hint style="info" %}
"/dm open" is meant to be an admin command. its not what players should use to open menus. instead you should set up "[open\_command](/helpchat-plugins/deluxemenus/options-and-configurations/gui#open-command)"s for each menu.
{% endhint %}

## Admin Commands

| **Command**                             | **Permission**              | Description                                                                                                                                                             |
| --------------------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| /dm                                     | -                           | Displays some info about the plugin.                                                                                                                                    |
| /dm open \<menu>                        | deluxemenus.open            | Opens the specified menu.                                                                                                                                               |
| /dm open \<menu> \<player>              | deluxemenus.open.others     | Opens the specified menu to the specified player.                                                                                                                       |
| /dm open \<menu> -p:\<target>           | deluxemenus.placeholdersfor | Opens the specified menu for you, but the placeholders in it will be parsed as the specified target.                                                                    |
| /dm open \<menu> \<viewer> -p:\<target> | deluxemenus.placeholdersfor | Opens the specified menu to the specified player but the placeholders in it will be parsed as the specified target.                                                     |
| /dm list \[page/all]                    | deluxemenus.list            | Lists loaded menus.                                                                                                                                                     |
| /dm execute \<player> \<action>         | Player needs to be Op       | Executes any action for a player. Check out the [Action Type](https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations#actions-types) for more info. |
| /dm dump \<menu-name>                   | deluxemenus.admin           | Create a paste bin with the menu and also some other important debugging stuff like server version and java version.                                                    |
| /dm dump config                         | deluxemenus.admin           | Create a paste bin with the config.yml and some other important debugging stuff such as server version and java version                                                 |
| /dm reload                              | deluxemenus.reload          | Reloads the plugin's files.                                                                                                                                             |
| /dm reload \<menu>                      | deluxemenus.reload          | Reload a menu.                                                                                                                                                          |

### Meta Commands

{% hint style="info" %}
"/dm open" is meant to be an admin command. its not what players should use to open menus. instead you should set up "[open\_command](/helpchat-plugins/deluxemenus/options-and-configurations/gui#open-command)"s for each menu.
{% endhint %}

## Admin Commands

| **Command**                                         | **Permission**        | Description                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| /dm meta \<player> list \<type> \[page]             | Player needs to be Op | See a full list of meta values of given type for specified player.                                                                                                                                                                                                                                                           |
| /dm meta \<player> show \<key> \<type>              | Player needs to be Op | See the value of a specific meta key and type for specified player.                                                                                                                                                                                                                                                          |
| /dm meta \<playe> set \<key> \<type> \<value>       | Player needs to be Op | Set a new value of given type at given key for specified player. If a value already exists and is of same type, it will be overwritten. If a value exists and is of different type, the action will fail.                                                                                                                    |
| /dm meta \<player> remove \<key> \<type> \<value>   | Player needs to be Op | Remove the value of given type at given key for specified player. If the existent value is of different type, the action will fail. If there is no value, the action will fail.                                                                                                                                              |
| /dm meta \<player> switch \<key>                    | Player needs to be Op | Switches the value of a BOOLEAN type at given key for specified player. If no value exist at keys or the value is not of type BOOLEAN, the action will fail.                                                                                                                                                                 |
| /dm meta \<player> add \<key> \<type> \<value>      | Player needs to be Op | Adds the specified value to the value existent at given key for specified player. If no value exists at given key, the specified value is set. If value is not number type (DOUBLE, LONG, INTEGER), the action will fail. If the value is a natural number but added value is not, it will be rounded down.                  |
| /dm meta \<player> subtract \<key> \<type> \<value> | Player needs to be Op | Subtracts the specified value to the value existent at given key for specified player. If no value exists at given key, the negative of specified value is set. If value is not number type (DOUBLE, LONG, INTEGER), the action will fail. If the value is a natural number but added value is not, it will be rounded down. |

### Command Aliases

* /deluxemenus
* /deluxemenu
* /dmenu

## Permissions

| Permission                                 | Description                                                                     |
| ------------------------------------------ | ------------------------------------------------------------------------------- |
| deluxemenus.openrequirement.bypass.\*      | Bypasses open requirements for every menu.                                      |
| deluxemenus.openrequirement.bypass.\<menu> | Bypasses open requirements for a specified menu                                 |
| deluxemenus.placeholdersfor.exempt         | Blocks other players from using you in this command `/DM Open <Menu> -p:<You>`. |

{% hint style="info" %}
All text between the less-than and greater-than signs (**<>**) is a placeholder/variable, replace it with the requested value without the less-than and greater-than signs (**<>**).
{% endhint %}


# Options & Configurations

About the plugin's options and configurations

**DeluxeMenus** is a highly customizable plugin, it has many options and configurations to give you the ability to change everything you want to make your custom menus that fits your server's layout.\
It has **GUI** options to manage the GUI menu, and **Item** options to manage every single item on the GUI menu.

## Useful links

* [Placeholders](https://helpch.at/placeholders)
* Materials
  * [1.8.8](https://helpch.at/docs/1.8.8/org/bukkit/Material.html)
  * [1.12.2](https://helpch.at/docs/1.12.2/org/bukkit/Material.html)
  * [1.13.2](https://helpch.at/docs/1.13.2/org/bukkit/Material.html)
  * [1.14.4](https://helpch.at/docs/1.14.4/org/bukkit/Material.html)
  * [Latest](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html)
* [Enchantments](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html) (Be aware that some enchantments are not available on some items.)
* [Dye Colors](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/DyeColor.html)
* [Pattern Types](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/banner/PatternType.html)
* [Sound Types](https://gist.github.com/Andre601/1ab3b4fabd0010ae241156333491c379)

## Values keywords

| Keyword        | Description                                                                                                                                                                                                                      |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **BOOLEAN**    | Replace this with `true` or `false` (If used with a PlaceholderAPI placeholder, this will be `yes` or `no` instead of `true`/`false` \[It's changeable from PlaceholderAPI config file, but `yes`/`no` are the default values]). |
| **TEXT**       | Replace this with any text. Check the description to find out if you can use color/formatting codes.                                                                                                                             |
| **#**          | Replace this with a number. Check the description to see if there are limits.                                                                                                                                                    |
| **COMMAND**    | Replace this with a command without slash (`/`).                                                                                                                                                                                 |
| **SOUND**      | Replace this with a sound name.                                                                                                                                                                                                  |
| **EXPRESSION** | Replace this with a java/placeholder expression/comparison. See [this](/helpchat-plugins/deluxemenus/options-and-configurations/requirements) page for more information.                                                         |

## RGB/Hex

If you want to use RGB/Hex colors in DeluxeMenus on 1.16+ you can use the following format: "\&#aaFF00"

## Placeholders

There is one available placeholder from DeluxeMenus:

* `%deluxemenus_meta_<key>_<dataType>_[default_value]%` - Returns the meta value that is saved with the specified key and type. If no value is saved with the given key and type, the default value is returned. If no default value is specified, an empty value is returned.
* `%deluxemenus_meta_has_value_<key>_[dataType]%` - Returns yes/no response. Checks if there is a value with the given key. It also checks the type if specified.
* `%deluxemenus_opened_menu%` - Returns the ID of the menu that the player currently has open
* `%deluxemenus_is_in_menu%` - Returns yes/no if a user has a menu opened
* `%deluxemenus_last_menu%` - Returns the ID of the previous menu the player had opened

## General plugin options

### Debug

> ```yaml
> debug: STRING
> ```
>
> > **Default value:** `HIGHEST`\
> > **Available values:**\
> > `LOWEST`, `LOW`, `MEDIUM`, `HIGH`, `HIGHEST`

Determines which debug messages are going to be shown in console based on their importance.

`HIGHEST` LEVEL = only debug messages with highest priority are shown\
`LOWEST` LEVEL = all debug messages are shown\
[Stacktraces](https://rollbar.com/blog/java-stack-trace) are only displayed when the debug level is set to MEDIUM, HIGH or HIGHEST.

### Check updates

> ```yaml
> check_updates: BOOLEAN
> ```
>
> > **Default value:** `true`

Enables/Disables checking new updates for the plugin.\
Notifies any operator if there is an update available.


# GUI

All GUI menu related options & configurations

## Syntax

> <pre class="language-yaml"><code class="lang-yaml"><strong>menu_title: "TEXT"
> </strong>open_command: COMMAND
> open_requirement: EXPRESSION
> open_commands:
>   - "[ACTIONTYPE] ACTION"
>   - "[ACTIONTYPE] ACTION"
> inventory_type: "TEXT"
> size: #
> update_interval: #
> items:
> </code></pre>

## Menu Title

> ```yaml
> menu_title: "TEXT"
> ```

The menu title that is shown at the top of the GUI. You can use color and formatting codes here, and PlaceholderAPI placeholders.

## Open Command

> ```yaml
> open_command: COMMAND
> ```
>
> > **Multiple open commands:**
> >
> > ```yaml
> > open_command:
> >   - COMMAND
> >   - COMMAND_2
> > ```

The command used to open the GUI menu. It can only be a single word.

{% hint style="info" %}
To disable the open command, simply delete the line of this option.
{% endhint %}

## Open Requirements

> ```yaml
> open_requirement:
>  requirements:
>    TEXT:
>      type: <type>
> ```

Sets requirements a player should have to open the GUI menu. Check the [Requirements](/helpchat-plugins/deluxemenus/options-and-configurations/requirements) page for more info.

## Placeholders Support Arguments

> ```yaml
> parse_placeholders_after_arguments: true
> ```

In version 1.14.1 of DeluxeMenus, the order of placeholders and arguments being parsed was changed for security reasons. If you know there is no security risk for you, the old order can be reverted by adding this option.

{% hint style="warning" %}
**Security Warning!**

Some placeholders do more than returning values. To prevent user input from being used directly into placeholders, this option is disabled by default. If you know the placeholders you use inside menus are not doing such things, feel free to enable this option!
{% endhint %}

## Arguments Support Placeholders

> ```yaml
> arguments_support_placeholders: true
> ```

This option allows placeholders to be used inside arguments. They will automatically be parsed before the arguments are used anywhere inside the menu.

{% hint style="warning" %}
**Security Warning!**

This allows menu users to parse any placeholders they want. Please only enable this for people you trust!
{% endhint %}

## Open Commands

> ```yaml
> open_commands:
>   - "[ACTIONTYPE] ACTION"
>   - "[ACTIONTYPE] ACTION"
> ```

Runs the command(s) you set when the player opens the menu.

## Close Commands

> ```yaml
> close_commands:
>   - "[ACTIONTYPE] ACTION"
>   - "[ACTIONTYPE] ACTION"
> ```

Runs the command(s) you set when the player close the menu by clicking an item that have the close action (`[close]`).

{% hint style="warning" %}
At the moment, it is not possible to run these actions when a menu is closed by other means such as pressing the "ESC" key.
{% endhint %}

## Inventory Type

> ```yaml
> inventory_type: "TEXT"
> ```
>
> > **Default value:** `CHEST`\
> > **Supported types:**
> >
> > * `ANVIL`
> > * `BARREL`
> > * `BEACON`
> > * `BLAST_FURNACE`
> > * `BREWING`
> > * `CARTOGRAPHY`
> > * `DISPENSER`
> > * `DROPPER`
> > * `ENCHANTING`
> > * `ENDER_CHEST`
> > * `FURNACE`
> > * `GRINDSTONE`
> > * `HOPPER`
> > * `LOOM`
> > * `PLAYER`
> > * `SHULKER_BOX`
> > * `SMOKER`
> > * `WORKBENCH`

Allows you to define a different type of Inventory.

## Size

> ```yaml
> size: #
> ```
>
> > **Default value:** `54`\
> > **Supported values:**
> >
> > * `9`
> > * `18`
> > * `27`
> > * `36`
> > * `45`
> > * `54`

Sets the inventory size.

{% hint style="info" %}
Size option only works for CHEST [inventory types](#inventory-type). Even for that it is optional and will default to 54.
{% endhint %}

## Register Command

> ```yaml
> register_command: true
> ```

Registers the open command with the server.

{% hint style="info" %}
Must be manually added to the menu.
{% endhint %}

{% hint style="info" %}
Server will need to be restarted.
{% endhint %}

## Arguments <a href="#args" id="args"></a>

> ```yaml
> args:
> - "TEXT"
> - "TEXT"
> - "TEXT"
> ```
>
> > * **TEXT** The argument name (Should be unique).

Gives you the ability to set arguments after the [open command](#open-command), and use them inside the menu by adding the argument placeholder (the argument name inside curly braces `{TEXT}`).

Arguments can also be specified when the `[openguimenu]` action is used.

You can have multiple arguments, and they will be set in the same order in the open command.

```
/COMMAND FirstArg SecondArg And the rest
```

```yaml
args:
- first
- second
- last
```

* `{first}` returns `FirstArg`
* `{second}` returns `SecondArg`
* `{last}` returns `And the rest`

{% hint style="success" %}

* It's highly recommended to add the [Args Usage Message](#args-usage-message) option.
* **Requires** [**Register Command**](#register-command) **to be enabled!**
  {% endhint %}

## Arguments Wrong Usage Message

> ```yaml
> args_usage_message: "TEXT"
> ```

Custom message to be sent to a player when he uses a command to open a menu but does not specify the required arguments. Colors and formatters can be used in this message.

Requires [Arguments](#args) to be defined.

## Argument Requirements

Arguments can have their own requirements and they are checked before the menu is opened.

> ```yaml
> args:
>   player:
>    requirements:
>      regex:
>        type: "regex matches"
>        input: "{player}"
>        regex: "^[a-zA-Z]{2,16}$"
>        deny_commands:
>          - "[message] That's not a valid player!"
>      length:
>        type: "string length"
>        input: "{player}"
>        min: 2
>        max: 32
>        deny_commands:
>          - "[message] Player must be between 2 and 32 characters long."
>      player:
>        type: "is object"
>        input: "{player}"
>        object: "player"
>        deny_commands:
>          - "[message] Must be a player's username or UUID."
> ```

## Update Interval

> ```yaml
> update_interval: #
> ```

This is for any items that use the `update:` option (Check it [here](/helpchat-plugins/deluxemenus/options-and-configurations/item#update)).\
The number defines the delay (in seconds) between each refresh of the placeholders in an item's lore/display name.

**Note:** This refreshes/updates the placeholders only.

## Items

> ```yaml
> items:
> ```

This line should be left as is. It is merely telling the plugin you are about to begin defining items.\
Check the [**Item**](/helpchat-plugins/deluxemenus/options-and-configurations/item) page for more information.


# Item

All item related options & configurations

## Syntax

> ```yaml
> items:
>   "ItemName":
>     material: TEXT
>     slot: #
> ```

**Note:**\
Each item will have a name, in this example our item is called **`ItemName`.** This name **should** be unique, so there won't be two or more items with the same name.

## Material

> ```yaml
> material: TEXT
> ```
>
> > **Supported material values:**
> >
> > * [Material name](/helpchat-plugins/deluxemenus/options-and-configurations#useful-links) (`STONE`).
> > * Player head (`head-extended_clip`).
> >   * Placeholder head (`head-%player_name%`, `basehead-%player_basehead_placeholder%`, etc.).
> > * Argument placeholder head (`head-{target}`).
> > * [BaseHead](https://minecraft-heads.com) (`basehead-<base64 (Value field in the head's give command)>`).
> > * Minecraft Texture (`texture-<id>`)\
> >   \- The `id` is what's after `https://textures.minecraft.net/textures/`
> > * [HeadDatabase](https://www.spigotmc.org/resources/14280/) (`hdb-<ID>`).
> > * [ItemsAdder](https://www.spigotmc.org/resources/%E2%9C%A8itemsadder%E2%AD%90emotes-mobs-items-armors-hud-gui-emojis-blocks-wings-hats-liquids.73355/) material (`itemsadder-namespace:name`)
> > * [Oraxen](https://www.spigotmc.org/resources/72448/) material (`oraxen-oraxen_item_id`)
> > * [Nexo](https://polymart.org/product/6901/nexo) material (`nexo-nexo_item_id`)
> > * [MMOItems](https://www.spigotmc.org/resources/mmoitems.39267/) material (`mmoitems-item_type:item_id`)
> > * [ExecutableItems](https://www.spigotmc.org/resources/%E2%9A%94%EF%B8%8Fexecutableitems-%E2%AD%90-customize-all-items-add-abilities-%E2%AD%90-ai-items-generation-on-the-discord-%E2%9C%85.83070/) material (`executableitems-item_id`)
> > * [ExecutableBlocks](https://www.spigotmc.org/resources/%E2%AD%90-executable-blocks-%E2%AD%90-add-activators-on-your-blocks.94696/) material (`executableblocks-item_id`)
> > * [SimpleItemGenerator](https://www.spigotmc.org/resources/simpleitemgenerator-1-8-1-21-4-free.121339/) material (`simpleitemgenerator-item_id`)
> > * [Placeholder](https://helpch.at/placeholders) material (`placeholder-%player_item_in_hand%`).
> > * Item in main hand (`main_hand`).
> > * Item in off hand (`off_hand`).
> > * Items in armor equipment slots (`armor_helmet`, `armor_chestplate`, `armor_leggings` and `armor_boots`)
> > * Water bottle material is: `water_bottle`
> > * Air material is: `air`

Sets the material of the item in the menu.

{% hint style="success" %}
AIR is a valid material. The item will be an empty slot with click commands and click requirements working.
{% endhint %}

{% hint style="success" %}
Placeholders are supported for head, basehead, texture, hdb, itemsadder, oraxen and all other custom materials!
{% endhint %}

## Damage

> ```yaml
> damage: #
> ```
>
> > **Supported damage values:**
> >
> > * Number (`1`).
> > * Placeholder that returns a number (`placeholder-%player_item_in_hand_data%`).

Sets the durability of the item (depends on the [Material](#material) option).

{% hint style="danger" %}
The old `data` option was changed to `damage`. Please use the new option as the old one will be removed in the future.
{% endhint %}

## Amount

> ```yaml
> amount: #
> ```

Sets the item's amount in the menu.

### Dynamic Amount

> ```yaml
> dynamic_amount: '%placeholder%'
> ```

Sets the item's amount in the menu using a [placeholder](https://helpch.at/placeholders).

## Model Data

> ```yaml
> model_data: #
> ```

Allows you to set a CustomModelData for your item. Example of usage:\
`model_data: 14`

{% hint style="danger" %}
**DEPRECATED!**\
Starting with 1.21.4, the new model\_data\_component should be used!
{% endhint %}

## Model Data Component

> ```yaml
> model_data_component:
>   strings: ["string1", "string2"]
>   floats: [1, 2, 3]
>   flags: ["true", "false", "true"]
>   colors: ["255, 255, 255", "0, 0, 0"]
> ```

Allows you to set custom model data component. This is the new replacement for custom model data added by Mojang.

## Item Model

> ```yaml
> item_model: # Namespaced key. Example minecraft:item_model
> ```

Allows you to set a custom Item Model for your item.

{% hint style="success" %}
This option only works on versions 1.21.2 and higher!
{% endhint %}

## Tooltip Style

> ```yaml
> tooltip_style: # Namespaced key. Example minecraft:custom_tooltip
> ```

Allows you to set a custom tooltip for your item.

{% hint style="success" %}
This option only works on versions 1.21.2 and higher!
{% endhint %}

## NBT Tags

```yaml
nbt_string: '<Key>:<StringValue>'
nbt_strings:
- '<Key>:<StringValue>'
- '<Key>:<StringValue>'
nbt_int: '<Key>:<IntegerValue>'
nbt_ints:
- '<Key>:<IntegerValue>'
- '<Key>:<IntegerValue>'
nbt_short: '<Key>:<ShortValue>'
nbt_shorts:
- '<Key>:<ShortValue>'
- '<Key>:<ShortValue>'
nbt_byte: '<Key>:<ByteValue>'
nbt_bytes:
- '<Key>:<ByteValue>'
- '<Key>:<ByteValue>'
```

Allows you to add custom NBT tags to your items like model data.

{% hint style="danger" %}
Deprecated! Should use the new [model\_data](#model-data) option instead for CustomModelData.\
**This option no longer works on 1.21.4 and newer versions!**
{% endhint %}

## Banner Meta

> ```yaml
> banner_meta:
> - <dyecolor>;<patterntype>
> - <dyecolor>;<patterntype>
> ```
>
> > * [Dye colors list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/DyeColor.html).
> > * [Pattern types list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/banner/PatternType.html).

Allows you to create your custom banners and shields.

{% hint style="success" %}
Now with support for SHIELDS! Make sure to also check the new [base\_color](#base-color) option.
{% endhint %}

## Base Color

> <pre class="language-yaml"><code class="lang-yaml"><strong>base_color: &#x3C;dyecolor>
> </strong></code></pre>
>
> > * [Dye colors list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/DyeColor.html).

Allows you to specify base colors for shields and also for banners on 1.12.2 and lower versions.

## Light Level

> ```yaml
> light_level: <lightlevel>
> ```

Allows to set light level for the new `light` item. The value can be a number between 1 and 15.

## Trim Material

> <pre class="language-yaml"><code class="lang-yaml"><strong>trim_material: &#x3C;trimmaterial>
> </strong></code></pre>
>
> > * [Trim materials list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/meta/trim/TrimMaterial.html).

Allows you to specify the trim pattern for armors.

## Trim Pattern

> <pre class="language-yaml"><code class="lang-yaml"><strong>trim_pattern: &#x3C;trimpattern>
> </strong></code></pre>
>
> > * [Trim patterns list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/meta/trim/TrimPattern.html).

Allows you to specify the trim material for armors.

{% hint style="warning" %}
Both options (trim\_material and trim\_pattern) are required for the trim to work!
{% endhint %}

## Item Flags

> ```yaml
> item_flags:
> - <ItemFlag>
> - <ItemFlag>
> ```
>
> > * [Item Flags list.](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/ItemFlag.html)

Allows you to set item flags.

## Potion Effects

> ```yaml
> potion_effects:
> - <PotionEffectType>;<duration>;<amplifier>
> - <PotionEffectType>;<duration>;<amplifier>
> ```
>
> > * [Potion effects list.](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/potion/PotionEffectType.html)

Allows you to set effects (Used if the [material](#material) is a potion, splash\_potion and tipped arrows).

{% hint style="success" %}
Potion Effects no longer require the [RGB](#rgb) option to be set to work!
{% endhint %}

## Entity Type

> ```yaml
> entity_type: <entitytype>
> ```
>
> > * [Entity types list.](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/EntityType.html)

This is mainly targeted for 1.12.2 and lower server versions and allows you to specify monster egg types and monster spawner types.

{% hint style="danger" %}
Option was removed in versions 1.14.0 and newer of the plugin due to versions 1.13.1 and lower of Minecraft no longer being supported.
{% endhint %}

## RGB <a href="#rgb" id="rgb"></a>

> ```yaml
> rgb: #, #, #
> ```
>
> > **Example:**
> >
> > ```yaml
> > rgb: 38, 192, 210
> > ```

Sets the RGB (Red, Green, Blue) color for leather armor, potions, splash potions, tipped arrows and firework stars

{% hint style="info" %}
For RGB option to work on potions and tipped arrows you also need to give it at least one [potion\_effect](#potion-effects).
{% endhint %}

{% hint style="success" %}
You can find a list of default potion colors [`HERE`](https://minecraft.fandom.com/wiki/Effect_colors/Potions_table). You will have to use an online converter to convert the hex values to rgb.
{% endhint %}

## Display Name

> ```yaml
> display_name: "TEXT"
> ```

Sets the item's display name. You can use [placeholders](https://helpch.at/placeholders) and color/format codes.

## Lore

> ```yaml
> lore:
>   - "TEXT"
>   - "TEXT"
> ```

Sets the item's lore (the text shown under the item's name). You can use [placeholders](https://helpch.at/placeholders) and color/format codes and the new line character (`\n`) in this option.

## Lore Append Mode

> ```yaml
> lore_append_mode: # STRING
> ```

Sets a lore append mode. When using custom materials such as `material: mmoitems-type:id`, some of the items have their own lore. This option allows you to combine that lore with the one specified by you using `lore` or completely override it. Default value is `OVERRIDE`

Valid options:

* IGNORE - ignores the `lore` option and only uses the lore specified by the custom item
* OVERRIDE - ignores the lore from the custom item and uses the one specified in `lore`
* BOTTOM - appends the lore specified in `lore` option at the bottom of the one from the custom item
* TOP - appends the lore specified in `lore` option at the top of the one from the custom item

## Slot

> ```yaml
> slot: #
> ```
>
> > **Multiple slots:**
> >
> > ```yaml
> > slots:
> >   - #
> >   - #
> >   - #
> >   
> > # OR
> >   
> > slots:
> >   - #-#
> >   - #-#
> > ```

Sets in which slot the item should be inside the menu.

{% hint style="info" %}

* Slots start at 0.
* Multiple items can be in the same slot, but you'll have to use [view requirement](#view-requirement) and [priority](#priority) options to work properly.
  {% endhint %}

![Slots number in a chest](https://i.imgur.com/lr41ykP.png)

## Priority

> ```yaml
> priority: #
> ```

Sets the item priority. It's used if you want different items in the same slot (by using the [view requirement ](#view-requirement)option).\
The item that has the highest priority will be checked first if the player has the required view requirement. It will display the item if they have the requirements and if not, it will check the next item and so on.

{% hint style="info" %}

* The highest priority is 0.
* The lowest priority is 2147483647.
  {% endhint %}

## View Requirement

> ```yaml
> view_requirement: 'EXPRESSION'
> ```

Sets the requirements the player should have to see the item. (Check [priority](#priority) option for setting up multiple items in the same slot).\
Check the [Requirements](/helpchat-plugins/deluxemenus/options-and-configurations/requirements) page for more info about this option's value and how to use it.

## Update

> ```yaml
> update: BOOLEAN # true or false
> ```

If set to true, it will update the placeholders in the item's [display name](#display-name) and [lore](#lore) **only**.\
Check the [update interval](/helpchat-plugins/deluxemenus/options-and-configurations/gui#update-interval) GUI option to set the update speed.

![An example showing how the update option works in placeholders](https://i.imgur.com/iOKtT2A.gif)

## Enchantments

> ```yaml
> enchantments:
>   - enchantmentid;level
>   - enchantmentid;level
> ```
>
> > * [Enchantments list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/enchantments/Enchantment.html).

Enchants the item with the specified enchantments. (Check the [hide enchantments](#hide-enchantments) option to hide the enchantments)

{% hint style="warning" %}
Some items cannot have the enchanting glow effect
{% endhint %}

## Hide Tooltip

> ```yaml
> hide_tooltip: BOOLEAN # true or false
> ```

If set to true, it will hide the tooltip for the item.

{% hint style="success" %}
This option only works on versions 1.20.5 and higher!
{% endhint %}

## Enchantment Glint Override

> ```yaml
> enchantment_glint_override: BOOLEAN # true or false
> ```

If set to true, it will add a glint to the item, as if the item is enchanted, even if it is not enchanted.

{% hint style="success" %}
This option only works on versions 1.20.5 and higher!
{% endhint %}

## Rarity

> ```yaml
> rarity: STRING
> ```
>
> > * [Rarities list](https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/inventory/ItemRarity.html)

Change the item rarity. As far as we understand it, this will only affect the default name color.

{% hint style="success" %}
This option only works on versions 1.20.5 and higher!
{% endhint %}

## Hide Enchantments

> ```yaml
> hide_enchantments: BOOLEAN # true or false
> ```

If set to true, it will hide the enchantments you set for the item using the [enchantments](#enchantments) option from the item's tooltip (lore).\
Used to add the enchanting glow effect to the item without showing the enchantments text.

{% hint style="danger" %}
**DEPRECATED!**\
**Please use the item\_flags options instead! This option will be removed.**
{% endhint %}

## Hide Attributes

> ```yaml
> hide_attributes: BOOLEAN # true or false
> ```

If set to true, it will hide the vanilla attributes of an item/armor (e.g. **7 Attack Damage**).

{% hint style="danger" %}
**DEPRECATED!**\
**Please use the item\_flags options instead! This option will be removed.**
{% endhint %}

## Hide Unbreakable

> ```yaml
> hide_unbreakable: BOOLEAN # true or false
> ```

If set to true, it will hide the unbreakable tag if the "unbreakable:" option is enabled.

{% hint style="danger" %}
**DEPRECATED!**\
**Please use the item\_flags options instead! This option will be removed.**
{% endhint %}

## Unbreakable

> ```yaml
> unbreakable: BOOLEAN # true or false
> ```

If set to true, it will show the item to be at full durability.

## (Shift) Left/Middle/Right click Commands

> ```yaml
> # click_commands: or
> # left_click_commands: or
> # right_click_commands: or
> # middle_click_commands: or
> # shift_left_click_commands: or
> shift_right_click_commands:
>   - "[ACTIONTYPE] ACTION"
>   - "[ACTIONTYPE] ACTION"
> ```

Sets the actions/commands that should be executed once the player clicks the item. they get executed in order from top to bottom.\
Check [this](/helpchat-plugins/deluxemenus/options-and-configurations#action-types) for all action types and action tags.

{% hint style="danger" %}
Middle clicking was removed by Mojang in 1.18 and newer!
{% endhint %}

## (Shift) Left/Middle/Right click Requirement

> ```yaml
> # click_requirement: or
> # left_click_requirement: or
> # right_click_requirement: or
> # middle_click_requirement: or
> # shift_left_click_requirement: or
> shift_right_click_requirement:
>   requirements: 'EXPRESSION'
>   deny_commands:
>     - "[ACTIONTYPE] ACTION"
>     - "[ACTIONTYPE] ACTION"
> ```

Sets the requirements the player should have to click the item (Check the [Requirements](/helpchat-plugins/deluxemenus/options-and-configurations/requirements) page for more info about the `EXPRESSION` value).\
Deny commands (optional) are the actions that are going to be executed if the player doesn't have the required requirements. But if (s)he does, it will execute the actions specified in the [click commands](#shift-left-middle-right-click-commands) option.

{% hint style="info" %}
You can have deny commands per requirement. Check [this page](/helpchat-plugins/deluxemenus/options-and-configurations/requirements#syntax) for more information.
{% endhint %}

Check [this](/helpchat-plugins/deluxemenus/options-and-configurations#action-types) for all action types and action tags.


# Actions

Actions, also known as commands are the muscles of menus. They are used as interactions for clicks, requirement denies and requirement successes.

## Actions types

The full list of actions is as follows:

| Tag                                                            | Description                                                                                                                                                                                                                              |
| -------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[player] <command>`                                           | Executes a command as the player.                                                                                                                                                                                                        |
| `[console] <command>`                                          | Executes a command from the console.                                                                                                                                                                                                     |
| `[commandevent] <command>`                                     | <p>Executes an unregistered command as the player.<br><br>IMPORTANT: Currently, this action is simply an alias for the \[player] action.</p>                                                                                             |
| `[placeholder] <papi-placeholders>`                            | <p>Parse placeholders for a player without any chat or console output from DeluxeMenus.<br><br>IMPORTANT: If the placeholders have output, it is not hidden!</p>                                                                         |
| `[message] <text>`                                             | Sends a message to the player. You can use [placeholders](https://helpch.at/placeholders) and color/format codes here.                                                                                                                   |
| `[broadcast] <text>`                                           | <p>Sends a message to everyone online including the console.</p><p>You can use <a href="https://helpch.at/placeholders">placeholders</a> and color/format codes here.</p>                                                                |
| `[minimessage] <text>`                                         | Sends a message to a player using the more modern [MiniMessage](https://docs.adventure.kyori.net/minimessage/format.html) format!                                                                                                        |
| `[minibroadcast] <text>`                                       | Sends a message to everyone online using the more modern [MiniMessage](https://docs.adventure.kyori.net/minimessage/format.html) format!                                                                                                 |
| `[openguimenu] <menu-name> [arguments]`                        | <p>Opens another GUI from DeluxeMenus.</p><p>All arguments from the current menu are passed to the opened menu by default. If the opened menu also has arguments, they can be specified as well.</p>                                     |
| `[connect] <server-name>`                                      | <p>Connects the player to a server on the same BungeeCord.<br><br>IMPORTANT: Requires BungeeMessaging. This is present on BungeeCord and WaterFall. On Velocity it might be disabled by default. Check your proxy config.</p>            |
| `[close]`                                                      | Closes the currently opened GUI.                                                                                                                                                                                                         |
| `[json] <JSON-text>`                                           | Send a json message to the player. Use [this](https://minecraftjson.com/) website to easily generate the JSON text.                                                                                                                      |
| `[jsonbroadcast] <JSON-text>`                                  | Send a json message to everyone online. Use [this](https://minecraftjson.com/) website to easily generate the JSON text.                                                                                                                 |
| `[refresh]`                                                    | Refresh items in the current menu view. This updates the shown Items themselves.                                                                                                                                                         |
| `[broadcastsound] <sound> <volume> <pitch>`                    | Broadcast a sound to all players on the server.                                                                                                                                                                                          |
| `[broadcastsoundworld] <sound> <volume> <pitch>`               | Broadcast a sound to all players in the world.                                                                                                                                                                                           |
| `[sound] <sound> <volume> <pitch>`                             | Play a sound for the player.                                                                                                                                                                                                             |
| `[takemoney] <amount>`                                         | Take a certain amount of money from the player. [Vault](https://www.spigotmc.org/resources/34315/) is required for this action to work.                                                                                                  |
| `[givemoney] <amount>`                                         | Give a certain amount of money to the player. [Vault](https://www.spigotmc.org/resources/34315/) is required for this action to work.(requires Vault)                                                                                    |
| `[takeexp] #L`                                                 | Take a certain amount of exp levels or points from a player. To give levels, add `L` at the end, otherwise remove it.                                                                                                                    |
| `[giveexp] #L`                                                 | Give a certain amount of exp levels or points to a player. To give levels, add `L` at the end, otherwise remove it                                                                                                                       |
| `[givepermission] <perm.node>`                                 | Giv a permission to a player. [Vault](https://www.spigotmc.org/resources/vault.34315/) is required for this action to work.                                                                                                              |
| `[takepermission] <perm.node>`                                 | Take a permission from a player. [Vault](https://www.spigotmc.org/resources/vault.34315/) is required for this action work.                                                                                                              |
| `[meta] <set/remove/add/subtract/switch> <key> <type> <value>` | Modifies the player's meta. `add/subtract` are for number types. `switch` is for boolean, it will swap it from true/false. Check [here](/helpchat-plugins/deluxemenus/options-and-configurations/requirements#has-meta) for more detail. |
| `[chat] <message>`                                             | Send a message in chat as the player who this action got executed for.                                                                                                                                                                   |

### **Action tags**

These tags can be added with the action (e.g. `- '[message] example<delay=20>'`).

<table data-header-hidden><thead><tr><th width="374">Tag</th><th>Description</th></tr></thead><tbody><tr><td>Tag</td><td>Description</td></tr><tr><td><code>&#x3C;delay=&#x3C;time>></code></td><td>Executes the action after the specified delay (in ticks, 20 ticks = 1 second).</td></tr><tr><td><code>&#x3C;chance=&#x3C;chance>></code></td><td>Sets a chance to execute the action. Can be from 0 to 100 where 0 means that the action will never execute and 100 means it will always execute.</td></tr></tbody></table>

{% hint style="danger" %}
To note is that chance tags are per action. So if you have 2 action, both with a 50% chance, there won't be just 1 of the actions that execute but instead it will could be none, 1 or both.
{% endhint %}


# Requirements

Everything about DeluxeMenus requirements!

{% hint style="danger" %}
**IMPORTANT!**

**Click requirements do not work without their click commands counterparts! Having success\_commands set up will not be enough!**
{% endhint %}

## Syntax

> ```yaml
> # Other available requirement types:
> # open_requirement:
> # view_requirement:
> # left_click_requirement:
> # right_click_requirement:
> # shift_left_click_requirement:
> # shift_right_click_requirement:
> click_requirement:
>   # Minimum requirements are optional.
>   # If they are not set, then all
>   # requirements will be needed for the
>   # click commands to be executed.
>   # In this example, only one of the
>   # requirements will be needed.
>   minimum_requirements: 1
>   # This option is good for when you use minimum_requirements.
>   # Instead of the plugin checking all the requirements,
>   # it will stop when it has enough.
>   stop_at_success: true
>   requirements:
>     # You can define multiple requirements.
>     # Each requiremnt should have a unique name.
>     requirement_name:
>       type: TYPE
>       # These commands will be exeucted if
>       # the requirement they're set for is
>       # met even if the others are not.
>       # You should be careful and not confuse
>       # these with click_commands: !!!
>       success_commands:
>       - "[ACTIONTYPE] ACTION"
>       - "[ACTIONTYPE] ACTION"
>       # These commands will be executed if
>       # the requirement they're set for is
>       # not met even if the others are.
>       deny_commands:
>       - "[ACTIONTYPE] ACTION"
>       - "[ACTIONTYPE] ACTION"
>       # This option is only required if you
>       # want ot use minimum_requirements:
>       # Minimum requirements will only work
>       # for the optional requirements
>       optional: true
>   # This can only be defined for open and
>   # left/right click requirement
>   deny_commands:
>     - "[ACTIONTYPE] ACTION"
>     - "[ACTIONTYPE] ACTION"
> ```

Requirements allow you to restrict certain actions or even an entire menu and only allow certain players to see and/or use the menu.

## Requirements

| Type                                                                                                                                             | Description                                                   |
| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- |
| [Open Requirement](/helpchat-plugins/deluxemenus/options-and-configurations/gui#open-requirements)                                               | Defines the requirements to open the menu.                    |
| [View Requirement](/helpchat-plugins/deluxemenus/options-and-configurations/item#view-requirement)                                               | Defines the requirements to see an item in the menu.          |
| [(Shift) Left/Right Click Requirements](/helpchat-plugins/deluxemenus/options-and-configurations/item#shift-left-middle-right-click-requirement) | Defines the requirements to (shift) left/right click an item. |

{% hint style="info" %}

* Placeholders and [arguments](/helpchat-plugins/deluxemenus/options-and-configurations/gui#args) can be used in the requirements.
* If you set multiple requirements, all of them should be met (Use [JavaScript type](#javascript) or minimum\_requirements to add optional requirements).
  {% endhint %}

## Deny Commands

Deny commands are used to execute actions when players don't meet requirements. These actions can be set per requirement or per requirement list.

> ```yaml
> click_requirement:
>   requirements:
>     requirement_name:
>       type: TYPE
>       deny_commands:
>       - "[message] This is a deny command per requirement"
>   deny_commands:
>     - "[message] This is deny command per requirements list"
> ```

## Success Commands

Similar to deny commands, Success commands are used to execute actions when players meet requirements. These actions can be set per requirement or per requirement list.

> ```yaml
> click_requirement:
>   requirements:
>     requirement_name:
>       type: TYPE
>       success_commands:
>       - "[message] This is a success command per requirement"
>   success_commands:
>     - "[message] This is success command per requirements list"
> ```

{% hint style="danger" %}
For click requirements, having success\_commands is not enough! Click commands are also needed.
{% endhint %}

## Minimum Requirements

If this option is used, not all requirements that have `optional: true` will be checked. Instead, it will stop when enough requirements are met.

> ```yaml
> minimum_requirements: # Number
> ```

{% hint style="success" %}
This option only works for requirements that have `optional: true`. All the other requirements will still be checked
{% endhint %}

## Stop At Success

When mimimum requirements is used, the requirement validation will not stop when enough requirements are met. Instead it will continue with all requirements check. If this option is enabled, when the number of minimum requirements is met, validation for all remaining requirements will stop.

> ```yaml
> stop_at_success: # TRUE or FALSE
> ```

## Requirement types

{% hint style="warning" %}
When inverting requirements, make sure you put the type in quotation marks. This is because "!" is a special symbol in YAML so it will break the syntax.

ex: `type: "!has permission"`
{% endhint %}

### **Has permission**

> ```yaml
> type: has permission
> permission: TEXT
> ```

Checks if the player has the specified permission ([Vault](https://www.spigotmc.org/resources/34315/) is required).

To invert the requirement (Check if the player doesn't have the permission) you can simply add the exclamation mark before the type name (like this `type: "!has permission"`).

### **Has permissions**

> ```yaml
> type: has permissions
> permissions:
> - TEXT
> - TEXT
> minimum: # Number
> ```

Checks if the player has all the specified permissions ([Vault](https://www.spigotmc.org/resources/34315/) is required). If `minimum: #` is specified, it checks if the player has at least # permissions from the list.

To invert the requirement (Check if the player doesn't have the permissions) you can simply add the exclamation mark before the type name (like this `type: "!has permissions"`).

### **Has money**

> ```yaml
> type: has money
> amount: #
> ```

Checks if the player has the specified amount of money ([Vault](https://www.spigotmc.org/resources/34315/) is required).

To invert the requirement (Check if the player doesn't have the amount of money) you can simply add the exclamation mark before the type name (like this `type: "!has money"`).

{% hint style="info" %}
To use a placeholder as a value for the amount, replace the `amount:` field with `placeholder:`.
{% endhint %}

### **Has Item**

> ```yaml
> type: has item
> # material option supports material names, placeholders and arguments.
> material: "TEXT"
> data: #
> # represents the CustomModelData the item should have.
> modeldata: #
> amount: #
> name: "TEXT"
> # lore can also be one single string: lore: "TEXT"
> lore:
>   - "TEXT"
> # if this is enabled then the plugin will look for items that contain the value
> # set at the option "name" in their name and not for the exact value
> name_contains: boolean
> # if this option is enabled then the plugin will check for the item name,
> # without caring about the case.
> name_ignorecase: boolean
> # if this is enabled then the plugin will look for items that contain the value
> # set at the option "lore" in their lore and not for the exact value
> lore_contains: boolean
> # if this option is enabled then the plugin will check for the item lore,
> # without caring about the case.
> name_ignorecase: boolean
> # if this option is enabled, the plugin will consider only the items that 
> # have no custom model data, no display name and no lore.
> strict: boolean
> # decides if the plugin should also check the armor slots of the player when
> # looking for items
> armor: boolean
> # decides if the plugin should also check the off hand of the player when
> # looking for items
> offhand: boolean
> ```
>
> > **Required fields:**
> >
> > * Material

Checks if the player has the specified item in the inventory.

To invert the requirement (Check if the player doesn't have the item) you can simply add the exclamation mark before the type name (like this `type: "!has item"`).

{% hint style="success" %}
Has support for custom materials. Please [see here](/helpchat-plugins/deluxemenus/options-and-configurations/item#material) for a list of supported custom materials.
{% endhint %}

### **Has Meta**

{% hint style="warning" %}
Meta uses Persistent Data Containers which means this feature will only work on servers that are 1.14 or newer!
{% endhint %}

> ```yaml
> type: has meta
> key: "TEXT"
> meta_type: <STRING, BOOLEAN, DOUBLE, LONG, INTEGER>
> value: EXPECTED VALUE
> ```
>
> > **Required fields:**
> >
> > * key
> > * meta\_type
> > * value

Checks if the player has the specified meta.

If the `meta_type` is a number format (DOUBLE, LONG, INTEGER) it will check if the player's meta value is greater than or equal to the `value`

To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this `type: "!has meta"`).

### **Has Exp**

> ```yaml
> type: has exp
> amount: #
> level: boolean # true if you want to check for exp levels, false for exp points
> ```
>
> > **Required fields:**
> >
> > * amount

Checks if the player has the exp level or points.

If the `level` option does not exist, it will check for exp points by default

To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this `type: "!has exp"`).

### **Is Near**

> ```yaml
> type: is near
> location: "WORLDNAME,X,Y,Z"
> distance: #
> ```
>
> > **Required fields:**
> >
> > * location
> > * distance

Checks if the player is within `distance` of `location`.

To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this `type: "!is near"`).

### **JavaScript**

> ```yaml
> type: javascript
> expression: 'EXPRESSION'
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: javascript
> > expression: '%vault_eco_balance% >= 100'
> > ```

Evaluates a JavaScript expression that must return true or false.

### **String Equals**

> ```yaml
> type: string equals
> input: "TEXT"
> output: "TEXT"
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: string equals
> > input: "%server_name%"
> > output: "HelpChat"
> > ```

Checks if `input:` matches `output:` (Case sensitive).

To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this `type: "!string equals"`).

### **String Equals Ignore Case**

> ```yaml
> type: string equals ignorecase
> input: "TEXT"
> output: "TEXT"
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: string equals ignorecase
> > input: "%server_name%"
> > output: "helpchat"
> > ```

Checks if `input:` matches `output:` (Case insensitive).

To invert the requirement (Check if the input doesn't match the output) you can simply add the exclamation mark before the type name (like this `type: "!string equals ignorecase"`).

### **String Contains**

> ```yaml
> type: string contains
> input: "TEXT"
> output: "TEXT"
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: string contains
> > input: "%server_name%"
> > output: "chat"
> > ```

Checks if `input:` contains `output:` (Case sensitive).

To invert the requirement (Check if the input doesn't contain the output) you can simply add the exclamation mark before the type name (like this `type: "!string contains"`).

### **String Length**

> ```yaml
> type: string length
> input: "TEXT"
> min: # Number
> max: # Number
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: string length
> > input: "%player_name%"
> > min: 3
> > max: 14
> > ```

Checks if `input:` is longer than or equal to `min:` and shorter than or equal to `max:`.

{% hint style="danger" %}
This requirement does not have a negative counterpart: `!string length`
{% endhint %}

### **Is Object**

> ```yaml
> type: is object
> input: "TEXT"
> object: # INT, DOUBLE, PLAYER or UUID
> ```
>
> > **Example:**
> >
> > ```yaml
> > type: string length
> > input: "Notch"
> > object: player
> > ```

Checks if `input:` can be mapped to the Java Object you specified.

* INT - checks if the input can be mapped to an integer
* DOUBLE - checks if the input can be mapped to a double-precision floating point number
* UUID - checks if the input can be mapped to a UUID
* PLAYER - checks if the input matches a player's name or a player's uuid

{% hint style="danger" %}
This requirement does not have a negative counterpart: `!string length`
{% endhint %}

### Regex matches

> ```yaml
> type: regex matches
> input: "TEXT"
> regex: "EXPRESSION"
> ```

Checks if `input:` contains the regular expression in `regex:`.\
Visit [this site](https://regexr.com/) to create regular expressions easily.

To invert the requirement (Check if the input doesn't contain the regular expression) you can simply add the exclamation mark before the type name (like this `type: "!regex matches"`).

### **Comparators**

> ```yaml
> type: (==, >=, <=, !=, >, <)
> input: #
> output: #
> ```

Compares `input:` with `output:`.

{% hint style="success" %}
Now both the input and the output support floating point values.
{% endhint %}

#### Available options

| Comparator | Description                                  |
| ---------- | -------------------------------------------- |
| `==`       | `input:` equals to `output:`                 |
| `>=`       | `input:` greater than or equals to `output:` |
| `<=`       | `input:` less than or equals to `output:`    |
| `!=`       | `input:` not equals to `output:`             |
| `>`        | `input:` greater than `output:`              |
| `<`        | `input:` less than `output:`                 |

## Examples

### Open Requirement

```yaml
open_requirement:
  requirements:
    example_1:
      type: has permission
      permission: open.menu.one
  deny_commands:
    - "[message] &cYou don't have the permission."
```

### View Requirement

```yaml
view_requirement:
  requirements:
    example_2:
      type: string equals
      input: "%player_is_op%"
      output: "yes"
```

### Left/Right Click Requirement

```yaml
# left_click_requirement: or
right_click_requirement:
  requirements:
    example_3:
      type: has money
      amount: 100
  deny_commands:
    - "[message] &7You don't have enough money."
```

### Minimum Requirements

```yaml
click_requirement:
  minimum_requirements: 1
  stop_at_success: true
  deny_commands:
    - "[message] &7You don't have 1 of the 2 permissions required."
  requirements:
    perm1:
      type: has permission
      permission: perm.1
    perm2:
      type: has permission
      permission: perm.2
click_commands:
- "[message] &7You have 1 of the 2 permissions required."
```


# Meta (Metadata)

Starting with Spigot (and forks such as PaperMC) 1.14, a new feature called Persistent Data Container (PDC) was added. This is a small document explaining what it is and how DeluxeMenus uses it.

### What is it?

The Persistent Data Container is a way to store custom data on a whole range of objects; such as items, entities, and block entities. This data is persistent (DOES NOT disappear on server restart) and is stored in the server files.

DeluxeMenus uses PDC to allow menu creators to store and retrieve custom data for menu users (players). You will find this feature on the wiki usually listed under the names "meta" or "metadata".

### Data Types

While PDC allows storage of a wide range of data types and even allows custom implementation, DeluxeMenus only supports 3 of those types: DOUBLE, INTEGER, STRING. Some times you may see that LONG and BOOLEAN are supported as well, but these two are aliases for INTEGER (LONG) and STRING (BOOLEAN).

| Name    | Aliases | Data Type                                     |
| ------- | ------- | --------------------------------------------- |
| INTEGER | LONG    | 64 bit signed number                          |
| STRING  | BOOLEAN | String ("true" or "false" when using BOOLEAN) |
| DOUBLE  |         | Fractional number from 1.7e−308 to 1.7e+308   |

### How to use it?

Setting a value is pretty easy:

1. You can use the `[meta]` action which you can read more about [here](/helpchat-plugins/deluxemenus/options-and-configurations/actions#actions-types).
2. You can use the `/dm meta <player> <set/remove/add/subtract/switch>` command which you can read more about [here](/helpchat-plugins/deluxemenus/commands-and-permissions#meta-commands).

Retrieving a value is just as easy:

1. You can use the PlaceholderAPI placeholder `%deluxemenus_meta_<key>_<data-type>_[default_value]%`.
2. You can use the `/dm meta <player> show <key> <type>` to see a single value with specified key and type.
3. You can use the `/dm meta <player> list <type> [page]` to see a list of all values of one type.

Checking that the player has a value is no harder:

1. You can use the PlaceholderAPI placeholder `%deluxemenus_meta_has_<key>_[data-type]%`.
2. You can use the `has meta` requirement which you can read more about [here](/helpchat-plugins/deluxemenus/options-and-configurations/requirements#has-meta).

### What else must I know?

* Values are stored with a prefix (namespace) even if you don't set one. If you don't specify a namespace, `deluxemenus:` is used.
* Keys (including namespaces) are **case-insensitive**. This means that `my_key` will work the same as `MY_Key` and `MY_KEY`.

If you want a more in-depth description of PDC, we recommend this amazing post from the PaperMC team: <https://docs.papermc.io/paper/dev/pdc>


# Command Registration

More information about registering menu commands

How to register a command?

Each menu can have 2 options:

### [open\_command](/helpchat-plugins/deluxemenus/options-and-configurations/gui#open-command)

This is used to specify a list of commands that can be used to open the menu.

{% hint style="danger" %}
Note that by using this option alone, you will get no tab completion and other plugins will override this command
{% endhint %}

### [register\_command](/helpchat-plugins/deluxemenus/options-and-configurations/gui#register-command)

This accepts a boolean value (true or false). If the value is set to true, then on every server restart, DeluxeMenus will make an effort to register the command with the server. This should provide tab completion.

## I have another plugin that registers the same command. What can I do?

When a command is registered with the server, an alias is provided: `/deluxemenus:<menu-command>`.

To better explain this, let's take an example:

We have a menu named `randomteleportmenu` with `open_command: "rtp"` and `register_command: true`. We'll consider that the server was restarted since the menu was created so the command was registered.\
We are also using a RandomTeleport plugin that also registers the `/rtp` command.

Now when we execute `/rtp`, we get randomly teleported instead of having our menu open.

How do we fix this?\
We could use `/deluxemenus:rtp` to open the menu, but we don't want our players to use prefixed commands as they are too long.\\

The solution is to use the [commands.yml](https://bukkit.fandom.com/wiki/Commands.yml) file provided by our server. We can find the file in the server's root directory where we find the the server jar file and the eula.txt file. If you've never modified the file, it will look something like this by default:

```yaml
command-block-overrides: []
ignore-vanilla-permissions: false
aliases:
  icanhasbukkit:
  - version $1-
```

Now, we modify the file like this:

```yaml
command-block-overrides: []
ignore-vanilla-permissions: false
aliases:
  icanhasbukkit:
  - version $1-
  rtp:
  - deluxemenus:rtp $1-
```

Save, restart the server and you're all done!

{% hint style="danger" %}
Make sure to save the changes and restart the server if you want the changes to properly apply!
{% endhint %}

{% hint style="success" %}
If you want to read more about the commands.yml file, you can do so here: <https://bukkit.fandom.com/wiki/Commands.yml>
{% endhint %}


# External menus

Modify each menu in its own file!

## Creating a new menu

1\. Open the config file `plugins/DeluxeMenus/config.yml`.\
2\. Register the new menu by adding the following under the `gui_menus:` section:

> ```yaml
>   <MenuName>:
>     file: <FileName>.yml
> ```
>
> > * `<MenuName>` is the menu's name (should be unique) .
> > * `<FileName>` is the menu's file name, it's preferred to use the menu's name to prevent confusion (should be unique).

***Note! You can also use file: \<Directory>/\<FileName>.yml to put menus in Sub Directories(Folders).***

So it will be like this:

```yaml
gui_menus:
  <MenuName>:
    file: <FileName>.yml
```

3\. Reload DeluxeMenus plugin (`/dm reload`).\
4\. The menu's file will be generated by the plugin and can be found in the `gui_menus` folder (`plugins/DeluxeMenus/gui_menus`).\
5\. You're done! Open the menu's file and modify it as you wish.

## Moving a menu from config to its own file

1\. Open the config file `plugins/DeluxeMenus/config.yml`.\
2\. Go to the menu part in the config and add the following line to it:

> ```yaml
>     file: <FileName>.yml
> ```
>
> > * `<FileName>` is the menu's file name, it's preferred to use the menu's name to prevent confusion (should be unique).

So it will be like:

```yaml
  YourMenuName:
    file: <FileName>.yml
    menu_title: "Your Title"
    size: #
    # etc
```

3\. Reload DeluxeMenus plugin (`/dm reload`).\
4\. The new menu's file will be generated by the plugin and can be found in the `gui_menus` folder (`plugins/DeluxeMenus/gui_menus`). Go and open it.\
5\. Cut your menu's lines (from the first line after the `file:` option you added in step 2 to the last line for the menu) in the config file.\
6\. Go to the menu's external file and replace the content of it with the menu's lines you cut from the config file (from the previous step).\
7\. Remove 4 spaces before every line in the menu's external file. You can easily do this by selecting all the text in the file (`CTRL` + `A`) then press (`CTRL` + `[`) twice (This way may not be supported in all text editors, such as Notepad++).\
8\. Reload DeluxeMenus plugin (`/dm reload`).\
9\. You're done! The new file should look like this:

```yaml
menu_title: "Your Title"
size: #
# etc
```


# Example GUI menus

Few examples to help you make your own!

## [**Kits**](https://github.com/HelpChat/DeluxeMenus-Wiki/blob/master/gui_menus/kits.yml)

A simple example to show you how you can make a Kits menu that displays 3 different items for each kit, when the kit is available to claim, when it's on cooldown and when it's unavailable (Locked).

To make this work fine you have to download [Essentials](https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/) and download the Essentials expansion using:

> /papi ecloud download Essentials\
> /papi reload

## [**Ranks**](https://github.com/HelpChat/DeluxeMenus-Wiki/blob/master/gui_menus/ranks.yml)

A simple example to show you how you can make a Ranks menu that displays 2 items for each rank, when the rank is not purchased and when the rank or a higher rank is purchased

To make this work fine you have to download [LuckPerms](https://www.spigotmc.org/resources/luckperms.28140/) and also download the Player expansions using:

> /papi ecloud download Player\
> /papi reload

## [**Server Selector**](https://github.com/HelpChat/DeluxeMenus-Wiki/blob/master/gui_menus/serverselector.yml)

A simple example to show you how you can make a Server Selector menu that displays 2 different items for each server, when the server is online and when it's offline.

To make this work fine you have to download Pinger and (optional) Server expansions using:

> /papi ecloud download Pinger\
> /papi ecloud download Server\
> /papi reload

In this example, we have 2 different servers on one BungeeCord: **vanilla** and **games**. We are on the server **games** in this example.

If we want the player to connect to the **vanilla** server, we need to setup the right functions in the `left_click_commands:` \_\*\*\_section\
In our example, we will first close the menu with `[close]`, send a message to the player with `[message]` and finally connect him to the server with `[connect]`.

To show, how many players are on the server vanilla, we will use the placeholder **%pinger\_players\_\<ip>:\<port>%**\
Please keep in mind, that Pinger placeholders have their own update interval, to change it, go to the PlaceholderAPI config file and change the `check_interval:` (default is 30 seconds).\
But what if the server is currently offline?\
In this case, we can use a second item with a lower priority, that will be displayed, if the `view_requirement:` of the first item isn't true.\
So now we can show a different item, if the server is offline. But keep in mind that the items don't update automatically, if the view requirement has changed (from Offline to Online). We can update the menu, by letting the player execute `[refresh]` if he clicks on the item.

The second item is easier. Because we are already connected, so we just need to send a message. And we can show the amount of players on the server with the **%server\_online%** placeholder.

## [**Store**](https://github.com/HelpChat/DeluxeMenus-Wiki/blob/master/gui_menus/store.yml)

A simple example to show you how you can make a Store/Shop menu that you can buy/sell items from using various economic systems.

To make this work fine you have to download the Player and CheckItem expansions and the expansion of the economic system that you'll use using:

> /papi ecloud download Player\
> /papi ecloud download CheckItem\
> /papi ecloud download Vault\
> /papi ecloud download TokenEnchant\
> /papi reload

* [x] \*\*\*\*[**Vault**](https://github.com/help-chat/DeluxeMenus/blob/master/gui_menus/store.yml#L18-L59)\*\*\*\*
* [x] \*\*\*\*[**Token Enchant**](https://github.com/help-chat/DeluxeMenus/blob/master/gui_menus/store.yml#L61-L106)\*\*\*\*
* [x] \*\*\*\*[**Player Points**](https://github.com/help-chat/DeluxeMenus/blob/master/gui_menus/store.yml#L105-L147)\*\*\*\*
* [x] \*\*\*\*[**Player XP**](https://github.com/help-chat/DeluxeMenus/blob/master/gui_menus/store.yml#L149-L192)\*\*\*\*

## [**Meta**](https://github.com/HelpChat/DeluxeMenus-Wiki/blob/master/gui_menus/meta.yml)

A simple example to show you how [meta](/helpchat-plugins/deluxemenus/options-and-configurations#actions-types) works.


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# DeluxeMenus 1.13.1-Release main configuration file
# 
# A full wiki on how to use this plugin can be found at:
# https://github.com/help-chat/DeluxeMenus/wiki

debug: HIGHEST
check_updates: true
gui_menus:
  basics_menu:
    file: basics_menu.yml
  advanced_menu:
    file: advanced_menu.yml
  requirements_menu:
    file: requirements_menu.yml
```

{% endcode %}

## Basics Menu

{% code title="basics\_menu.yml" %}

```yaml
#  A DeluxeMenus basic configuration guide for beginners
#=========================================================
#
# This note will help you understand the basic functions and configuring of DeluxeMenus: commands, requirements, items and others, and from then on you can start to work with more advanced stuff. You can delete this note or any note below at any time. But if you are still here anyway, then let's move down below
#

# Open Command
#
# This setting is the command that will be used to open this menu. Supports normal String or a String List
# NOTE: Use "open_command: []" to create a menu with no commands needed
#
# open_command: <command>
# open_command:
#   - <command1>
#   - <command2>
#
open_command: basicsmenu

# Size
#
# This allows you to set the size of the menu inventory. Range from 9-54.
# If this option is not present in the menu configuration, it will default to 54.
#
size: 9

# Menu title
#
# This is the title of the menu. You can change it with your custom name
# Color codes and placeholders are supported
#
menu_title: 'Basics Menu'

# Open requirement
#
# This setting section allows you to define requirements the menu viewer must meet
# to be allowed to open this menu in game.
#
# Any menu you want to restrict access to based on permission
# should have a basic "has permission" requirement
#
# This setting and requirements can be explained more in depth by checking out
# the requirements_menu.yml file in your menus folder.
# For full reference, check https://github.com/help-chat/DeluxeMenus/wiki/Requirements
#
open_requirement:
  requirements:
    permission:
      type: has permission
      permission: deluxemenus.admin
      deny_commands:
        - '[message] &cYou don''t have permission to do that!'

# Item section. This is where you can start add items into menu, and add functions into each items that you did.
# For depth explanation on the functions, you can check on the note given from config.yml
# For full reference, check https://github.com/help-chat/DeluxeMenus/wiki/Item
#
items:
  # Here you need to set the name ID of the item. This name however, does not display on the menu. Every item must have a unique name ID.
  # In this example, we will call this item name ID: "teststone"
  'teststone':
    #We will start to create a STONE item,
    material: STONE
    # with a Block data set to 1, so that you can change stone type from STONE to GRANITE. More informations about the block data can be checked through each items from Minecraft Wikipedia
    data: 1
    # Slots that you want to put the item. Starts from 0
    slot: 0
    # Here we will name this item. You can change this at anytime. PlaceholderAPI & Color codes supported
    display_name: "&aThis is a special stone"
    # This is the lore setting. Referrence of this same with display_name.
    # You can create multiple lines of lores like this
    lore:
      - "&aTest1"
      - "&cTest2"
      - "&eTest3"


# ==============================================================
#
# Random tips, tricks, and useful info below
#
# ==============================================================
#
# PER ITEM PERMISSION AND PRIORITY INFO:
#
# Per item permissions and priorities are optional.
# High priority = 1, Lowest priority = 2147483647.
# This allows you to show different items for a specific menu slot depending on the highest priority
# item permission a player has. This makes your menus very dynamic :)
#
# You CAN NOT specify a permission without a priority!
# You CAN specify a priority without a permission.
# You should always create a low priority item without a permission which will act as the no permission
# item if a player does not have permission for any of the items that require permission, otherwise
# no item will be set in the slot if a player does not have permission for any of the permission items.
#
# ==============================================================
#
# You specify the command which opens the menu. Make sure this command
# does not conflict with any existing commands on your server!
# A GUI menu without an open command specified will not be loaded!
#
# Menus configuration layout:
# menu_title: '<title of menu goes here>'
# command: <command to open this menu goes here>
# inventory_type: '<add this option if you want to create a menu of a different InventoryType aside from chest>'
# open_requirement:
#   requirements:
#     <unique name for this requirement>:
#    type: <type for this requirement>
#    <unique options per requirement type would go here>
#    deny_commands:
#    - '[message] you do not meet requirements to open this menu'
#   size: <size of this menu, increments of 9, max size is 54>
#   update_interval: <time in seconds this gui should update for a player if an item is set to uodate placeholders>
#   items:
#     <item identifier>:
#       material: <name or id>
#       material: head-<name of player>
#       material: hdb-<HeadDatabase id> (requires plugin HeadDatabase)
#       data: <integer, used for data values for wool etc>
#       amount: <amount of this item to show>
#       slot: <slot number to put this item, slots start at 0 and end at 53 for a size 54 inventory>
#       priority: <this is used if you have multiple items set for the same slot>
#       view_requirement: <see view requirement info below. The lowest priority item a player meets all view requirements for will be shown>
#       update: <true/false if this item should update placeholders on the interval set for the gui menu this item is in>
#       hide_attributes: <true/false if this item should display item attributes>
#       hide_enchantments: <true/false if this item should display item enchantment / level> (useful for 'enchantment glow' items)
#       hide_effects: <true/false if this item should display item effect attributes>
#       hide_unbreakable: <true/false if this item should display item unbreakable attributes>
#       banner_meta: (this is used if you want to display a custom banner with specific patterns)
#       - <dyecolor>;<PatternType> (more information on where to find DyeColor and PatternType names below)
#       - 'RED;BASE'
#       - 'WHITE;CREEPER'
#       display_name: <display name to show for this item>
#       lore:
#       - 'This is the lore of the itemm'
#       - 'placeholders can be used in the display_name or lore.'
#       enchantments: valid enchantment names can be found here: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/enchantments/Enchantment.html
#       - '<ENCHANTMENT>;<LEVEL>'
#       - 'SILK_TOUCH;1'
#       left_click_commands:
#       right_click_commands:
#       shift_left_click_commands:
#       shift_right_click_commands:
#       middle_click_commands:
#       left_click_requirement: <Learn how to use this option in the requirements_menu.yml>
#       right_click_requirement: <Learn how to use this option in the requirements_menu.yml>
#       shift_left_click_requirement: <Learn how to use this option in the requirements_menu.yml>
#       shift_right_click_requirement: <Learn how to use this option in the requirements_menu.yml>
#       middle_click_requirement: <Learn how to use this option in the requirements_menu.yml>
#
#
# You can specify if a GUI menu should be loaded from another file:
#
# gui_menus:
#   <menuName>:
#     file: 'menuName.yml'
#
# This allows you to keep your config clean and not have tons of GUI menus cluttering it.
# The file format the GUI menu is loaded from must end in .yml
# GUI menus loaded from other configuration files must follow a specific format as well...
# To get started loading GUI menus from different files, simply create a GUI menu in this config and specify the file it will load from.
# After that is done, use /dm reload and DeluxeMenus will create a folder and file specific to the GUI menu you specified.
# If the file specified is created by DeluxeMenus (because it did not exist), a default GUI menu layout will be saved to that file.
# From here you can edit it to your liking and use /dm reload to update your GUI menu!
#
# This loading from external config files is only available for gui menus and will not work for click menus yet....
#
# banner_meta must be listed with a specific format:
# banner_meta:
# - <DyeColor>;<PatternType>
#
# Valid DyeColor names can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/DyeColor.html
# Valid PatternTypes can be found here: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/block/banner/PatternType.html
# ==============================================================
#
# Requirement information
#
# Requirements can be set as the following:
#
# open_requirement: This requirement is checked when a menu is opened
# view_requirement: This requirement determines if an item should be set in a menu slot
# left_click_requirement: This requirement is checked when an item is left clicked
# right_click_requirement: This requirement is checked when an item is right clicked
#
# Requirement types:
#   javascript - Evaluates a javascript expression that must return true or false
#     configuration options:
#       expression
#
#   has item - Checks if a player has a specific item
#     configuration options:
#       material
#       amount
#       data
#       name
#       lore
#
#   has money - Checks if a player has enough money (Vault required)
#     configuration options:
#       amount
#
#   has permission - Checks if a player has a specific permission
#     configuration options:
#       permission
#
#   string contains - Checks if a string contains another string
#     configuration options:
#       input
#       output
#
#   string equals - Checks if a string equals another string
#     configuration options:
#       input
#       output
#
#   string equals ignorecase - Checks if a string equals another string ignoring case
#     configuration options:
#       input
#       output
#
#   > - Checks if a number is greater than another number
#     configuration options:
#       input
#       output
#
#   >= - Checks if a number is greater than or equal to another number
#     configuration options:
#       input
#       output
#
#   == - Checks if a number is equal to another number
#     configuration options:
#       input
#       output
#
#   <= - Checks if a number is less than or equal to another number
#     configuration options:
#       input
#       output
#
#   < - Checks if a number is less than another number
#     configuration options:
#       input
#       output
#
#   regex matches - Checks if a placeholder parsed string matches a regex pattern
#     configuration options:
#       input
#       regex
#
#
#
# So why would we want to use requirements?
# By default, DeluxeMenus does not require a player meet any conditions to open your menu.
# If you want to require a menu need a certain permission node for it to be accessed, or a certain amount of money
# for a menu to be opened, You do that with an 'open_requirement'.
# Below is an example of how you would deny opening a menu if the viewer does not have permission:
#
# menu_title: 'Menu that requires permission to open'
# open_command: testmenu
# size: 9
# open_requirement:
#   requirements:
#     this_requirement_name:
#       type: has permission
#       permission: 'testmenu.open'
#       deny_commands:
#       - '[message] you do not have permission to open testmenu'
#
# ==============================================================
#
# Every item in the items list must have a unique <item identifier>
#
# If you choose to update placeholders for a specific item, you must specify update_interval: <time>
# in the menu options for the specific menu.
#
# Every click_command must start with a specific identifier to know what to do for the execution.
# Valid click_command identifiers:
#
# [console] - Execute a command from the console
# Usage: - '[console] <command with no slash>'
#
# [player] - Execute a command for the menu viewer
# Usage: - '[player] <command with no slash>'
#
# [commandevent] - Fire a PlayerCommandPreprocessEvent for commands that do not use the bukkit command system
# Usage: - '[commandevent] <command with no slash>'
#
# [message] - Send a message to the menu viewer
# Usage: - [message] <message to send to the player
#
# [openguimenu] - Open a GUI menu (can only be used in GUI menu click_commands)
# Usage: - '[openguimenu] <guiMenuName>'
#
# [connect] - Connect to the specified bungee server
# Usage: - '[connect] <serverName>'
#
# [close] - Close the viewers open menu
# Usage: - '[close]
#
# [refresh] - Refresh items in the current menu view
# Usage: - '[refresh]
#
# [broadcastsound] - Broadcast a sound to the server
# Usage: - '[broadcastsound]
#
# [sound] - Play a sound for a the specific player
# Usage: - '[sound]
#
# [json] - Send a json message to the menu viewer
# Usage: - '[json] {"text":"message"}'
#
#
#
# You can delay any of the click command being performed by ending the command with
# <delay=(time in TICKS)>
# example:
#     - '[close]'
#     - '[message] it has been 5 seconds since the menu closed!<delay=100>'
#     - '[message] it has been 10 seconds since the menu closed!<delay=200>'
#
```

{% endcode %}

## Advanced Menu

{% code title="advanced\_menu.yml" %}

```yaml
#  A DeluxeMenus advanced configuration guide
#=========================================================
menu_title: '&8> &6&lD&eM &bAdvanced Example'
open_command:
  - advancedmenu
  - advancedexamplemenu
  - themostadvancedmenuintheworld
open_commands:
  - '[sound] BLOCK_BEACON_ACTIVATE'
  - '[message] &7Opening Advanced example menu, Plugin created by &bextended_clip&7!'
size: 27
# as always, only cool people can open this menu :)
open_requirement:
  requirements:
    permission:
      type: has permission
      permission: deluxemenus.admin
      deny_commands:
        - "[message] &8[&bDeluxe&eMenus&8] &cYou don't have perms for this!"
items:
  'example':
    material: LIME_DYE
    slot: 11
    priority: 1
    update: true
    hide_attributes:  true
    display_name: '&bExample Kit'
    lore:
      - ''
      - '&7Cooldown : &f3 Days'
      - '&7Left Click to Redeem'
    view_requirement:
      requirements:
        kit_requirement:
          type: string equals
          input: '%essentials_kit_is_available_example%'
          output: 'yes'
        kit_perm:
          type: has permission
          permission: essentials.kits.example
    left_click_commands:
      - '[player] kit example'
      - '[close]'
  'examplecd':
    material: GRAY_DYE
    slot: 11
    priority: 2
    update: true
    hide_attributes:  true
    display_name: '&cExample Kit Unavailable'
    lore:
      - '&7This kit is on cooldown!'
      - '&7You must wait : &f%essentials_kit_time_until_available_example%'
      - '&7Before using this kit again.'
    view_requirement:
      requirements:
        kit_perm:
          type: has permission
          permission: essentials.kits.example
  'examplenoperm':
    material: GRAY_DYE
    slot: 11
    priority: 3
    update: true
    hide_attributes:  true
    display_name: '&7Example Kit'
    lore:
      - '&7You do not have permission for this kit!'
  'shopexample':
    material: head-extended_clip
    slot: 12
    display_name: '&r'
    lore:
      - '&7Shop example using'
      - '&7view requirements!'
      - '&fLeft click to purchase.'
    priority: 1
    view_requirement:
      requirements:
        shop_perm:
          type: has permission
          permission: deluxemenus.shopexample
    left_click_commands:
      - '[sound] ENTITY_FIREWORK_ROCKET_BLAST'
      - '[console] give %player_name% skull 1 player:extended_clip name:&bExtended_Clip lore:&8<lore>|&7Example_Shop_Item|&8<lore>'
      - '[message] &8[&6&lDeluxeShop&8] &fYou have succesfully purchased &7extended_clips &fhead!'
      - '[console] eco take %player_name% 666'
      - '[close]'
    left_click_requirement:
      requirements:
        balance_check:
          type: has money
          amount: 666
  'shopnoperm':
    material: head-extended_clip
    slot: 12
    display_name: '&7No permission'
    lore:
      - '&8You are missing the &bdeluxemenus.shopexample'
      - '&8permission which is required to view the item!'
      - '&fLeft click to close the menu.'
    left_click_commands:
      - '[sound] ENTITY_SNOW_GOLEM_DEATH'
      - '[close]'
      - '[message] &8[&6&lDeluxeShop&8] &fYou have closed the menu! &7(1 Second message delay!) <delay=20>'
  'filler_item':
    material: GRAY_STAINED_GLASS_PANE
    slots:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
    display_name: ' '
```

{% endcode %}

## Requirements Menu

{% code title="requirements\_menu.yml" %}

```yaml
#
# Requirements tutorial menu v1.0
# authors: clip
#
# contributor: Andre_601
#
# In this tutorial you will learn all about menu requirements
# Requirements allow you to restrict actions or even an entire menu to specific players.
#
# You can read more about requirements here:
#   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements
#
menu_title: 'Requirements Menu'
open_command: requirementsmenu
size: 9
#
# as always, only cool people can open this menu :)
#
open_requirement:
  requirements:
    permission:
      #
      # "has permission" checks if a player has the required permission
      #
      # Read more:
      #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements#has-permission
      #
      type: has permission
      permission: deluxemenus.shop
      deny_commands:
        - '[message] &cYou don''t have permission to do that!'
items:
  #
  # Example 1: Shop Item
  #
  # This is a gold block, which allows you to buy or sell gold blocks for money.
  #
  'gold_block':
    material: GOLD_BLOCK
    slot: 0
    lore:
    - '&7Buy/Sell GOLD_BLOCK'
    - ''
    - '&7- Left-click: &bBuy 1 &7for &a$100'
    - '&7- Right-click: &bSell 1 &7for &a$50'
    - '&7- Shift-left-click: &bBuy 64 &7for &a6,400'
    - '&7- Shift-right-click: &bSell 64 &7for &a$3,200'
    #
    # Requirement(s) when left-clicking an item.
    #
    left_click_requirement:
      requirements:
        #
        # "has money" checks if the player has enough money. Requires Vault.
        # "amount" defines how much the player needs to at least have.
        #
        # Read more:
        #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements#has-money
        #
        has_money:
          type: has money
          amount: 100
      deny_commands:
      - '[message] &cYou don''t have enough money for this!'
    #
    # Command(s) to execute when left-clicking the item.
    # Those commands won't be executed when the above requirements aren't met.
    #
    # Read more:
    #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/item#shift-left-middle-right-click-commands
    #
    left_click_commands:
    - '[console] give %player_name% GOLD_BLOCK 1'
    - '[takemoney] 100'
    - '[message] &aYou bought 1 &6GOLD_BLOCK &afor $100'
    #
    # Requirement(s) for right-clicking an item.
    #
    right_click_requirement:
      requirements:
        #
        # "has item" checks if the player has the specified item in their inventory.
        # Except for "material" and "amount" are all other values optional and will default to a specific value.
        # We check for if the player has 1 gold block.
        #
        # Read more:
        #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements#has-item
        #
        has_item:
          type: has item
          material: 'GOLD_BLOCK'
          amount: 1
        deny_commands:
        - '[message] &cYou don''t have enough &6GOLD_BLOCK &cto sell! Required: 1'
    #
    # Command(s) to execute when right-clicking the item.
    # Those commands won't be executed when the above requirements aren't met.
    #
    # Read more:
    #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/item#shift-left-middle-right-click-commands
    # 
    right_click_commands:
    - '[console] clear %player_name% GOLD_BLOCK 1'
    - '[console] eco give %player_name% 50'
    - '[message] &aYou sold 1 &6GOLD_BLOCK &afor $50'
    #
    # Requirement(s) when left-clicking an item while holding shift on the keyboard.
    #
    shift_left_click_requirement:
      requirements:
        #
        # "has money" checks if the player has enough money. Requires Vault.
        # "amount" defines how much the player needs to at least have.
        #
        # Read more:
        #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements#has-money
        #
        has_money:
          type: has money
          amount: 6400
        deny_commands:
        - '[message] &cYou don''t have enough money for this!'
    #
    # Command(s) to execute when left-clicking the item while holding shift.
    # Those commands won't be executed when the above requirements aren't met.
    #
    # Read more:
    #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/item#shift-left-middle-right-click-commands
    # 
    shift_left_click_commands:
    - '[console] give %player_name% GOLD_BLOCK 64'
    - '[takemoney] 6400'
    - '[message] &aYou bought 64 &6GOLD_BLOCK &afor $6400'
    #
    # Requirement(s) when right-clicking an item while holding shift on the keyboard.
    #
    shift_right_click_requirement:
      requirements:
        #
        # "has item" checks if the player has the specified item in their inventory.
        # Except for "material" are all other values optional and will default to a specific value
        # which is either nothing (name) or 1 (amount).
        # We check for if the player has 64 gold blocks.
        #
        # Read more:
        #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/requirements#has-item
        #
        has_item:
          type: has item
          material: GOLD_BLOCK
          amount: 64
        deny_commands:
        - '[message] &cYou don''t have enough &6GOLD_BLOCK &cto sell! Required: 64'
    #
    # Command(s) to execute when right-clicking the item while holding shift.
    # Those commands won't be executed when the above requirements aren't met.
    #
    # Read more:
    #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/item#shift-left-middle-right-click-commands
    # 
    shift_right_click_commands:
    - '[console] clear %player_name% GOLD_BLOCK 64'
    - '[console] eco give %player_name% 3200'
    - '[message] &aYou sold 64 &6GOLD_BLOCK &afor $3200'
  #
  # Example 2: Free diamonds!
  #
  # This is a diamond, which will only be visible for people, that don't have the permission deluxemenus.free_diamonds.cooldown
  # When you click the item will you get a diamond and a permission is set (using LuckPerms) temporary (acts as cooldown) before
  # refreshing the GUI to update the displayed item.
  #
  'free_diamonds':
    material: DIAMOND
    slot: 1
    lore:
    - '&aFREE DIAMOND! [1/day]'
    - ''
    - '&7Click to get 1 free &bdiamond&7!'
    #
    # "priority" is used in case you have multiple items on the same slot.
    # A lower number equals a higher priority.
    #
    priority: 0
    #
    # view_requirement makes it possible to only display the item when the requirements are met.
    # When the requirements aren't met and a item with lower priority occupies the same slot, will it be displayed instead.
    #
    # Read more:
    #   https://wiki.helpch.at/clips-plugins/deluxemenus/options-and-configurations/item#view-requirement
    #
    view_requirement:
      requirements:
        has_not_perm:
          #
          # "!has permission" checks if the player does NOT have the specified permission.
          #
          type: "!has permission"
          permission: deluxemenus.free_diamonds.cooldown
    #
    # We give the item, set the permission with it expiring in 1 day and refresh the GUI to update the item.
    #
    left_click_commands:
    - '[console] give %player_name% DIAMOND 1'
    - '[console] lp user %player_name% permission settemp deluxemenus.free_diamonds.cooldown true 1d'
    - '[refresh]'
    #
    # We give the item, set the permission with it expiring in 1 day and refresh the GUI to update the item.
    #
    right_click_commands:
    - '[console] give %player_name% DIAMOND 1'
    - '[console] lp user %player_name% permission settemp deluxemenus.free_diamonds.cooldown true 1d'
    - '[refresh]'
  #
  # Example 3: Placeholder item
  #
  # This is a stone, that will be displayed as long as the player has the permission deluxemenus.free_diamonds.cooldown
  #
  'free_diamonds_cooldown':
    material: STONE
    slot: 1
    lore:
    - '&aFREE DIAMOND! [1/day]'
    - ''
    - '&cYou''re currently on cooldown. Click to refresh.'
    #
    # Higher number equals lower priority, meaning this item will only be displayed once the view_requirement of the
    # above isn't met anymore.
    #
    priority: 1
    #
    # We refresh the GUI to update the item, if the view_requirement no longer matches.
    #
    left_click_commands:
    - '[refresh]'
    #
    # We refresh the GUI to update the item, if the view_requirement no longer matches.
    #
    right_click_commands:
    - '[refresh]'
```

{% endcode %}


# DeluxeTags

Allow players to select chat tags that can be awarded by permission!

## Description

**DeluxeTags** gives players an extra tag that can be displayed in chat, tab lists, scoreboards, and any other plugin that supports PlaceholderAPI. Tags are permission based, so a player can unlock multiple tags and select the one they want from a configurable GUI.

## Features

* Create an unlimited number of permission-based tags.
* Organize tags into configurable categories.
* Automatically skip the category selector when a player can only see tags in one category.
* Configure the display name, lore, material, and data value of every tag item.
* Use legacy color codes, hex colors, or MiniMessage formatting.
* Customize the GUI layout, navigation buttons, and modern item model data.
* Grant tags as selectable, visible-only, forced, or default tags.
* Use built-in PlaceholderAPI placeholders with almost any chat plugin.
* Receive update notifications sourced from Modrinth.
* Use DeluxeTags' own chat formatter when no separate chat plugin is installed.

## Documentation

{% content-ref url="/pages/EvcBZrrC7eE04cdh6HSk" %}
[Categories & GUI](/helpchat-plugins/deluxetags/categories-and-gui)
{% endcontent-ref %}

{% content-ref url="/pages/ASYzCRgag3fzK5NMK15Y" %}
[Formatting](/helpchat-plugins/deluxetags/formatting)
{% endcontent-ref %}

{% content-ref url="/pages/-LmHwyfmXIaXm2I4pUoU" %}
[Commands & Permissions](/helpchat-plugins/deluxetags/commands-and-permissions)
{% endcontent-ref %}

{% content-ref url="/pages/-LnTrj\_per-VasQJaQYN" %}
[Placeholders](/helpchat-plugins/deluxetags/placeholders)
{% endcontent-ref %}

{% content-ref url="/pages/-LmHwyfnxQRdHtFt29Cu" %}
[Plugin's files](/helpchat-plugins/deluxetags/files)
{% endcontent-ref %}

## Setup

### Chat plugins with PlaceholderAPI support

1. Stop the server.
2. Place the DeluxeTags JAR in the server's `plugins` folder.
3. Start the server once to generate the configuration files.
4. Edit `/plugins/DeluxeTags/config.yml` and `/plugins/DeluxeTags/messages.yml`.
5. Set `papi_chat: true` in `config.yml`.
6. Add the required [DeluxeTags placeholders](/helpchat-plugins/deluxetags/placeholders) to the chat plugin's format.
7. Restart the server.
8. Grant players `deluxetags.tag.<identifier>` for each tag they may select.
9. Players can now open `/tags` and select a tag.

### DeluxeTags' built-in chat formatter

1. Place the DeluxeTags JAR in the server's `plugins` folder and start the server once.
2. Set `papi_chat: false` in `config.yml`.
3. Set `format_chat.enabled: true`.
4. Customize `format_chat.format`. The default is `{deluxetags_tag} <%1$s> %2$s`.
5. Make sure another plugin is not also changing the chat format.
6. Restart the server.

{% hint style="warning" %}
Back up `config.yml` before upgrading. DeluxeTags 1.9 automatically migrates existing tag GUI settings to the new per-tag format and places uncategorized tags in the `general` category.
{% endhint %}


# Categories & GUI

Configure tag categories, per-tag items, and the DeluxeTags GUI

## Categories

DeluxeTags 1.9 can group tags into categories. Each category controls its selector item and the title of its tag menu.

```yaml
categories:
  all:
    order: 0
    item: BOOK
    name: '&3All Tags'
    lore:
      - '&7Click to view all available tags'
    gui_name: '&3All Tags &8%deluxetags_category_amount% available'
  general:
    order: 1
    item: NAME_TAG
    name: '&6General'
    lore:
      - '&7Click to view general tags'
    gui_name: '&6General Tags &8%deluxetags_category_amount% available'
  donor:
    order: 2
    item: DIAMOND
    name: '&bDonor Tags'
    lore:
      - '&7Click to view donor tags'
    gui_name: '&bDonor Tags &8%deluxetags_category_amount% available'
```

Assign each tag with its `category` option:

```yaml
deluxetags:
  vip:
    order: 1
    category: donor
    tag: '&7[&eVIP&7]'
    displayname: '&6Tag&f: &6%deluxetags_identifier%'
    description:
      - '&7A donor tag'
      - '%deluxetags_available%'
    item: GOLD_INGOT
    data: 0
    permission: deluxetags.tag.vip
```

The `all` identifier is reserved for the automatic all-tags selector. Do not assign a tag to `all`; DeluxeTags will place it in `general`. A tag with no category is also assigned to `general`. If a configured category cannot be found, the tag falls back to `general` and a warning is logged.

### Permission-aware category selection

A category is visible to a player when it contains at least one tag they can either select or see. This includes tags granted through the tag's configured permission, `deluxetags.see.<identifier>`, or `deluxetags.see.all`.

The category selection page is shown only when the player can see tags in two or more real categories. When only one category is available, the selector is skipped and that category opens directly. When the selector is shown, the reserved `all` category is included automatically.

## Per-tag GUI items

Every tag now controls its own GUI item.

| Option        | Description                                                                       |
| ------------- | --------------------------------------------------------------------------------- |
| `order`       | The tag's unique display order. Lower values appear first.                        |
| `category`    | Category identifier. Defaults to `general`.                                       |
| `tag`         | The tag value displayed through `%deluxetags_tag%`.                               |
| `displayname` | GUI item display name.                                                            |
| `description` | GUI lore. Use a YAML list for multiple lines.                                     |
| `item`        | Bukkit material used when the player may select the tag.                          |
| `data`        | Legacy durability/data value.                                                     |
| `permission`  | Permission required to select the tag. Defaults to `deluxetags.tag.<identifier>`. |

Players who may see but not select a tag see the material configured at `gui.tag_visible_item.material`. The tag's own display name and description are retained, so `%deluxetags_available%` can explain whether the tag is unlocked. The selected tag receives an enchantment glow.

{% hint style="info" %}
When upgrading, the old `gui.tag_select_item` display name, lore, material, and data are copied onto existing tags that do not already define those values. Tag descriptions are migrated to multi-line lore, and uncategorized tags are placed in `general`.
{% endhint %}

## GUI layout and buttons

`gui.size` controls the inventory size and must be a multiple of 9 from 9 to 54. `gui.tag_slots` controls where categories and tags are placed and accepts individual slots or ranges such as `0-35`.

The following GUI sections can be customized:

* `gui.tag_visible_item` - fallback material for visible-only tags.
* `gui.divider_item` - decorative filler items.
* `gui.has_tag_item` - current-tag item. When it uses `PLAYER_HEAD`, it displays the viewing player's skin.
* `gui.no_tag_item` - shown when the player has no active tag. `PLAYER_HEAD` also displays the viewing player's skin.
* `gui.exit_item` - closes the GUI.
* `gui.category_back_item` - returns from a tag menu to the category selector.
* `gui.next_page` and `gui.previous_page` - page navigation.

Use `slot` for one position or `slots` for a list of positions. Both forms are supported for configurable buttons.

```yaml
gui:
  size: 54
  tag_slots:
    - 0-35
  category_back_item:
    material: ARROW
    displayname: '&6Back to categories'
    lore:
      - '&7Return to category selection'
    slot: 47
  exit_item:
    material: IRON_DOOR
    displayname: '&cClick to exit'
    lore:
      - '&7Exit the tags menu'
    slots:
      - 48
      - 50
```

See [Placeholders](/helpchat-plugins/deluxetags/placeholders) for category-count and page placeholders.

## Modern item models

Static GUI items support modern resource-pack data. Add the relevant options to sections such as `gui.exit_item`, `gui.category_back_item`, or `gui.next_page`.

```yaml
gui:
  exit_item:
    material: PAPER
    item_model: mypack:gui/close
    model_data: 1001
    model_data_component:
      colors:
        - '255, 0, 0'
      flags:
        - 'true'
      floats:
        - '1.0'
      strings:
        - close_button
    displayname: '&cClose'
    slot: 49
```

| Option                 | Supported server versions | Description                                                                                                    |
| ---------------------- | ------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `model_data`           | 1.14+                     | Legacy integer custom model data.                                                                              |
| `item_model`           | 1.21.2+                   | Namespaced item-model key such as `mypack:gui/close`.                                                          |
| `model_data_component` | 1.21.4+                   | Component values using `colors`, `flags`, `floats`, and `strings` lists. Colors use `red, green, blue` values. |

Options that are not supported by the running server version are ignored.


# Formatting

Configure legacy colors, hex colors, and MiniMessage formatting

DeluxeTags supports legacy ampersand color codes, hex colors, and MiniMessage formatting in tags, messages, and GUI text.

## Legacy colors

Legacy color and style codes continue to work:

```yaml
tag: '&7[&e&lVIP&7]'
```

## Hex colors

With `legacy_hex: false`, use the standard `#RRGGBB` format:

```yaml
legacy_hex: false

deluxetags:
  vip:
    tag: '#ffaa00[VIP]'
```

With `legacy_hex: true`, use the legacy `&#RRGGBB` format instead:

```yaml
legacy_hex: true

deluxetags:
  vip:
    tag: '&#ffaa00[VIP]'
```

Hex colors require a server version that supports RGB chat colors. On older versions, unsupported hex values are removed.

## MiniMessage

MiniMessage is disabled by default. Enable it with:

```yaml
use_minimessage: true
```

You can then use MiniMessage tags in tag values, GUI text, and messages:

```yaml
deluxetags:
  vip:
    order: 1
    category: general
    tag: '<gradient:#ff0000:#ffaa00><bold>[VIP]</bold></gradient>'
    displayname: '<gold>Tag: <yellow>%deluxetags_identifier%'
    description:
      - '<gray>A gradient VIP tag'
      - '%deluxetags_available%'
    item: NAME_TAG
    data: 0
```

Legacy `&` codes and configured hex colors remain supported when MiniMessage is enabled, which allows existing formatting to be migrated gradually.

{% hint style="warning" %}
Quote MiniMessage strings in YAML. This prevents characters such as `:` and `#` from being interpreted as YAML syntax.
{% endhint %}

Run `/tags reload` after changing `use_minimessage` or `legacy_hex`.


# Commands & Permissions

List of commands and permissions for the plugin

## Commands

| Command                                    | Permission                  | Description                                                                |
| ------------------------------------------ | --------------------------- | -------------------------------------------------------------------------- |
| `/tags`                                    | `deluxetags.gui`            | Opens the tag selection GUI.                                               |
| `/tags list`                               | `deluxetags.list`           | Lists the sender's available tags.                                         |
| `/tags list all`                           | `deluxetags.list.all`       | Lists all loaded tags.                                                     |
| `/tags list <player>`                      | `deluxetags.list.player`    | Lists the specified player's available tags.                               |
| `/tags select <tag>`                       | `deluxetags.select`         | Selects an available tag.                                                  |
| `/tags set <player> <tag>`                 | `deluxetags.set`            | Sets an available tag for another player.                                  |
| `/tags clear <player>`                     | `deluxetags.clear`          | Clears another player's active tag.                                        |
| `/tags create <identifier> <tag>`          | `deluxetags.create`         | Creates a tag. New tags are placed in `general`.                           |
| `/tags delete <identifier>`                | `deluxetags.delete`         | Deletes a tag.                                                             |
| `/tags setorder <identifier> <order>`      | `deluxetags.setorder`       | Changes a tag's display order.                                             |
| `/tags setdisplay <identifier> <display>`  | `deluxetags.setdisplay`     | Changes the value returned for a tag's display.                            |
| `/tags setdesc <identifier> <description>` | `deluxetags.setdescription` | Changes a tag's description.                                               |
| `/tags reload`                             | `deluxetags.reload`         | Reloads the plugin's files, categories, tags, GUI, and formatting options. |
| `/tags version`                            | `deluxetags.version`        | Displays the plugin's version.                                             |
| `/tags help`                               | None                        | Lists only the commands the sender has permission to use.                  |

## Tag permissions

| Permission                           | Description                                                                                                                                                |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `deluxetags.tag.<identifier>`        | Allows the player to see and select the tag. This is the default permission when a custom `permission` is not configured for the tag.                      |
| `deluxetags.see.<identifier>`        | Allows the player to see the tag in `/tags` without selecting it.                                                                                          |
| `deluxetags.see.all`                 | Allows the player to see every tag in `/tags` without selecting them.                                                                                      |
| `deluxetags.forcetag.<identifier>`   | Forces this tag when `force_tags: true`. The tag with the lowest order wins when multiple forced-tag permissions are granted.                              |
| `deluxetags.defaulttag.<identifier>` | Uses this tag when the player has no forced, selected, or saved tag. The tag with the lowest order wins when multiple default-tag permissions are granted. |

{% hint style="info" %}
A player can see a category when they can see or select at least one tag inside it. The category selector is only displayed when the player can see tags in two or more real categories; otherwise, DeluxeTags opens the single available category directly.
{% endhint %}

## Other permissions

| Permission                  | Description                            |
| --------------------------- | -------------------------------------- |
| `deluxetags.gui`            | Opens the tag selection GUI.           |
| `deluxetags.select`         | Selects a tag by command.              |
| `deluxetags.list`           | Lists the sender's available tags.     |
| `deluxetags.list.all`       | Lists every loaded tag.                |
| `deluxetags.list.player`    | Lists another player's available tags. |
| `deluxetags.set`            | Sets another player's tag.             |
| `deluxetags.clear`          | Clears another player's active tag.    |
| `deluxetags.create`         | Creates tags.                          |
| `deluxetags.delete`         | Deletes tags.                          |
| `deluxetags.setorder`       | Changes tag order.                     |
| `deluxetags.setdisplay`     | Changes tag display text.              |
| `deluxetags.setdescription` | Changes tag descriptions.              |
| `deluxetags.reload`         | Reloads DeluxeTags.                    |
| `deluxetags.version`        | Views version information.             |
| `deluxetags.updates`        | Receives update notifications.         |

{% hint style="info" %}
Replace `<identifier>` with the tag's identifier without the angle brackets. Permission names are case-insensitive, but lowercase is recommended.
{% endhint %}


# Placeholders

Plugin's placeholders

{% hint style="info" %}
Replace `<identifier>` with the tag's identifier without the angle brackets.
{% endhint %}

## PlaceholderAPI placeholders

DeluxeTags includes its own [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) expansion. No separate eCloud download is required.

| Placeholder                             | Return value | Description                                                 |
| --------------------------------------- | ------------ | ----------------------------------------------------------- |
| `%deluxetags_tag%`                      | Text         | The player's active tag display.                            |
| `%deluxetags_identifier%`               | Text         | The player's active tag identifier.                         |
| `%deluxetags_description%`              | Text         | The player's active tag description.                        |
| `%deluxetags_order%`                    | Number       | The player's active tag order.                              |
| `%deluxetags_amount%`                   | Number       | The number of tags the player has permission to select.     |
| `%deluxetags_tag_<identifier>%`         | Text         | The configured display of a specific tag.                   |
| `%deluxetags_description_<identifier>%` | Text         | The configured description of a specific tag.               |
| `%deluxetags_order_<identifier>%`       | Number       | The configured order of a specific tag.                     |
| `%deluxetags_has_tag_<identifier>%`     | Boolean      | Whether the player has permission to select a specific tag. |

## Internal placeholders

Internal placeholders can be used in DeluxeTags' GUI text, item names, lore, and other supported configuration strings. Both percent and brace forms are supported, for example `%deluxetags_tag%` and `{deluxetags_tag}`.

| Placeholder                    | Return value | Description                                                                                                        |
| ------------------------------ | ------------ | ------------------------------------------------------------------------------------------------------------------ |
| `%player%`                     | Text         | The player's username.                                                                                             |
| `%displayname%`                | Text         | The player's display name.                                                                                         |
| `%deluxetags_tag%`             | Text         | The displayed tag's value, or the active tag where appropriate.                                                    |
| `%deluxetags_identifier%`      | Text         | The displayed tag's identifier.                                                                                    |
| `%deluxetags_description%`     | Text         | The displayed tag's description.                                                                                   |
| `%deluxetags_amount%`          | Number       | The total number of tags the player can select.                                                                    |
| `%deluxetags_category_amount%` | Number       | The number of tags the player can select in the current category. In `all`, this is the total available tag count. |
| `%deluxetags_available%`       | Text         | The configured `gui.tag_availability_placeholder` value for the displayed tag.                                     |

## GUI page placeholders

| Placeholder       | Description                                                                                                            |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `%previous_page%` | Previous page number, or an empty value on the first page.                                                             |
| `%current_page%`  | Current page number.                                                                                                   |
| `%next_page%`     | Next page number, or an empty value on the last page.                                                                  |
| `%page%`          | Destination page number when used on the next or previous page item. Kept for compatibility with older configurations. |

The brace forms `{previous_page}`, `{current_page}`, `{next_page}`, and `{page}` are also supported.


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# DeluxeTags version: 1.9.0-Release Main Configuration
#
# Formatting options:
# legacy_hex: false # Use '#RRGGBB' for raw hex colors
# legacy_hex: true  # Use '&#RRGGBB' for raw hex colors
# use_minimessage: false # Enable tags such as <red> and <gradient:#ff0000:#00ff00>
#
# Create your tags using the following format:
#
# deluxetags:
#   VIP:
#     order: 1
#     category: general
#     tag: '&7[&eVIP&7]'
#     displayname: '&6Tag&f: &6%deluxetags_identifier%'
#     description:
#       - 'This tag is awarded by getting VIP'
#       - '%deluxetags_available%'
#     item: NAME_TAG
#     data: 0
#
# Create categories using the following format:
#
# categories:
#   general:
#     order: 1
#     item: NAME_TAG
#     name: '&6General'
#     lore:
#       - '&7Click to view general tags'
#     gui_name: '&6General tags &8%deluxetags_category_amount% available'
#
# The reserved 'all' category configures the automatic all-tags selector item.
#
# Placeholders for your chat plugin that supports PlaceholderAPI:
#
# %deluxetags_identifier% - display the players active tag identifier
# %deluxetags_tag% - display the players active tag
# %deluxetags_description% - display the players active tag description
# %deluxetags_amount% - display the amount of tags a player has access to
#
# Placeholders for the tags GUI:
#
# %deluxetags_available% - display whether the player can select the displayed tag
# %deluxetags_category_amount% - display the amount of tags the player can select in the current category

use_minimessage: false
force_tags: false
check_updates: true
legacy_hex: false
papi_chat: true
format_chat:
  enabled: false
  format: '{deluxetags_tag} <%1$s> %2$s'
load_tag_on_join: true
gui:
  tag_availability_placeholder:
    has_permission: '&aTag unlocked! Click to select'
    no_permission: '&cTag locked '
  name: '&3Select a category:'
  size: 54
  tag_slots:
  - 0-35
  tag_visible_item:
    material: BARRIER
    data: 0
  divider_item:
    material: BLACK_STAINED_GLASS_PANE
    data: 0
    displayname: '&0'
    lore: []
    slots:
    - 36-44
  has_tag_item:
    material: PLAYER_HEAD
    data: 0
    displayname: '&eCurrent tag&f: &6%deluxetags_identifier%'
    lore:
    - '%deluxetags_tag%'
    - Click to remove your current tag
    slot: 49
  no_tag_item:
    material: PLAYER_HEAD
    data: 0
    displayname: '&cYou don''t have a tag set!'
    lore:
    - '&7Click a tag above to select one!'
    slot: 49
  exit_item:
    material: IRON_DOOR
    data: 0
    displayname: '&cClick to exit'
    lore:
    - '&7Exit the tags menu'
    slots:
    - 48
    - 50
  category_back_item:
    material: ARROW
    data: 0
    displayname: '&6Back to categories'
    lore:
    - '&7Return to category selection'
    slot: 47
  next_page:
    material: PAPER
    data: 0
    displayname: '&6Next page: %page%'
    lore:
    - '&7Move to the next page'
    slot: 53
  previous_page:
    material: PAPER
    data: 0
    displayname: '&6Previous page: %page%'
    lore:
    - '&7Move to the previous page'
    slot: 45
categories:
  all:
    order: 0
    item: BOOK
    name: '&3All Tags'
    lore:
    - '&7Click to view all available tags'
    gui_name: '&3All Tags &8%deluxetags_category_amount% available'
  general:
    order: 1
    item: NAME_TAG
    name: '&6General'
    lore:
    - '&7Click to view general tags'
    gui_name: '&6General tags &8%deluxetags_category_amount% available'
  epic:
    order: 2
    item: BLAZE_POWDER
    name: '&3Epic Tags'
    lore:
    - '&9Click to view epic tags'
    gui_name: '&3Epic Tags &8%deluxetags_category_amount% available'
deluxetags:
  example:
    order: 1
    category: general
    tag: '&8[&bDeluxeTags&8]'
    displayname: '&6Tag&f: &6%deluxetags_identifier%'
    description:
    - '&cAwarded for using DeluxeTags!'
    - '%deluxetags_available%'
    item: NAME_TAG
    data: 0
    permission: deluxetags.tag.example
  epic:
    order: 2
    category: epic
    tag: '&8[&3Epic&8]'
    displayname: '&6Tag&f: &6%deluxetags_identifier%'
    description:
    - '&9Awarded for using categories'
    - '%deluxetags_available%'
    item: BLAZE_POWDER
    data: 0
    permission: deluxetags.tag.epic

```

{% endcode %}

For detailed explanations and additional examples, see [Categories & GUI](/helpchat-plugins/deluxetags/categories-and-gui) and [Formatting](/helpchat-plugins/deluxetags/formatting).

When `check_updates: true`, DeluxeTags checks Modrinth for new releases and notifies players with `deluxetags.updates`.

{% hint style="warning" %}
Back up `config.yml` before upgrading. DeluxeTags 1.9 automatically migrates `gui.tag_select_item` values to individual tags, converts tag descriptions to lore lists, moves the legacy `tag_availability_placeholder` section under `gui`, and assigns uncategorized tags to `general`.
{% endhint %}

## Messages

{% code title="messages.yml" %}

```yaml
# DeluxeTags messages.yml
# Edit the plugin messages to your liking!

cmd:
  no_permission: '&cYou don''t have &7{0} &cto do that!'
  target_not_online: '&f{0} &cis not online!'
  no_tags_loaded: '&cThere are no tags loaded!'
  no_tags_available: '&cYou don''t have any tags available!'
  no_tags_available_target: '&f{0} &cdon''t have any tags available!'
  tag_list_fail: '&cYou don''t have any tags loaded.'
  tag_list_fail_target: '&c{0} has no tags loaded.'
  tags_list: '&f{0} &aavailable tags: &f{1}'
  tags_list_all: '&f{0} &atotal tags loaded: &f{1}'
  tags_list_others: '&f{0} &ahas &f{1} &atotal tags loaded: &f{2}'
  tag_select_incorrect_usage: '&cIncorrect usage! &7/tags select <tagname>'
  tag_select_success: '&7Your tag was set to: &r{1}'
  tag_select_invalid_name: '&f{0} &cis not a valid tag name!'
  tag_select_already_set: '&f{0} &cis already set as your current tag!'
  help_title: '&5&lDeluxeTags &f&oHelp'
  help_color: '&8> &d&l'
  help_tags: '&f&oOpen your tags GUI'
  help_list: '&f&oView tags available to you'
  help_select: '&f&oSelect a tag as your active tag'
  help_admin_set: '&f&oSet a players tag'
  help_admin_clear: '&f&oClear a players tag'
  help_admin_create: '&f&oCreate a new tag'
  help_admin_delete: '&f&oDelete an existing tag'
  help_admin_setdesc: '&f&oSet a description for a tag'
  help_admin_setorder: '&f&oChange the order for a tag'
  help_admin_setdisplay: '&f&oChange a tag''s display'
  help_version: '&f&oView DeluxeTags version and author information'
  help_reload: '&f&oReload the tags config'
  admin_set_incorrect_usage: '&cIncorrect usage! &7/tags set <player> <tag>'
  admin_set_no_tags_avail: '&f{0} &cdoesn''t have any tags available!'
  admin_set_success: '&f{0}s &atag has been set to: {1} &7({2}&7)'
  admin_set_success_to_target: '&7Your tag has been set to &f{1} &aby &f{2}'
  admin_set_success_fail: '&f{0} &cis not a valid tag for &f{1}&c!'
  admin_clear_incorrect_usage: '&cIncorrect usage! &7/tags clear <player>'
  admin_clear_no_tag_set: '&f{0} &cdoesn''t have a tag set!'
  admin_clear_success: '&f{0}s &atag has been cleared!'
  admin_clear_success_to_target: '&7Your tag has been cleared &aby &f{0}'
  admin_create_tag_incorrect_usage: '&cIncorrect usage! &7/tags create <identifier>
    <tag>'
  admin_create_tag_success: '&aTag created&7: &f{0}&7:&f{1}'
  admin_create_tag_fail: '&f{0} &cis already a loaded tag name!'
  admin_delete_tag_incorrect_usage: '&cIncorrect usage! &7/tags delete <identifier>'
  admin_delete_tag_success: '&7Tag &f{0} &7has been deleted!'
  admin_delete_tag_fail: '&f{0} &cis not a loaded tag name!'
  admin_set_description_incorrect_usage: '&cIncorrect usage! &7/tags setdesc <identifier>
    <description>'
  admin_set_description_success: '{0} &adescription set to &7: &f{2}'
  admin_set_description_fail: '&f{0} &cis not a loaded tag name!'
  admin_set_order_incorrect_usage: '&cIncorrect usage! &7/tags setorder <identifier>
    <order>'
  admin_set_order_success: '&aOrder &f{0}&a set for &7: &f{1}'
  admin_set_order_fail: '&f{0} &cis not a loaded tag name!'
  admin_set_order_not_a_number: '&f{0} &cis not a valid order! It should be a number.'
  admin_set_order_already_exists: '&cOrder &f{0}&c is already in use.'
  admin_set_display_incorrect_usage: '&cIncorrect usage! &7/tags setdisplay <identifier>
    <display>'
  admin_set_display_success: '{0} &adisplay set to &7: &f{1}'
  admin_set_display_fail: '&f{0} &cis not a loaded tag name!'
  admin_reload: '&aConfiguration successfully reloaded! &f{0} &atags loaded!'
  incorrect_usage: '&cIncorrect usage! Use &7/tags help'
gui:
  placeholders:
    tag:
      available: '&aAvailable'
      unavailable: '&cUnavailable'
  tag_selected: '&aYour tag has been set to &f{0} &7({1}&7)'
  tag_disabled: '&7Your tag has been disabled!'
  page_error: '&cThere was a problem getting the previous page number!'

```

{% endcode %}


# AutoSell

Ultimate prison mining and selling solution! /sellall + signs + blocks2inv + the original "AutoSell"

![](/files/-LyUB7tBzjYhy_K-4U-H)

## Description

**AutoSell** is the selling solution for all prison servers, allows server owners to create permission-based shops were players are able to sell their items. **AutoSell** is also fully equipped with a wide range of extra features.

## Features

* Highly customizable.
* Auto selling.
* Multiplier system.
* Blocks to inventory.
* Automatic ingots to blocks converter system.
* Auto smelt system.
* Supports all enchantments.
* Easy to setup command-based shop system.
* [WorldGuard ](https://dev.bukkit.org/projects/worldguard)support.
* [PlaceholderAPI ](https://www.spigotmc.org/resources/6245/)support.
* [VKBackPack ](https://www.spigotmc.org/resources/vkbackpack.10117/)support.

## Dependencies

#### Required dependencies

* [Vault](https://www.spigotmc.org/resources/34315/)
* Any vault compatible economy plugin

#### Optional dependencies

* [WorldGuard](http://dev.bukkit.org/bukkit-plugins/worldguard/)
* [MineResetLite](https://www.spigotmc.org/resources/mineresetlite-with-worldedit-v6-v7-tokenenchant-explosive-support.61713/)
* [PrisonMines](https://www.spigotmc.org/resources/prisonmines.4046/)
* [AsylumMines](https://www.spigotmc.org/resources/asylummines.63552/)

## Setup

1. Put the **AutoSell jar** file in your plugins folder.
2. Restart the server.
3. Open the **config** file found in **plugins/AutoSell/**.
4. Enable the plugin you want to use to setup **AutoSell** shop regions (from `hooks:` section).
5. Restart the server.
6. Modify the other options and files to fit your server's layout.
7. Reload **AutoSell** `/ASA Reload` (Some options might require a restart to apply the changes).
8. Create your **AutoSell** shops (Look at [Commands & Permissions](/clips-plugins/autosell/commands-and-permissions#admin-commands) page for the create command and other related commands for this).
   * To set the shop's region, name it with the same name of the region/mine (of the plugin you chose in hooks) you want to take its region.
9. Check the [Commands & Permissions](/clips-plugins/autosell/commands-and-permissions) page, to give your players access to commands/features you want them to use.
10. And you're done! Give us a review about the plugin [here](https://www.spigotmc.org/resources/autosell.2157/).


# Commands & Permissions

List of commands and permissions for the plugin

## Player Commands

| Command        | Permission               | Description                                                       | Aliases                                   |
| -------------- | ------------------------ | ----------------------------------------------------------------- | ----------------------------------------- |
| /SellAll       | AutoSell.SellAll         | Sells all items in your inventory to the shop you have access to. | Sell, SellItems, SellInv, SellInventory   |
| /AutoSell      | AutoSell.Toggle          | Toggles auto selling.                                             | AS, ASell, AutoS                          |
| /AutoSmelt     | AutoSell.AutoSmelt       | Toggles auto smelting.                                            | ASmelt, Smelt                             |
| /AutoBlocks    | AutoSell.AutoBlocks      | Toggles auto ingots to blocks converter.                          | I2B, ToBlocks, 2Blocks, Ingots2Blocks     |
| /Items \[Shop] | AutoSell.Items           | Displays items with their prices on a menu.                       | Prices, ItemPrices, ShopPrices, ShopItems |
| /ASMultiplier  | AutoSell.Multiplier.Self | Checks your current multiplier.                                   | Multi, ASMulti, Multiplier                |
| /ASWorth       | AutoSell.Worth           | Checks how much does the item in your hand worth.                 | ShopWorth, ShopPrice, ASPrice             |
| /BPToggle      | AutoSell.BPToggle        | Toggles selling item from VKBackPack                              | BackPackToggle                            |

## Admin Commands

| Command                                                                                 | Permission           | Description                                                |
| --------------------------------------------------------------------------------------- | -------------------- | ---------------------------------------------------------- |
| /ASA Version                                                                            | AutoSell.Admin       | Shows the plugin's version.                                |
| /ASA Reload                                                                             | AutoSell.Reload      | Reloads the plugin's files.                                |
| /ASA Shops                                                                              | AutoSell.Admin       | Lists loaded shops.                                        |
| /ASA AddShop \<Name>                                                                    | AutoSell.Admin       | Adds new shop.                                             |
| /ASA DelShop \<Name>                                                                    | AutoSell.Admin       | Deletes the shop.                                          |
| /ASA Items \[Shop]                                                                      | AutoSell.Admin       | Lists shop's items.                                        |
| /ASA AddItem \<Shop> \<Cost>                                                            | AutoSell.Admin       | Adds the item you're holding to the shop.                  |
| /ASA DelItem \<Shop>                                                                    | AutoSell.Admin       | Removes the item you're holding from the shop.             |
| /ASA SetMultiplier \<Player/Global> \<Multiplier> \<Days>:\<Hours>:\<Minutes>           | AutoSell.Admin       | Sets the player or the global multiplier.                  |
| <p>/ASA AddMultiplier<br>\<Player/Global> \<Multiplier> \<Days>:\<Hours>:\<Minutes></p> | AutoSell.Admin       | Adds on to the player or the global multiplier.            |
| /ASA StackMultiplier \<Player/Global> \<Multiplier> \<Days>:\<Hours>:\<Minutes>         | AutoSell.Admin       | Stack time on the player or the global current multiplier. |
| /ASA DelMultiplier \<Player/Global>                                                     | AutoSell.Admin       | Removes the player or the global multiplier.               |
| /ASA AddSign \<Shop>                                                                    | AutoSell.Signs.Admin | Adds sell all sign, the one you're looking at.             |
| /ASA DelSign                                                                            | AutoSell.Signs.Admin | Removes the sign you're looking at.                        |
| /ASA WhatArea                                                                           | AutoSell.WhatArea    | Gets the mine/region name you're standing in.              |

#### Command Alias

* /AutoSellAdmin

## Permissions

| Permission                     | Description                                                                                  |
| ------------------------------ | -------------------------------------------------------------------------------------------- |
| AutoSell.Fortune               | Gives the ability to use autosell's fortune feature.                                         |
| AutoSell.Signs.Sell            | Gives the ability to sell all using a sell all sign.                                         |
| AutoSell.BlocksToInventory     | Gives the ability to mine blocks straight to your inventory.                                 |
| AutoSell.Shop.\<Name>          | Sets the player's current shop if he isn't in any shop region.                               |
| AutoSell.AutoSmelt.All         | Gives the ability to auto smelt all blocks in the smelt list. (Auto Smelt has to be enabled) |
| AutoSell.AutoSmelt.\<Material> | Gives the ability to auto smelt the specified material. (Auto Smelt has to be enabled)       |

{% hint style="info" %}
All text between the less-than and greater-than signs (**<>**) is a placeholder/variable, replace it with the requested value without the less-than and greater-than signs (**<>**).
{% endhint %}


# Placeholders

Plugin's placeholders

**AutoSell** plugin provides [**PlaceholderAPI** ](https://www.spigotmc.org/resources/6245/)placeholders that you can use in any plugin that supports [**PlaceholderAPI**](https://www.spigotmc.org/resources/6245/).

| Placeholder                            | Return Value | Description                                                       |
| -------------------------------------- | ------------ | ----------------------------------------------------------------- |
| %autosell\_in\_autosell\_mode%         | Boolean      | Returns whether if the player is in AutoSell mode or not.         |
| %autosell\_in\_autoblocks\_mode%       | Boolean      | Returns whether if the player is in AutoBlocks mode or not.       |
| %autosell\_in\_automelt\_mode%         | Boolean      | Returns whether if the player is in AutoSmelt mode or not.        |
| %autosell\_current\_shop%              | Text         | Returns the player's current shop.                                |
| %autosell\_total\_multiplier%          | Number       | Returns the player's total multiplier.                            |
| %autosell\_time\_multiplier%           | Number       | Returns the player's timed multiplier.                            |
| %autosell\_perm\_multiplier%           | Number       | Returns the player's permission-based multiplier.                 |
| %autosell\_perm\_multiplier\_name%     | Text         | Returns the player's permission-based multiplier name.            |
| %autosell\_time\_multiplier\_minsleft% | Number       | Returns the total minutes left for the player's timed multiplier. |
| %autosell\_time\_multiplier\_timeleft% | Text         | Returns the time left for the player's timed multiplier.          |

## Download

To use these placeholders, you have to download **AutoSell Expansion**. You can download it automatically by running:

> `/papi ecloud download AutoSell`\
> `/papi reload`

Or you can download it manually from the [eCloud](https://api.extendedclip.com/expansions/autosell/), and put it inside the `expansions` folder (folder path: `/plugins/PlaceholderAPI/expansions/`).

{% hint style="info" %}
You have to have [**PlaceholderAPI**](https://www.spigotmc.org/resources/6245/) plugin to be able to use these placeholders.
{% endhint %}


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# AutoSell version: 1.9.1 Main Configuration

check_updates: true
block_listener_priority: HIGHEST
hooks:
  mine_reset_lite:
    enabled: true
  worldguard:
    enabled: false
  prisonmines:
    enabled: false
  asylum_mines:
    enabled: false
  jets_prison_mines:
    enabled: false
tools_never_break: true
ignore_custom_items: true
multiplier_save_on_interval: true
multiplier_save_interval: 300
multiplier_default_limit: 100
autosell:
  allow_creative: false
  require_tools: true
  take_sold_items: true
  disabled_worlds:
  - someworld
  - someotherworld
  multipliers_enabled: true
  interval_announcements:
    enabled: true
    interval: 60
    has_multiplier_message:
    - '&8&m-----------------------------------------------------'
    - '&eYour AutoSell stats...'
    - '&bItems Sold&7: &f%items%'
    - '&bAmount&7: &a$&f%amount%'
    - '&bMultiplier: &f%multiplier%'
    - '&8&m-----------------------------------------------------'
    no_multiplier_message:
    - '&8&m-----------------------------------------------------'
    - '&eYour AutoSell stats...'
    - '&bItems Sold&7: &f%items%'
    - '&bAmount&7: &a$&f%amount%'
    - '&8&m-----------------------------------------------------'
signsell:
  per_shop_permissions: true
  has_multiplier_message:
  - '&8&m-----------------------------------------------------'
  - '&bItems Sold&7: &f%items%'
  - '&bAmount&7: &a$&f%amount%'
  - '&bMultiplier: &f%multiplier%'
  - '&8&m-----------------------------------------------------'
  no_multiplier_message:
  - '&8&m-----------------------------------------------------'
  - '&bItems Sold&7: &f%items%'
  - '&bAmount&7: &a$&f%amount%'
  - '&8&m-----------------------------------------------------'
sellall:
  enabled: true
  use_perm_shop_when_no_shop_is_at_location: true
  has_multiplier_message:
  - '&8&m-----------------------------------------------------'
  - '&bItems Sold&7: &f%items%'
  - '&bAmount&7: &a$&f%amount%'
  - '&bMultiplier: &f%multiplier%'
  - '&8&m-----------------------------------------------------'
  no_multiplier_message:
  - '&8&m-----------------------------------------------------'
  - '&bItems Sold&7: &f%items%'
  - '&bAmount&7: &a$&f%amount%'
  - '&8&m-----------------------------------------------------'
item_drops:
  drops2inv:
    enabled: true
    require_permission_node: false
    autosell_areas_only: false
    disabled_worlds:
    - someworld
    - someotherworld
    ignored_blocks:
    - SKULL_ITEM
    - SKULL
    allowed_instead_of_ignored: false
  silk_touch:
    enabled: true
  auto_smelt:
    enabled: true
    toggle_on_join: true
    disabled_worlds:
    - someworld
    - someotherworld
    smelt_list:
    - GOLD_ORE,GOLD_INGOT
    - IRON_ORE,IRON_INGOT
    - WOOL;3,WOOL;5
    - STONE,STONE
  fortune:
    enabled: true
    minimum_drops: 1
    maximum_drops: 1000
    multiplier: 1.2
    modifier: 1
    random_drop_amount: true
    disabled_worlds:
    - someworld
    - someotherworld
    fortune_blocks:
    - DIAMOND_ORE
    - EMERALD_ORE
    - GOLD_ORE
    - IRON_ORE
    - LAPIS_ORE
    - REDSTONE_ORE
    - QUARTZ_ORE
    - COAL_ORE
    - DIAMOND_BLOCK
    - EMERALD_BLOCK
    - GOLD_BLOCK
    - IRON_BLOCK
    - LAPIS_BLOCK
    - REDSTONE_BLOCK
    - QUARTZ_BLOCK
    - COAL_BLOCK
  ingot_to_block:
    enabled: true
    toggle_on_join: true
    auto_blocks_interval: 30
shop_items_info:
  use_gui: true
  message:
  - '&8&m-----------------------------------------------------'
  - '&aShop: &f%shop%'
  - '%items%'
  - '&8&m-----------------------------------------------------'
  item_format: '&7%material%&f:&7%data% &f- &a$&f%price_1%'
vkbackpack:
  bptoggle_on_join: true
shops:
  Shop1:
    priority: 1
    shop_list:
    - STONE,0.50
    - COBBLESTONE,0.20
    - IRON_ORE,0.35
    - COAL_ORE,0.20
money:
  fix_money: true
  use_custom_format: false
  custom_format: '#,###.00'
  thousands_format: k
  millions_format: M
  billions_format: B
  trillions_format: T
  quadrillions_format: Q
```

{% endcode %}

## Messages

{% code title="messages.yml" %}

```yaml
# AutoSell language file
# You can edit all the messages here!
# You must restart for changes to take affect when editing this file!
autosell_disabled_in_world: '&cAutoSell is disabled in your current world!'
autosell_no_permission: '&cYou don''t have &7{0} &cto use AutoSell!'
autosell_no_shop: '&cYou don''t have a shop to sell to!'
autosell_toggle_on: '&aAutoSell enabled'
autosell_toggle_off: '&7AutoSell disabled'
autosmelt_disabled: '&cAutoSmelt is currently disabled!'
autosmelt_disabled_in_world: '&cAutoSmelt is disabled in your current world!'
autosmelt_no_permission: '&cYou don''t have &7{0} &cto use AutoSmelt!'
autosmelt_toggle_on: '&aAutoSmelt enabled'
autosmelt_toggle_off: '&cAutoSmelt disabled'
multiplier_disabled: '&cMultipliers are currently disabled!'
multiplier_expired: '&7Your AutoSell multiplier has expired...'
multiplier_others_incorrect_usage: '&cIncorrect usage! Use &7/multiplier <player>'
multiplier_no_permission_self: '&cYou don''t have &7{0} &cto check your multiplier!'
multiplier_no_permission_others: '&cYou don''t have &7{0} &cto check another players
  multiplier!'
multiplier_no_multiplier_self: '&cYou don''t have a multiplier at the moment...'
multiplier_no_multiplier_others: '&7{0} &cdoesn''t have a multiplier at the moment...'
multiplier_has_multiplier_self: '&aYour current multiplier is &f{0} &aand will expire
  in &f{1}'
multiplier_has_multiplier_others: '&7{0}''s &acurrent multiplier is &f{1} &aand will
  expire in &f{2}'
global_multiplier_message: '&aGlobal multiplier: &f{0} &7expires in &f{1}'
global_multiplier_expired: '&7The global multiplier has expired!'
permission_multiplier_message: '&aYou have a permission based multiplier of &f{0}'
signs_no_break_permission: '&cYou don''t have permission to break that sign!'
signs_no_sell_permission: '&cYou don''t have &7{0} &cto sell at that sign!'
signs_no_shop_error: '&cThere is no shop associated with that sign! Please contact
  an admin.'
signs_no_shop_items_error: '&cThere are no items listed in the shop you are trying
  to sell to!'
signs_sold_with_multiplier: '&aYou sold &f{0} &aitems for $&f{1} &awith a multiplier
  of &f{2}&a!'
signs_sold_without_multiplier: '&aYou sold &f{0} &aitems for $&f{1}&a!'
signs_no_items_to_sell: '&cYou don''t have any items to sell to shop &f{0}&c!'
autoblocks_disabled: '&c/block is currently disabled!!'
autoblocks_no_permission: '&cYou don''t have &7{0} &cto use /blocks!'
autoblocks_toggle_on: '&aAuto ingots to blocks enabled!'
autoblocks_toggle_off: '&7Auto ingots to blocks disabled!'
autoblocks_help_1: '&7Ingots to blocks help'
autoblocks_help_2: '&7/autoblocks &c- &fconvert all ingots in your inventory to blocks'
autoblocks_help_3: '&7/autoblocks toggle &c- &ftoggle ingots to blocks on/off'
autoblocks_incorrect_command: '&cIncorrect usage! Use &7/autoblocks help'
sellall_disabled: '&c/sellall is currently disabled!!'
sellall_no_permission: '&cYou don''t have &7{0} &cto use /sellall'
sellall_no_shop_error: '&cYou don''t have a shop to sell to!.'
sellall_no_shop_items_error: '&cThere are no items listed in the shop you are trying
  to sell to!'
sellall_sold_with_multiplier: '&aYou sold &f{0} &aitems for $&f{1} &awith a multiplier
  of &f{2}&a!'
sellall_sold_without_multiplier: '&aYou sold &f{0} &aitems for $&f{1}&a!'
sellall_no_items_to_sell: '&cYou don''t have any items to sell at shop &f{0}&c!'
sellall_shop_incorrect_shopname: '&f{0} &cis not a valid shop!'
sellall_shop_no_permission: '&cYou don''t have &f{0} &cto use &f/sellall <shop>&c!'
items_no_permission: '&cYou don''t have &7{0} &cto use /items'
items_no_shop_at_location: '&cThere is not a shop at your location, use &7/items <shop>&c!'
items_incorrect_shop_name: '&cThere is no shop named &7{0}&c!'
items_no_shop_items_error: '&cThere are no items listed in the shop you are trying
  to view!'
items_lore_format: '&7Sell &f1 &7for: &a$&f{0}, &7Sell &f64 &7for: &a$&f{1}'
admin_addmultiplier_global_multiplier_set: '&aA &fGLOBAL &amultiplier of &f{0} &ahas
  been set!'
admin_addmultiplier_global_multiplier_set_no_expiry: '&aAnd will not expire!'
admin_addmultiplier_global_multiplier_set_has_expiry: '&aAnd will expire in &f{0}&a!'
admin_addmultiplier_player_multiplier_set: '&bYou now have a multiplier of &f{0}'
admin_addmultiplier_player_multiplier_set_no_expiry: '&aAnd will not expire!'
admin_addmultiplier_player_multiplier_set_has_expiry: '&aAnd will expire in &f{0}&a!'
player_not_online: '{0} &cis not online!'
vkbackpacks_no_permission: '&cYou don''t have &7{0} &cto toggle backpack selling on
  or off!'
vkbackpacks_no_backpacks: '&cYou don''t have any backpacks!'
vkbackpacks_toggle_on: '&aBackpack selling enabled'
vkbackpacks_toggle_off: '&cBackpack selling disabled'
worth_no_permission: '&cYou don''t have &7{0} &cto view the worth of an item!'
worth_no_shop: '&cNo shop found to check the worth of the item in your hand'
worth_no_item_in_hand: '&cYou must be holding an item to check the value'
worth_no_value: '&cNo price found for the item in your hand'
worth_has_value: '&7Worth for: &f%material% &ex1/&a$&f%price_1% &ex64/&a$&f%price_64%
  &7at shop: &f%shop%'
```

{% endcode %}

## Permission Multipliers

{% code title="permission\_multipliers.yml" %}

```yaml
# AutoSell permission_multipliers.yml file
# This file allows you to create custom multipliers that can be attached to players or groups by permission
# 
# The format for a multiplier must follow this format:
# <unique identifier>:
#   priority: <unique number>
#   permission: <your custom permission for this multiplier>
#   multiplier: <the multiplier amount>
# 
# You can list as many multipliers you like.
# Each multiplier must have a unique priority set!!!
# The priority determines what multiplier comes first in your list
# If a player happens to have permission for many multipliers
# the lowest number priority will always be applied


permission_multipliers:
  example:
    priority: 1
    permission: some.multiplier.permission
    multiplier: 1.5
```

{% endcode %}

## Shop Multipliers

{% code title="shop\_multipliers.yml" %}

```yaml
# AutoSell shop_multipliers.yml file
# This file allows you to create custom multipliers that can be attached to players or groups by permission
# 
# These multipliers will only take effect in the shops listed for the multiplierThe format for a multiplier must follow this format:
# <unique identifier>:
#   priority: <unique number>
#   permission: <your custom permission for this multiplier>
#   multiplier: <the multiplier amount>
#   shops:
#   - 'shop1'
#   - 'shop2'
# 
# You can list as many multipliers you like.
# Each multiplier must have a unique priority set!!!
# The priority determines what multiplier comes first in your list
# If a player happens to have permission for many multipliers
# the lowest number priority will always be applied if that multiplier has the shop listed the player
# is trying to sell to!


shop_multipliers:
  example:
    priority: 1
    permission: some.shopmultiplier.permission
    multiplier: 1.5
    shops:
    - shop1
    - shop2
```

{% endcode %}


# ActionAnnouncer

All in one action bar announcement plugin!

## Description

**ActionAnnouncer** is another way of announcing in your server! It sends the announcements to the player's action bar instead of sending a message.\
It has an automated announcement system that uses the announcements you set in a configuration file. You can also make a special announcement using a smile command.

## Features

* On join action bar announcement.
* Sends the announcements randomly, or by the order you want!
* In-game editable announcements.
* Changeable interval between announcements.
* Ability to send an announcement to a specific player only using a command.
* Ability to send an announcement to all online players at any time using a command.
* [PlaceholderAPI](http://www.spigotmc.org/resources/clips-placeholderapi.6245/) support.


# Commands & Permissions

List of commands and permissions for the plugin

## Commands

| Command                                                  | Permission                | Description                                                                                |
| -------------------------------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------ |
| /AA Quiet                                                | -                         | Toggles announcements sounds.                                                              |
| /AA Help                                                 | ActionAnnouncer.Help      | Displays all plugin's commands.                                                            |
| /AA Reload                                               | ActionAnnouncer.Reload    | Reloads the config file.                                                                   |
| /AA Start                                                | ActionAnnouncer.Start     | Starts the automated announcements.                                                        |
| /AA Stop                                                 | ActionAnnouncer.Stop      | Stops the automated announcements.                                                         |
| /AA List                                                 | ActionAnnouncer.List      | Lists active announcements.                                                                |
| /AA Add \<Message>                                       | ActionAnnouncer.Add       | Adds a new announcement.                                                                   |
| /AA Remove \<Index>                                      | ActionAnnouncer.Remove    | Removes the specified announcement by its index.                                           |
| /AA Send \<Player> \<Display Time> \<Message/Index>      | ActionAnnouncer.Send      | Sends an announcement to the specified player.                                             |
| /AA Announce \<Display Time> \<Message/Index>            | ActionAnnouncer.Announce  | Sends an announcement to all online players.                                               |
| /AA PAnnounce \<Player> \<Display Time> \<Message/Index> | ActionAnnouncer.PAnnounce | Sends an announcement to all online players with placeholders set to the specified player. |

#### Command Alias

* /ActionAnnouncer

{% hint style="info" %}
All text between the less-than and greater-than signs (**<>**) is a placeholder/variable, replace it with the requested value without the less-than and greater-than signs (**<>**).
{% endhint %}


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# ActionAnnouncer v1.14.0 Main configuration
announcer_enabled: true
announcer_random: true
announce_interval: 60
announcement_length: 4
announcements:
- '&aHave you voted today? &b/vote&a!'
- '&bThere are currently &e%online% &bplayers online!'
announce_on_join: true
join_announcement: '&eWelcome to the server &b%player%! There are &f%online% &epeople
  online!'
disable_sounds: false
```

{% endcode %}


# API

**ActionAnnouncer** has an API that provides some methods you can use in your plugin.

| Method                                                                                           | Description                                                                   |
| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- |
| ActionAPI.sendPlayerAnnouncement(Player player, String message);                                 | Sends an ActionBar message to a specific player.                              |
| ActionAPI.sendServerAnnouncement(String message);                                                | Sends an ActionBar message to the whole server.                               |
| ActionAPI.sendTimedPlayerAnnouncement(Plugin plugin, Player player, String message, int seconds) | Sends an ActionBar message to a specific player for a certain amount of time. |


# ChatReaction

Be the first to type/unscramble the word for rewards!

## Description

Who is the fastest writer in your server? Find out with **ChatReaction**!\
Add a fun chat game to your server where players have to type/unscramble words and gain rewards.

## Features

* Customizable rewards.
* Make your own words list!
* Top winners command.
* Randomly scramble words.
* Highly customizable.
* MySQL support.
* Hooks into [Q\&APlugin](https://www.spigotmc.org/resources/33640/).


# Commands & Permissions

List of commands and permissions for the plugin

## Commands

| Command                  | Permission               | Description                               |
| ------------------------ | ------------------------ | ----------------------------------------- |
| /Reaction Help           | -                        | Displays plugin's commands.               |
| /Reaction Wins           | ChatReaction.Wins        | Displays your total wins.                 |
| /Reaction Wins \<Player> | ChatReaction.Wins.Others | Displays the specified player's wins.     |
| /Reaction Top \[Page]    | ChatReaction.Top         | Displays top winners.                     |
| /Reaction Reload         | ChatReaction.Admin       | Reloads the plugin's configuration files. |
| /Reaction Start          | ChatReaction.Admin       | Starts ChatReaction.                      |
| /Reaction Stop           | ChatReaction.Admin       | Stops ChatReaction.                       |
| /Reaction Status         | ChatReaction.Admin       | View current ChatReaction status.         |


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# ChatReaction version 1.8.0 configuration file
debug: false
check_updates: true
reaction_stats:
  track_stats: false
  top_players_size: 100
  hostname: localhost
  port: 3306
  database: chatreaction
  prefix: ''
  username: root
  password: ''
  ssl: false
reaction:
  interval: 500
  time_limit: 30
  players_needed_to_start: 4
  word_character_length: 10
  ignore_case: false
  use_custom_words: true
  split_words_by_line: true
  scramble_custom_words: true
  scramble_at_random: true
  scramble_spaces: false
  disabled_worlds:
  - world_nether
  - world_the_end
  reward_amount: 2
  rewards:
  - eco give @p 500
  - give @p diamondblock 100
messages:
  reaction_start:
  - '&8[&e&lReaction&8] &bHover for the word to type!'
  reaction_start_tooltip: '&f%word%'
  scramble_start:
  - '&8[&e&lReaction&8] &bHover for the word to unscramble!'
  scramble_start_tooltip: '&f%word%'
  reaction_end:
  - '&8[&e&lReaction&8] &cNobody got the word in time &4:('
  scramble_end:
  - '&8[&e&lReaction&8] &cNobody got the word in time &4:('
  - '&cThe word was &f%word%'
  reaction_win:
  - '&8[&e&lReaction&8] &f%player% &awon in &f%time% &aseconds!'
  scramble_win:
  - '&8[&e&lReaction&8] &f%player% &aunscrambled the word &f%word% &ain &f%time% &aseconds!'
hooks:
  qaplugin:
    enabled: true
    hint:
      charge: true
      charge_amount: 100.0
```

{% endcode %}

## Words

Words file is empty by default, This will be the file that you will set your custom words list.

{% code title="worlds.txt" %}

```
```

{% endcode %}


# DeluxeChat

The original "JSON" chat formatting plugin

![](/files/-LyUB_kNYPG1xDsSNl3d)

## Description

**DeluxeChat** allows you to fully customize your chat what a powerful formatting system with support for adding tooltip messages when you hover over different chat sections!

## Features

* Hover tooltips.
* Click actions.
* Private messaging.
* Ability to toggle receiving private messages.
* Social spy.
* Unlimited chat formats.
* Chat filtering.
* BungeeCord compatibility for cross-server chat!​
* Multiple chat sections for different tooltips and click actions.
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) support.
* [TownyChat](http://towny.palmergames.com/townychat/) compatibility.

## Dependencies

* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)

## Incompatible plugins

* [EssentialsChat/EssentialsXChat](https://www.spigotmc.org/resources/essentialsx.9089/)


# Installation

How to setup deluxechat.

1. Put the **DeluxeChat jar** file you downloaded in your **plugins** folder. If you want to use it with BungeeCord, you'll have to put it in your BungeeCord's **plugins** folder too.
2. Download [**PlaceholderAPI**](https://www.spigotmc.org/resources/placeholderapi.6245/) plugin and put it in your plugins folder (not on BungeeCord).
3. Restart the servers.
4. Modify the **config.yml** and the **messages.yml** files that were generated to fit your server's layout (Files path: `/plugins/DeluxeChat/`).
5. Reload **DeluxeChat** `/dchat reload` (Some options require a restart to apply the changes).
6. Give your players the permission for their chat format `chatformat.<format-name>`. (Note: Players need the `chatformat.default` to gain access to the default format. Also, operators do not get the **chatformat** permissions by default.)
7. Check the [Commands & Permissions](/clips-plugins/deluxechat/commands-and-permissions) page, to give players access to the commands you want them to use.
8. And you're done! Give us a review about the plugin [here](https://www.spigotmc.org/resources/deluxechat.1277/).


# Commands & Permissions

List of commands and permissions for the plugin

## Player Commands

| Command                   | Permission               | Description                                      | Aliases                             |
| ------------------------- | ------------------------ | ------------------------------------------------ | ----------------------------------- |
| /MSG \<Player> \<Message> | deluxechat.pm            | Sends a private message to the specified player. | Message, PM, Tell, Whisper, M, T, W |
| /Reply \<Message>         | deluxechat.pm            | Replies to a private message.                    | R                                   |
| /MSGToggle                | deluxechat.pm.toggle     | Toggles private messages/                        | MToggle, PMToggle                   |
| /GToggle                  | deluxechat.bungee.toggle | Toggles global chat.                             | GlobalToggle                        |

## Admin Commands

| Command                          | Permission           | Description                 |
| -------------------------------- | -------------------- | --------------------------- |
| /DChat                           | deluxechat.admin/\*  | DeluxeChat help command.    |
| /DChat Reload                    | deluxechat.admin/\*  | Reloads DeluxeChat files.   |
| /DChat List                      | deluxechat.admin/\*  | Lists loaded format names.  |
| /DChat Test \<Format> \<Message> | deluxechat.admin/\*  | Tests the specified format. |
| /SocialSpy                       | deluxechat.socialspy | Toggles social spy mode.    |

### Command Aliases

1. DChat:
   * DeluxeChat
2. SocialSpy:
   * DeluxeSocialSpy

## Permissions

| Permission                  | Description                                                                                   |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| chatformat.\<FormatName>    | Gives access to the specified format.                                                         |
| deluxechat.color            | Gives the ability to use color codes in chat.                                                 |
| deluxechat.formatting       | Gives the ability to use formatting codes in chat.                                            |
| deluxechat.utf              | Gives the ability to use special UTF characters in chat.                                      |
| deluxechat.url              | Gives the ability to send clickable links in chat.                                            |
| deluxechat.hex              | Gives the ability to use rgb colors in messages sent in chat.                                 |
| deluxechat.pm.color         | Gives the ability to use color codes in private messages.                                     |
| deluxechat.pm.formatting    | Gives the ability to use formatting codes in private messages.                                |
| deluxechat.pm.url           | Gives the ability to send clickable links in private messages.                                |
| deluxechat.bungee.chat      | Gives the ability to chat globally if bungee is enabled.                                      |
| deluxechat.pm.ignoretoggle  | Gives the ability to send private messages to players that have PM toggled off.               |
| deluxechat.ignore.bypass    | Gives the ability to send private messages to players even if they ignore you.                |
| deluxechat.vanish.bypass    | Gives the ability to send private messages to vanished players.                               |
| deluxechat.filter.bypass    | Gives the ability to bypass the chat filter.                                                  |
| deluxechat.bungee.override  | Gives the ability to always send to all players in global chat even if they're in local chat. |
| deluxechat.socialspy.onjoin | Toggles on social spy mode on join automatically.                                             |
| deluxechat.admin            | Gives access to all DeluxeChat commands and permissions.                                      |
| deluxechat.\*               | Gives access to all DeluxeChat commands and permissions.                                      |

{% hint style="info" %}
All text between the less-than and greater-than signs (**<>**) is a placeholder/variable, replace it with the requested value without the less-than and greater-than signs (**<>**).
{% endhint %}


# Placeholders

Plugin's placeholders

## Plugin's placeholders

**DeluxeChat** has some placeholders built-into it:

| Placeholder                      | Description                                                                                                                                                                       |
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| %server%                         | This placeholder works only if **BungeeCord** is enabled. It displays the prefix of the server (`server_prefix` in the config) the player in when chatting globally (`/GToggle`). |
| %recipient\_\<PAPI Placeholder>% | This placeholder is for private message formats. It returns the recipient's PlaceholderAPI placeholder value. e.g. `%recipient_vault_prefix%`.                                    |

## PlaceholderAPI placeholders

**DeluxeChat** plugin provides [**PlaceholderAPI** ](https://www.spigotmc.org/resources/6245/)placeholders that you can use in any plugin that supports [**PlaceholderAPI**](https://www.spigotmc.org/resources/6245/).\
You can also use any [**PlaceholderAPI**](https://www.spigotmc.org/resources/6245/) placeholder in **DeluxeChat** plugin. ([PlaceholderAPI placeholders list](https://helpch.at/placeholders))

### Placeholders

| Placeholder                        | Return Value | Description                                                           |
| ---------------------------------- | ------------ | --------------------------------------------------------------------- |
| %deluxechat\_is\_pm\_toggled%      | Boolean      | Returns whether if the player has private messages toggled on or not. |
| %deluxechat\_social\_spy\_enabled% | Boolean      | Returns whether if social spy mode is enabled or not.                 |
| %deluxechat\_pm\_recipient%        | Text         | Returns the private message recipient name. (Used in PM format)       |

### Download

To use these placeholders, you have to download **DeluxeChat Expansion**. You can download it automatically by running:

> `/papi ecloud download DeluxeChat`\
> `/papi reload`

Or you can download it manually from the [eCloud](https://api.extendedclip.com/expansions/deluxechat/), and put it inside the `expansions` folder (folder path: `/plugins/PlaceholderAPI/expansions/`).


# Config options

Explanation of most options in config.yml

| Options                         | Explanation                                                                       |
| ------------------------------- | --------------------------------------------------------------------------------- |
| check\_updates                  | Allow plugin to check spigot for updates and announce you.                        |
| relation\_placeholders\_enabled | Enable PlaceholderAPI relation placeholders.                                      |
| timestamp\_format               | Sets the way time is formatted.                                                   |
| boolean                         | Chose what the boolean messages will look like.                                   |
| ops\_use\_group\_format         | If this option is disabled, OP players will need permissions for formats to work. |

| Chat Filter Options | Explanation                                                                                                                                                                                                                                    |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| enabled             | Enable or disable the chat filter option. This is to stop people from using certain words or phrases like swears.                                                                                                                              |
| ignore\_case        | If this option is enabled then the filter will ignore the case for the filtered words.                                                                                                                                                         |
| list                | List the words and phrases that will be filtered and what they will be filtered with. It works like this: `word-to-be-filtered;word-it-will-be-filtered-with` so for example `fuck;***` will replace the word fuck from chat with 3 asterisks. |

| BungeeCord Options     | Explanation                                                                                       |
| ---------------------- | ------------------------------------------------------------------------------------------------- |
| enabled                | Enable bungeecord option. Requires DeluxeChat on BungeeCord and backend servers.                  |
| server\_name           | The server name that will be used for bungeecord.server\_whitelist.                               |
| server\_prefix         | The name of the server that will be displayed when using the placeholder %server% in global chat. |
| join\_global           | If this option is enabled all players will be put in the global chat when they join the server.   |
| use\_server\_whitelist | This option will enable bungeecord.server\_whitelist.                                             |
| server\_whitelist      | List the servers which will have global chat linked to current serve                              |

| Private Messages Options | Explanation                          |
| ------------------------ | ------------------------------------ |
| enable                   | Enable private messaging.            |
| bungeecord               | Enable bungeecord private messaging. |

| Formats Options                      | Explanation                                                                                                   |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
| priority                             | Selects which format takes over in case of having permission for multiple formats. Lower priority takes over. |
| channel                              | Text that will be shown before prefix.                                                                        |
| prefix                               | Text that will be shown before name.                                                                          |
| name                                 | Text that will be shown before suffix.                                                                        |
| suffix                               | Text that will be shown before the message.                                                                   |
| name\_color                          | Color that the name option will have.                                                                         |
| chat\_color                          | Color that the message sent in chat will have.                                                                |
| channel\_tooltip                     | Text that will be displayed when hovering over the channel in chat.                                           |
| prefix\_tooltip                      | Text that will be displayed when hovering over the prefix in chat.                                            |
| name\_tooltip                        | Text that will be displayed when hovering over the name in chat.                                              |
| suffix\_tooltip                      | Text that will be displayed when hovering over the suffix in chat.                                            |
| channel\_clic&#x6B;*\_*&#x63;ommands | Actions that will be executed when clicking on the channel.                                                   |
| prefix\_clic&#x6B;*\_*&#x63;ommands  | Actions that will be executed when clicking on the prefix.                                                    |
| name\_clic&#x6B;*\_*&#x63;ommands    | Actions that will be executed when clicking on the name.                                                      |
| suffix\_clic&#x6B;*\_*&#x63;ommands  | Actions that will be executed when clicking on the suffix.                                                    |

{% hint style="info" %}
The click commands you can use one of the following actions:\
\[EXECUTE] /command - Will execute the command when clicked\
\[URL] <https://url-here.com> - Will open the url when clicked
{% endhint %}

{% hint style="info" %}
Some of the options like tooltips and click commands are not required.
{% endhint %}


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# DeluxeChat version 1.15.0 config file
# Created by extended_clip
# List as many format configurations you in the formats: config section.
# Each format configuration requires a specific layout which can be seen below.
# Format priority must be specified per format and each priority must be unique.
# higher value = lower priority
# ex: guest-100, owner-1
#   YOU MUST KEEP A 'default' TEMPLATE! 
#   
# Social Spy only allows %player% and %recipient% as placeholders
# 
# You must download the placeholder expansion through PlaceholderAPI for which
# placeholders you want to use. The example below uses Player placeholders, so
# we need to download the player expansion: /papi ecloud download Player, /papi reload
# 
# [URL] and [EXECUTE] are actions you can add to your click commands.
# [URL] will open the link after the action name.
# [EXECUTE] will execute the command that comes after the action name.
# 
# example format template:
# formats: 
#   default:
#     priority: 2147483647
#     channel: ''
#     prefix: '&8[&7Guest&8] '
#     name_color: '&7'
#     name: '%player_name%'
#     suffix: '&7> '
#     chat_color: '&f'
#     channel_tooltip:
#     - '&7%player_name% &bis a Guest'
#     prefix_tooltip:
#     - '&7%player_name% &bis a Guest'
#     name_tooltip:
#     - ''
#     suffix_tooltip:
#     - ''
#     channel_click_command: '
#     prefix_click_command: '/ranks
#     name_click_command: '/msg %player_name% 
#     suffix_click_command: '
#   Member:
#     priority: 100
#     channel: ''
#     prefix: '&8[&aMember&8] '
#     name_color: '&7'
#     name: '%player_name%'
#     suffix: '&7> '
#     chat_color: '&f'
#     channel_tooltip:
#     - ''
#     prefix_tooltip:
#     - '&7%player_name% &bis a Member'
#     name_tooltip:
#     - '/msg %player_name%'
#     suffix_tooltip:
#     - ''
#     channel_click_command: '[URL]https://www.spigotmc.org/resources/deluxetags.4390'
#     prefix_click_command: '/ranks'
#     name_click_command: '/msg %player_name%'
#     suffix_click_command: '[EXECUTE]/tags'
check_updates: true
bungeecord:
  enabled: false
  server_name: Server
  server_prefix: '&8[&cServer&8]'
  join_global: true
  use_server_whitelist: true
  server_whitelist:
  - Server2
  - Server3
relation_placeholders_enabled: true
timestamp_format: MM/dd/yy HH:mm:ss
boolean:
  'true': '&atrue'
  'false': '&cfalse'
ops_use_group_format: false
chat_filter:
  enabled: false
  ignore_case: true
  list:
  - '.; '
  - fuck;fuck
private_message:
  enabled: true
  bungeecord: false
private_message_formats:
  to_sender:
    format: '&7you &e-> &7%recipient_player_name% &7:'
    tooltip:
    - '%player_name%'
    click_command: '/r '
    chat_color: '&f'
  to_recipient:
    format: '&7%player_name% &e-> &7you &7:'
    tooltip:
    - '%player_name%'
    click_command: '/r '
    chat_color: '&f'
  social_spy: '&8[&cspy&8] &f%player% &e-> &f%recipient%&7:'
formats:
  default:
    priority: 2147483647
    channel: ''
    prefix: '&7[%vault_group%&7] '
    name_color: '&b'
    name: '%player_name%'
    suffix: '&7> '
    chat_color: '&f'
    channel_tooltip:
    - ''
    prefix_tooltip:
    - '%player_name%'
    - '&bRank: %vault_group%'
    name_tooltip:
    - ''
    suffix_tooltip:
    - ''
    channel_click_command: /ranks
    prefix_click_command: /ranks
    name_click_command: '/msg %player_name% '
    suffix_click_command: ''
```

{% endcode %}

## Messages

{% code title="messages.yml" %}

```yaml
# DeluxeChat language file
# You can edit all the messages here!
# You must restart for changes to take affect when editing this file!
no_permission: '&cYou don''t have permission to do that!'
msg_incorrect_usage: '&cIncorrect usage! &7/msg <player> <message>'
msg_recipient_not_online: '&c{0} &cis not online!'
msg_recipient_ignoring_sender: '&c{0} &cdoes not wish to speak to you!'
msg_recipient_is_sender: '&cYou can''t message yourself!'
reply_incorrect_usage: '&cIncorrect usage! &7/r <message>'
reply_no_recipient: '&cYou don''t have a recipient to reply to!'
socialspy_toggle_on: '&aSocialspy toggled on!'
socialspy_toggle_off: '&7Socialspy toggled off!'
bungee_global_toggle_on: '&aChat set to global'
bungee_global_toggle_off: '&aChat set to local'
pm_toggle_on: '&aPrivate messaging toggled on.'
pm_toggle_off: '&7Private messaging toggled off.'
pm_toggled_sender: '&7You can not send pm''s with private messages turned off.'
pm_toggled_recipient: '{0} &7has private messages turned off.'
url_incorrect_usage: Hover for url command usage info!
url_incorrect_usage_tooltip_1: '&7/url <link>'
url_incorrect_usage_tooltip_2: '&7/url <link> <message>'
chat_illegal_characters: You can't use special characters in chat!
```

{% endcode %}


# DeluxeCommands

Create custom text commands which utilize JSON and allows player specific placeholders!

## Description

Ever wanted to create custom text commands which allow you to utilize JSON formatting? Now you can create text-based commands which allow you to have tooltips, click events, and much more!\
This can be used for awesome info-packed /vote command, or even a cool /stats command, and much more!

## Features

* Hover tooltips.
* Click actions.
* Ability to create unlimited commands.
* Supports running the command as another player with different actions.
* Supports various actions, like running a command as console/player.
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) support.

## Creating JSON message

**JSON** message is the kind of messages that have hovering tooltips and clicking actions, you can simply create them from [minecraftjson.com](http://minecraftjson.com/) (or any **JSON** creation website).\
Follow the steps below to create your **JSON** message and use it in **DeluxeCommands**:

1. Create the **JSON** message using the website you like.
2. Copy the text after `@p` from the **Command:** box. e.g.\
   \
   `/tellraw @p ["",{"text":"This is a JSON text","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}]`\
   \
   Copy this part only:\
   `["",{"text":"This is a JSON text","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}]`\\
3. Now paste it in your command in **DeluxeCommands** config file like this:\
   `- '["",{"text":"This is a JSON text","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}]'`\\
4. Reload **DeluxeCommands** `/DeluxeCommands reload`.
5. That's it! Enjoy your beautiful **JSON** command.


# Commands & Permissions

List of commands and permissions for the plugin

## Commands

| Command                | Permission           | Description                     |
| ---------------------- | -------------------- | ------------------------------- |
| /DeluxeCommands        | -                    | Plugin's info                   |
| /DeluxeCommands Help   | DeluxeCommands.Admin | Displays all plugin's commands. |
| /DeluxeCommands List   | DeluxeCommands.Admin | Displays all loaded commands.   |
| /DeluxeCommands Reload | DeluxeCommands.Admin | Reloads the config file.        |


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# DeluxeCommands v1.9.0 Main configuration
# Created by extended_clip
# 
# Create commands below!
# Command format is as follows:
# 
# commands:
#   <command_with_no_slash>:
#     permission: <permission to use the command>
#     no_permission_message: <message to send when players do not have permission>
#     message:
#     - '[text]<regular text here if you start the line with the [text] identifier'
#     - '[playercommand] spawn'
#     - '[consolecommand] eco give %executor% 100'
#     - '{"text": "JSON text here"}'
#     - '{"text": "To have multiple JSON components in the same line"}&&{"text": "you must use the && operator between them!"}'
#     target_permission: <permission to use the command with a player argument at the end: /<command> (player)>
#     target_no_permission_message: <message to send when players do not have permission to specify a target to set placeholders for>
#     target_message:
#     - '[text]<You do not have to specify this option, only if you want separate messages when a target is defined>'
#     - '{"text": "%player_name%'s stats:"}'
#     - '{"text": "This message is only if you want a separate message defined when a"}&&{"text": " target player is specified in the command!"}'
#     aliases:
#     - 'somealiasforthiscommand'
# 
# You can now add a new entry to define different aliases per command!
#  simply add the "aliases" option to the commands you would like to define aliases for!
# DeluxeCommands will detect if you have DeluxeChat or PlaceholderAPI installed! You can use any placeholders you have enabled!
# Note: To use %player_name% you need the Player expansion. This can be download via PlaceholderAPI with /papi ecloud download Player
commands:
  somecustomcommand:
    permission: some.custom.permission
    no_permission_message: '&cYou don''t have permission to use this command!'
    target_permission: some.custom.target_permission
    target_no_permission_message: '&cYou don''t have permission to view this command
      with a target player argument!'
    message:
    - '{"text": "--------"}'
    - '{"text": "This is your "}&&{"text": "custom JSON text command showing placeholders
      specific to you!!"}'
    - '{"text": "--------"}'
    target_message:
    - '{"text": "--------"}'
    - '{"text": "This message is optional if you want to show a different message
      when"}&&{"text": " %player_name% is specified at the end of the command"}'
    - '{"text": "--------"}'
```

{% endcode %}


# DeluxeJoin

Highly customizable permission based join and leave "action" plugin with tons of placeholders!

## Description

**DeluxeJoin** is the all in one plugin for join and leave actions. You can create group based join and leave action lists that are performed from a wide variety of things. It also features a permission-based in-game MOTD system which allows players to view MOTD messages on join and by command.

## Features

* Hover tooltips.
* Click actions.
* Unlimited permission-based join/leave messages.
* Unlimited permission-based MOTD messages on join.
* Unique first join message.
* Supports all the actions you would need!
* [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/) support.

## Creating a JSON message

**JSON** message is the kind of messages that have hovering tooltips and clicking actions, you can simply create them from [minecraftjson.com](http://minecraftjson.com/) (or any **JSON** creation website).\
Follow the steps below to create your **JSON** message and use it in **DeluxeJoin**:

1. Create the **JSON** message using the website you like.
2. Copy the text between `["",` and `]` from the **Command:** box. e.g.\
   \
   `/tellraw @p ["",{"text":"This is a JSON text","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}]`\
   \
   Copy this part only:\
   `{"text":"This is a JSON text","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}`\
   \
   **Note:** If you have more than one **JSON** text in the same line, split them with `&&` (Check the default config).
3. Now paste it in your format in **DeluxeJoin** config file like this:\
   `- '[JSON] {"text":"Welcome %player_name%!","color":"blue","clickEvent":{"action":"suggest_command","value":"/command"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Hey there!","color":"aqua"}]}}}'`\\
4. Reload **DeluxeJoin** `/DeluxeJoin reload`.
5. That's it! Enjoy your beautiful **JSON** messages.


# Commands & Permissions

List of commands and permissions for the plugin

## Commands

| Command                     | Permission       | Description                                         | Aliases                                       |
| --------------------------- | ---------------- | --------------------------------------------------- | --------------------------------------------- |
| /MOTD                       | DeluxeJoin.MOTD  | Displays the player's MOTD                          | DMOTD                                         |
| /DJoin                      | -                | Displays plugin's info                              | DeluxeJoin, DeluxeJoin Version, DJoin Version |
| /DJoin Help                 | -                | Displays plugin's commands.                         | DeluxeJoin Help                               |
| /DJoin Reload               | DeluxeJoin.Admin | Reloads the config file.                            | DeluxeJoin Reload                             |
| /DJoin CheckFormat (Player) | DeluxeJoin.Admin | Check your own or another player's current formats. | DeluxeJoin CheckFormat                        |

## Permissions

| Permission                | Description                           |
| ------------------------- | ------------------------------------- |
| DeluxeJoin.Format.Default | Gives access to the default format.   |
| DeluxeJoin.Format.\<Name> | Gives access to the specified format. |
| DeluxeJoin.MOTD.Default   | Gives access to the default MOTD.     |
| DeluxeJoin.MOTD.\<Name>   | Gives access to the specified MOTD.   |

{% hint style="info" %}
All text between the less-than and greater-than signs (**<>**) is a placeholder/variable, replace it with the requested value without the less-than and greater-than signs (**<>**).
{% endhint %}


# Plugin's files

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# DeluxeJoin configuration
# 
# You can create as many formats for motd and join/leave you like.
# All formats must contain action lists with valid actions
# 
# All actions must start with a valid action tag!
# 
# Valid Actions:
# 
# JSON message: [JSONMESSAGE], [JSON]
# 
#     DESCRIPTION: Send a JSON message to the target player
# 
#     EXAMPLE:  - '[JSON] {"text":"this is sent to the target player"}'
# 
# JSON broadcast: [JSONBROADCAST], [JSONBC]
# 
#     DESCRIPTION: Send a JSON broadcast to the entire server specific to the target player
# 
#     EXAMPLE:  - '[JSONBROADCAST] {"text":"this is sent all players"}'
# 
# Chat message: [MESSAGE], [MSG]
# 
#     DESCRIPTION: Send a message to the target player
# 
#     EXAMPLE:  - '[MESSAGE] &aThis is sent to the player joining/leaving/viewing the MOTD'
# 
# Chat broadcast: [BROADCAST], [BC]
# 
#     DESCRIPTION: Send a broadcast to the entire server specific to the target player
# 
#     EXAMPLE:  - '[BROADCAST] &aThis is sent to all players'
# 
# Actionbar message: [ACTIONBARMSG], [ACTIONMSG]
# 
#     DESCRIPTION: Send an actionbar message to the target player
# 
#     EXAMPLE:  - '[ACTIONMSG] &aThis is sent to the target player'
# 
# Actionbar broadcast: [ACTIONBARBROADCAST], [ACTIONBROADCAST]
# 
#     DESCRIPTION: Send an actionbar broadcast to the server specific to the target player
# 
#     EXAMPLE:  - '[ACTIONBROADCAST] &aThis is sent to all players'
# 
# Title message: [TITLEMESSAGE], [TITLEMSG]
# 
#     DESCRIPTION: Send a title and/or subtitle message to the target playe
# 
#     EXAMPLE:  - '[TITLEMSG] title:&aWelcome to the server subtitle:&bsubtitle here fadein:10 stay:20 fadeout:10'
# 
# Title broadcast: [TITLEBROADCAST], [TITLEBC]
# 
#     DESCRIPTION: Send a title broadcast to the entire server specific to the target player
# 
#     EXAMPLE:  - '[TITLEBC] title:&a%player% joined! subtitle:&bsubtitle here fadein:10 stay:20 fadeout:10'
# 
# Player command: [PLAYERCOMMAND], [PLAYERCMD]
# 
#     DESCRIPTION: Force the target player to execute a command
# 
#     EXAMPLE:  - '[PLAYERCMD] /spawn'
# 
# Console command: [CONSOLECOMMAND], [CONSOLECMD]
# 
#     DESCRIPTION: Execute a console command where target specific placeholders can be used
# 
#     EXAMPLE:  - '[CONSOLECMD] spawn %player%'
# 
# Player sound: [SOUND], [PLAYERSOUND]
# 
#     DESCRIPTION: Play a sound to the target player
# 
#     EXAMPLE:  - '[SOUND] NOTE_PLING 10 10'
# 
# Broadcast sound: [BROADCASTSOUND], [BCASTSOUND]
# 
#     DESCRIPTION: Play a sound to the entire server
# 
#     EXAMPLE:  - '[BROADCASTSOUND] NOTE_PLING 10 10'
# 
# 
# 
# 
# If you want to display a line with normal text and color codes
# you must start the line with the [MESSAGE] tag
# formatName:
#     join_actions:
#     - '[MESSAGE] &eWelcome to the server %player%!'
# 
# If you want to use multiple JSON components in one String
# you must separate them with an And operator -> &&
# formatName:
#     join_actions:
#     - '[JSONMESSAGE] {"text":"Welcome","color":"green"}&&{"text":" player","color":"yellow"}'
# 
# template
# ================
# deluxejoin_formats:
#   <formatIdentifier>:
#     priority: <unique number here>
#     join_actions:
#     - '[JSONBROADCAST] {"text":"%player% joined the game","color":"yellow"}'
#     leave_actions:
#     - '[JSONBROADCAST] {"text":"%player% left the game","color":"yellow"}'
# ================
# The priority system is very important! It works just like
# the DeluxeChat format priority system. This allows players to
# have multiple permissions and DeluxeJoin will know what join/leave
# format to assign the player. 1 would be the highest priority (first)
# 1000 would be the lowest priority (last)
# 
# The permission node for a format is:
# deluxejoin.format.<identifier>
# 
# Placeholders are available if you have DeluxeChat or PlaceholderAPI installed on your server!
# You may use any placeholders anywhere inside of your formats.
# All placeholders are specific to the target player joining, leaving, or viewing the MOTD
# 
# If the MOTD system is enabled, it follows the same format as join/leave formats.
# You can create as many MOTDs you like, the player needs permission for a motd to
# view it. The permission node is:
# deluxejoin.motd.<identifier>
# 
# The following actions CAN NOT be used in leave_actions as the player has already left the server:
# JSON message, chat message, actionbar message, title message, player command, player sound
# 
# The following actions CAN NOT be used in motd_actions as these actions would affect all players online:
# JSON broadcast, chat broadcast, actionbar broadcast, title broadcast, broadcast sound
# 
# If you need an easy way to create JSON messages, 
# visit http://minecraftjson.com/
deluxejoin_formats:
  default:
    priority: 1
    join_actions:
    - '[JSONBROADCAST] {"text":"[","color":"dark_gray"}&&{"text":"+","color":"green","bold":"true"}&&{"text":"]","color":"dark_gray"}&&{"text":"  %player%","color":"gray","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Players
      online: &f%online%","color":"aqua"}]}}}'
    leave_actions:
    - '[JSONBROADCAST] {"text":"[","color":"dark_gray"}&&{"text":"-","color":"red","bold":"true"}&&{"text":"]","color":"dark_gray"}&&{"text":"  %player%","color":"gray","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Players
      online: &f%online%","color":"aqua"}]}}}'
first_join:
  announce_on_join: true
  actions:
  - '[JSONBROADCAST] {"text":"This is %player%s first time joining!","color":"green","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Welcome
    %player%!","color":"yellow"}]}}}'
motd:
  enabled: true
  delay: 1
motds:
  default:
    priority: 1
    motd_actions:
    - '[MESSAGE] &8&m+---------------------------------------------------+'
    - '[JSONMESSAGE] {"text":"               Welcome to the server ","color":"green"}&&{"text":"%player%","color":"white","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"That
      is your name right?","color":"yellow"}]}}}'
    - '[MESSAGE] &f'
    - '[MESSAGE] &f'
    - '[MESSAGE]           &eThis motd was brought to you by &7DeluxeJoin'
    - '[JSONMESSAGE] {"text":"               &6Visit &7DeluxeJoin &6on Spigot "}&&{"text":"Click
      here!","color":"white","clickEvent":{"action":"open_url","value":"http://www.spigotmc.org/resources/deluxejoin.4846/"}}'
    - '[MESSAGE] &8&m+---------------------------------------------------+'
```

{% endcode %}


# EzRanksPro

The most customizable /rankup plugin

![](/files/-MB-4as5v5mBefUDkyTw)

## Description

EzRanksPro allows users to rank-up the easy way, with a very flexible and extremely customizable rank-up system built for server owners by server owners. The config requires minimal effort an is a quick and simple setup.

## Setup

To give a player or group access to a rankup, they need access to the permission node associated with it! Without it EZRanksPro does not know what rankup they have access to. If you create a rankup for rank A to B, you will need to give the A rank the permission node: `ezranks.rank.A`. This will tell EZRanksPro that players in A should have the rankup associated with A. Players can have access to multiple `ezranks.rank.` permission nodes, the highest order rankup will always be applied for the player.

For a player to be considered the last rank, they need to have the permission node: `ezranks.lastrank` This tells EZRanksPro that the player is at the last rank and has no more rankups available.

Inside of your rankups.yml you will see a section with each rankup named rankup\_actions. In this section you may list many actions that the plugin will perform when a player ranks up. The format for actions are:

-'\<action> \<arguments>'

You must include required arguments :

\<required>, (optional)

You may delay any rankup action by ending the action String with example:

-'\[consolecommand] eco give %player% 100 '

### Rankup action list

* \[consolecommand] - perform a console command
* \[playercommand] - make the player perform a command
* \[message] - send the player a message
* \[broadcast] - send the server a message
* \[jsonmessage] - send the player a json message
* \[jsonbroadcast] - send the server a json message
* \[actionbarmessage] - send the player an actionbar message
* \[actionbarbroadcast] - send the server an actionbar message
* \[addgroup] (world) - add the player to a permissions group
* \[removegroup] (world) - remove the player from a permissions group
* \[addpermission] (world) - add a permission node to the player
* \[removepermission] (world) - remove a permission node from a player
* \[setprefix] - set the players prefix
* \[setsuffix] - set the players suffix
* \[effect] - play an effect at the players location
* \[sound] - play a sound at the players location

### Placeholders list

Placeholders can be used in your rankup actions and messages. Placeholders list:

* %player% - players name
* %displayname% - players displayname
* %world% - players current world
* %rank% - players current rank
* %rankup% - players next rank (if they have one)
* %cost% - cost to rankup
* %cost\_formatted% - formatted cost to rankup
* %balance% - players balance
* %balance\_formatted% - players formatted balance
* %difference% - amount still needed
* %difference\_formatted% - formatted amount still needed
* %progress% - rounded % of rankup cost obtained
* %progressexact% - exact % of rankup cost obtained
* %rankprefix% - players current rank prefix defined in this file
* %rankupprefix% - players next rank prefix defined in this file
* %lastrank% - last rank available
* %lastrankprefix% - last rank available prefix
* %rankup\_cost\_% - show the cost for a specific rank
* %rankup\_cost\_formatted\_% - show the formatted cost for a specific rank
* %rankup\_is\_completed\_% - show if a player has completed the specified rank


# Commands & Permissions

List of commands and permissions for the plugin

## Player commands

| Command     | Permission         | Description                                     |
| ----------- | ------------------ | ----------------------------------------------- |
| /rankup     | ezranks.rankup     | Attempt to rankup from your current rank        |
| /ranks      | ezranks.listranks  | View the current server ranks list with prices! |
| /autorankup | ezranks.autorankup | Toggle autorankup on or off                     |

## Admin commands

| Command                                             | Permission    | Description                                                                                                    |
| --------------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- |
| /ezadmin                                            | ezranks.admin | View plugin version                                                                                            |
| /ezadmin help                                       | ezranks.admin | Admin Help Menu                                                                                                |
| /ezadmin createrankup \<rankFrom> \<rankTo> \<cost> | ezranks.admin | Create and load default rankup section inside of the rankups.yml for the specific rankup specified in command. |
| /ezadmin deleterankup \<rankFrom>                   | ezranks.admin | Delete an active rankup from memory and the rankups.yml                                                        |
| /ezadmin list                                       | ezranks.admin | List all/rank specific rankups                                                                                 |
| /ezadmin info \<rankFrom> \<rankTo>                 | ezranks.admin | View detailed information about a specific rankup.                                                             |
| /ezadmin forcerankup \<player>                      | ezranks.admin | Force a player to rankup at no cost                                                                            |
| /ezadmin reload                                     | ezranks.admin | Reload config/rankups.yml                                                                                      |

**Commands aliases**

* **/rankup:** /ezru, /ru, /ezr, /promote
* **/ranks:** /rankslist
* **/autorankup:** /arankup

## Permissions

| Permission              | Description                                                                                 |
| ----------------------- | ------------------------------------------------------------------------------------------- |
| ezranks.rank.\<rank>    | Tells EZRanksPro what rank the player is at                                                 |
| ezranks.lastrank        | This tells EZRanksPro that the player is at the last rank and has no more rankups available |
| ezranks.cooldown.bypass | Allows players to bypass the rankup cooldown if it is enabled                               |
| ezranks.admin           | Grants access to all the admin related commands                                             |


# Configuration

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# EZRanksPro 1.9.0 main configuration file
# Created by extended_clip
check_updates: true
debug: false
check_primary_group_for_available_rankup: false
chat_prefix_enabled: false
log_rankups_to_file: false
confirm_to_rankup:
  enabled: true
  time: 10
rankup_cooldown:
  enabled: true
  time: 30
ranks_command_enabled: true
ranks:
  use_custom_message: true
  custom_message:
  - '&8&m----------'
  - '&aA&f: &a$&f100'
  - '&bB&f: &a$&f200'
  - '&cC&f: &a$&f300'
  - '&8&m----------'
  header:
  - '&8&m----------'
  format_previous_ranks: '&8%rank% to %rankto%: Completed'
  format_current_rank: '&f%rank% to %rankto%: &a$&f%cost%'
  format_incomplete_ranks: '&7%rank% to %rankto%: &a$&f%cost%'
  format_last_rank: '&f%lastrank%: &cLast rank!'
  format_is_last_rank: '&f%lastrank%: &aYou are the last rank!'
  footer:
  - '&8&m----------'
money:
  use_custom_format: false
  custom_format: '#,###.00'
  thousands_format: k
  millions_format: M
  billions_format: B
  trillions_format: T
  quadrillions_format: Q
progress_bar:
  has_color: '&a'
  needs_color: '&8'
  end_color: '&e'
  left_character: '['
  bar_character: ':'
  right_character: ']'
  is_full: '&a/rankup'
placeholders:
  rank_completed: completed
  rank_not_completed: incompleted
autorankup:
  enabled: true
  check_interval: 60
```

{% endcode %}

## Multipliers

{% code title="multipliers.yml" %}

```yaml
# EZRanksPro multiplier.yml file
# This file allows you to create custom cost multipliers and discounts
# Discounts need to be listed in the rankup_cost_discounts: section
# Multipliers need to be listed in the rankup_cost_multipliers section
# 
# The format for a multiplier and discount is the same:
# <unique identifier>:
#   priority: <unique number>
#   permission: <your custom permission for this multiplier/discount>
#   percentage: <your percentage to add on/take off of the cost>
# 
# You can list as many multipliers/discounts you like for each section.
# Each multiplier/discount must have a unique priority set!!!
# The priority determines what multiplier comes first in your list
# If a player happens to have multiple discount or multiplier
# permissions, the lowest priority will always be applied
# 
# The percentage system works just like a discount at a store...
# If you set a discount percentage to 99.0 for a rank that cost 100 dollarsanyone with that discount permission will only pay 1 dollar
# The format for percentage can include a decimal ex: 1.25, 99.9, 1, 1.05
# DO NOT INCLUDE A % SYMBOL!!!
# Discounts can not exceed a 100% percentage, 
# if your discount makes the rankup cost negative
# the price will default to 1
# You can set multipliers to any percentage: 400.0, 200.0 etc 
# If a player has permission for a cost multiplier and discount, the multiplier will always be applied before the discount
# is applied. Meaning: player has a multiplier to make ranking up cost twice as much and has perm for discount
# The discount will be applied to the new cost AFTER the multiplier is applied.
rankup_cost_discounts:
  example:
    priority: 1
    permission: some.discount.permission
    percentage: 0.0
rankup_cost_multipliers:
  example:
    priority: 1
    permission: some.multiplier.permission
    percentage: 0.0
```

{% endcode %}

## Rankups

{% code title="rankups.yml" %}

```yaml
# EZRanksPro rankups.yml file
# Create your rankups in this file.
# If you need a default template, delete the rankups: section and
# let it regenerate an example rankup.
# 
# rankup_actions are a list of 
# actions which will be executed
# when a player successfully ranks up
# 
# You must include required arguments
# <required>, (optional)
# rankup_action list:
# [consolecommand] <command> - perform a console command
# [playercommand] <command> - make the player perform a command
# [message] <message> - send the player a message
# [broadcast] <message> - send the server a message
# [jsonmessage] <json>- send the player a json message
# [jsonbroadcast] <json> - send the server a json message
# [actionbarmessage] <message> - send the player an actionbar message
# [actionbarbroadcast] <message> - send the server an actionbar message
# [addgroup] <group> (world) - add the player to a permissions group
# [removegroup] <group> (world) - remove the player from a permissions group
# [addpermission] <permission> (world) - add a permission node to the player
# [removepermission] <permission> (world) - remove a permission node from a player
# [setprefix] <prefix> - set the players prefix
# [setsuffix] <suffix> - set the players suffix
# [effect] <effect> - play an effect at the players location
# [sound] <sound> <volume> <pitch> - play a sound at the players location
# 
# You can delay any of the rankup actions being performed by ending the action with
# <delay=(time in seconds)>
# example:
# [consolecommand] eco give %player% 100 <delay=10>
# 
# Placeholders can be used in your rankup actions and messages:
# 
# %player% - players name
# %displayname% - players displayname
# %world% - players current world
# %rank% - players current rank
# %rankup% - players next rank (if they have one)
# %cost% - cost to rankup
# %cost_formatted% - formatted cost to rankup
# %balance% - players balance
# %balance_formatted% - players formatted balance
# %difference% - amount still needed
# %difference_formatted% - formatted amount still needede
# %progress% - rounded progress % based on cost - balance
# %progressexact% - exact progress % based on cost - balance
# %progressbar% - custom progressbar based on cost - balance
# %rankprefix% - players current rank prefix defined in this file
# %rankupprefix% - players next rank prefix defined in this file
# %lastrank% - last rank available
# %lastrankprefix% - last rank available prefix
# %rankup_cost_<rankname>% - show the cost for a specific rank
# %rankup_cost_formatted_<rankname>% - show the formatted cost for a specific rank
# %rankup_is_completed_<rankname>% - show if a player has completed the specified rank

last_rank:
  rank: Z
  prefix: '&8[&bZ&8]'
requirement_message:
- '&8&m------------'
- '&cYou need &a$&f%cost% &cto rankup to %rankupprefix%'
- '&8&m------------'
rankups:
  A:
    order: 1
    prefix: '[A]'
    rankup_to: B
    cost: 1000.0
    rankup_actions:
    - '[broadcast] &6&l>&b&l> &6%player% &eranked up to &7[&e&l%rankup%&7]'
    - '[addgroup] %rankup%'
    - '[removegroup] %rank%'
```

{% endcode %}

## Messages

{% code title="messages.yml" %}

```yaml
# EZRanksPro messages file
no_permission: '&cYou don''t have the permission node &f{0} &cto do that!'
rankup_last_rank: '&7You are at the last rank and have no more rankups.'
rankup_no_rankups: '&cYou don''t have any rankups available at your current rank.'
rankup_confirm_message: |-
  &aAre you sure you want to rankup to &f%rankup% for &a$&f%cost%?
  &aType &7/rankup &ato confirm.
rankup_on_cooldown: '&cYou need to wait %time% more seconds until you can rankup again!'
ranks_no_ranks_loaded: '&cThere are no ranks loaded!'
target_not_online: '&f{0} &cis not online!'
force_rankup_no_rankup: '&f{0} &cdoes not have any rankups available at rank &f{1}&c!'
force_rankup_success: '&f{0} &awas successfully ranked up from &f{1} &ato &f{2}&a!'
autorankup_toggle_on: '&aAutoRankup toggled on.'
autorankup_toggle_off: '&7AutoRankup toggled off.'
autorankup_last_rank: '&cYou are at the last rank and have no need to autorankup!'
autorankup_no_rankups: '&cYou do not have a rankup at your current rank and will not
  be able to autorankup!'
```

{% endcode %}


# EzPrestige

Let players /prestige the EZ way

## Description

Keep it going! **EZPrestige** gives you the ability to add prestige levels to your server's rank up system, where players can start over as a prestige player when they reach a certain rank.

**EzPrestige** gives players the ability to prestige using /prestige. Features plenty of configurable requirements for prestiging, as well as placeholders to display the prestige info such as prefix, next prestige and much more.

## Features

* Ability to create unlimited prestige levels!
* Highly customizable.
* Built-in GUI to display all prestige levels.
* An option to confirm before upgrading to the next prestige level.
* Supports any chat plugin to display the prestige level!
* Supports any rank up system/plugin.
* Ability for players to prestige
* Highly customizable.
* Placeholders to display prestige info
* Compatible with rankup plugins (EzRanksPro, etc)
* Permission based

## Dependencies

## Setup

**EZPrestige** requires any rank up system/plugin to work properly and fulfill its purpose.

### DeluxeChat

## Setup

* To display the prestige tag within your deluxechat chat format, use the placeholder provided by the ezprestige expansion
* download the expansion using /papi ecloud download ezprestige (make sure to reload PlaceholderAPI afterwards)
* set the prestige placeholder `%ezprestige_prestige%` within your format
* Other placeholders (<https://api.extendedclip.com/expansions/ezprestige/>)
* Put the **EZPrestige jar** file you downloaded in your **plugins** folder.
* Download a rank up plugin (such as [**EZRanksPro**](https://www.spigotmc.org/resources/10731/)) or set up your own.
* Restart the server.
* Modify the **config.yml** file that was generated to fit your server's layout (File path: `/plugins/EZPrestige/`).
* Create your prestige levels in **prestiges.yml** file. Don't forget to give the players the prestige permission (`ezprestige.prestige.<Prestige Number>`) in the `prestige_commands` section!
* Reload **EZPrestige** `/prestige reload`.
* Check the [Commands & Permissions](/clips-plugins/ezprestige/commands-and-permissions) page, to give players access to the commands you want them to use.
* And you're done!

### Essentials Chat

* If you are using Essentials Chat you will need to do the following
* Open the Essentials config and find the EssentialsChat section
* Place the prestige placeholder for essentials chat `{prestige}` inside the format

### Useful Guides

* [koz4christ - Minecraft Server Admin Guide](https://www.youtube.com/watch?time_continue=2\&v=ZMFpLnxRGW0\&feature=emb_logo)


# Commands & Permissions

List of commands and permissions for the plugin

## Player commands

| Command    | Permission | Description                                                           |
| ---------- | ---------- | --------------------------------------------------------------------- |
| /Prestige  | -          | Upgrades to the next prestige level if possible.                      |
| /Prestiges | -          | Opens the prestiges GUI (if enabled) or displays all prestige levels. |

## Admin commands

| Command           | Permission       | Description                    |
| ----------------- | ---------------- | ------------------------------ |
| /Prestige Reload  | EZPrestige.Admin | Reloads the plugin's files.    |
| /Prestige Version | EZPrestige.Admin | Displays the plugin's version. |

**Commands aliases**

* **/Prestige:** /EZPrestige
* **/Prestiges:** /EZPrestiges

## Permissions

| Permission             | Description                                                                                            |
| ---------------------- | ------------------------------------------------------------------------------------------------------ |
| EZPrestige.CanPrestige | Allows the player to upgrade to the next prestige level even if the player isn't on the prestige rank. |


# Configuration

The plugin's configuration files

## Config

{% code title="config.yml" %}

```yaml
# EZPrestige version: 1.2.2 Main Configuration
# 
# prestige_rank: <rank players are able to /prestige>
# confirm_to_prestige: <true/false>
# chat_integration: <true/false>
# messages: <-customize your messages
# valid placeholders: 
# %cost% - cost to prestige
# %balance% - players balance
# %prestige% - next prestige number
# %displaytag% - next prestige displaytag
# %prestigerank% - rank player needs to be to use /prestige
# %rank% - players permission group
prestige_rank: Free
confirm_to_prestige: true
chat_integration: true
op_prestige_display_tag: '&8[&c999&8]'
no_prestige_display_tag: '&8[&c0&8]'
gui:
  use_prestiges_gui: true
  display_name: '&cPrestiges'
  size: 18
  completed_prestige:
    material: STAINED_GLASS_PANE
    data: 13
    amount: 1
    display_name: '%displaytag%'
    lore:
    - '&acompleted'
  current_prestige:
    material: STAINED_GLASS_PANE
    data: 5
    amount: 1
    display_name: '%displaytag%'
    lore:
    - '&aYour current prestige'
  next_prestige:
    material: STAINED_GLASS_PANE
    data: 7
    amount: 1
    display_name: '%displaytag%'
    lore:
    - '&7Next prestige'
    - '&a$&f%cost%'
  unavailable_prestige:
    material: STAINED_GLASS_PANE
    data: 14
    amount: 1
    display_name: '%displaytag%'
    lore:
    - '&cPrestige to unlock'
    - '%displaytag%'
messages:
  not_at_prestige_rank:
  - '&cYou need to be &f%prestigerank% &cto prestige!'
  not_enough_money:
  - '&cYou need &a$&f%cost% &cto prestige to &f%displaytag%&c!'
  confirm_prestige:
  - '&bAre you sure you want to prestige?'
  - '&bYour rank will reset and you will need to'
  - '&bstart over. Type &f/prestige &bto confirm!'
  last_prestige:
  - '&bYou are at the last prestige!'
  prestiges_command:
    completed_prestige: '&7%displaytag% &f- &aCompleted'
    current_prestige: '&7%displaytag% &f- &aCurrent prestige!'
    next_prestige: '&7%displaytag% &f- &a$&f%cost%'
    unavailable_prestige: '&7%displaytag% &f- &cPrestige to unlock!'
    header:
    - '&8&m-----------------------------------------------------'
    - '&cPrestige list:'
    footer:
    - '&8&m-----------------------------------------------------'
```

{% endcode %}

## Prestiges

{% code title="prestiges.yml" %}

```yaml
# EZPrestige prestiges file
# 
# YOU MUST INCLUDE A COMMAND TO ADD THE PERMISSION
# ezprestige.prestige.<prestige> TO THE PLAYER IN ORDER FOR
# EZPrestige TO KNOW WHAT PRESTIGE A PLAYER IS
# IN EVERY prestige_commands LIST
# 
# Prestige format:
# 
# prestiges:
#   <prestigeName>:
#     prestige: <number> MUST START AT 1, NO DUPLICATE NUMBERS OR SKIPPING
#     cost: <amount>
#     display_tag: <prefix>
#     prestige_commands:
#     - <commands here>
# 
# Use {prestige} in your chat formatting plugin to show the 
# display_tag if a player has a Prestige!
# 
# valid placeholders for prestige_commands: 
# %cost% - cost to prestige
# %balance% - players balance
# %prestige% - next prestige number
# %displaytag% - next prestige displaytag
# %prestigerank% - rank player needs to be to use /prestige
# %rank% - players permission group
prestiges:
  prestige1:
    prestige: 1
    cost: 100000
    display_tag: '&8[&c1&8]'
    prestige_commands:
    - pex user %player% group remove %rank%
    - pex user %player% group add A
    - pex user %player% add ezprestige.prestige.1
    - ezmsg &bYou are now &f%prestige%&b!
    - ezbroadcast &f%player% &bhas just prestiged to &f%displaytag%&b!
```

{% endcode %}


# InventoryFull

Totally customizable alert plugin to inform players when they don't have inventory space!way

## Description

**InventoryFull** is a very small plugin that alerts players when they don't have inventory space!

Simply enable any of the following ways to alert players in the config file and use /invfull reload. After the alert type is enabled, when players get a full inventiry they will be alerted!

## Features

* 5 Ways to send the full inventory alert.
* Highly customizable.
* Play a sound when the alert is sent.

## Alerts

Types of alerts:

* ChatMessage - send an inventory full message through chat!
* Actionbar (Requires [ActionAnnouncer](https://www.spigotmc.org/resources/actionannouncer.1320/)) - send an inventory full message through the actionbar!
* Title and subtitle (Requires [TitleManager](https://www.spigotmc.org/resources/titlemanager.1049/)) - send an inventory full message through the Title and subtitle!
* Holograms (Requires [HolographicDisplays](https://www.spigotmc.org/resources/titlemanager.1049/)) - send an inventory full message with a hologram!
* Sound - play a sound to a player when they have a full inventory!

## API

There is an API that will allow you to listen to a special event that is fired when a player has a full inventory and breaks a block that won't fit!

Here is an example:

```yaml
@EventHandler
public void onFull(InventoryFullEvent e) {

    //player with full inventory
    Player p = e.getPlayer();

    //item that does not fit in players inventory
    ItemStack i = e.getItem();

}
```


# Commands & Permissions

List of commands and permissions for the plugin

## Admin commands

| Command               | Permission          | Description       |
| --------------------- | ------------------- | ----------------- |
| /inventoryfull        | inventoryfull.admin | Info about plugin |
| /inventoryfull reload | inventoryfull.admin | Reload the config |

**Commands aliases**

* **/inventoryfull:** /invfull: /infull

## Permissions

| Permission          | Description                                                                      | Default |
| ------------------- | -------------------------------------------------------------------------------- | ------- |
| inventoryfull.alert | Alert players when their inventory is full and they mine a block that won't fit! | default |
| inventoryfull.admin | Ability to use /inventoryfull and /inventoryfull reload.                         | op      |


# Configuration

## Config

{% code title="config.yml" %}

```yaml
# InventoryFull version 1.8
# Created by: extended_clip
# Valid placeholders:
# %block% - display the dropped item type
# %player% - display the players name
#   
# For valid sounds, visit http://jd.bukkit.org/rb/apidocs/org/bukkit/Sound.html
cooldown_time: 5
max_alerts_until_cooldown: 5
sound_when_full:
  enabled: true
  sound: NOTE_PLING
  volume: 10
  pitch: 1
chat_message:
  use_chat_message: true
  message:
  - '&cYour inventory is full!'
actionannouncer:
  use_actionbar: false
  display_time: 5
  message:
  - '&cYour inventory is full!'
  - '&4Your inventory is full!'
titlemanager:
  use_title: false
  title: '&cYou don''t have room in your inventory'
  subtitle: to collect that &f%block%&c!
  fade_in: 12
  fade_out: 12
  duration: 20
  use_actionbar: false
  actionbar_message: '&cYou don''t have room in your inventory'
holographicdisplays:
  use_hologram: false
  message:
  - '&cYour inventory'
  - '&cis full!'
  display_time: 3
```

{% endcode %}


# MessageAnnouncer

JSON message interval announcements with multiple lines and support for tons of placeholders!

## Description

**MessageAnnouncer** allow server owners to create custom message using JSON which can be sent at a set interval.

## Features

* Ability to use JSON
* Ability to use regular text using the `[text]` tag
* Ability to send the messages in a random order
* Ability to set a custom interval
* Ability to play a sound when a message is sent
* You can create unlimited announcements
* Highly customizable.
* PlaceholderAPI support


# Commands & Permissions

List of commands and permissions for the plugin

## Admin commands

| Command                                                       | Permission             | Description                         |
| ------------------------------------------------------------- | ---------------------- | ----------------------------------- |
| /messageannouncer start                                       | messageannouncer.admin | Start interval announcements        |
| /messageannouncer stop                                        | messageannouncer.admin | Stop interval announcements         |
| /messageannouncer list \<active/all>                          | messageannouncer.admin | List active/all announcements       |
| /messageannouncer send                                        | messageannouncer.admin | Send an announcement to a player    |
| /messageannouncer announce (player to parse placeholders for) | messageannouncer.admin | Send an announcement to all players |
| /messageannouncer reload                                      | messageannouncer.admin | Reload the config                   |

**Commands aliases**

* **/messageannouncer:** /msgannouncer: /msadmin

## Permissions

| Permission             | Description                                   |
| ---------------------- | --------------------------------------------- |
| messageannouncer.admin | Gives access to all MessageAnnouncer commands |


# Configuration

## Config

{% code title="config.yml" %}

```yaml
# MessageAnnouncer v1.11.0 Main configuration
announcer_enabled: true
announcer_random: true
announce_interval: 60
sound:
  enabled: true
  sound_name: NOTE_PLING
  volume: 10
  pitch: 1
interval_announcement_list:
- default
- vote
announcements:
  default:
  - '{"text": "--------"}'
  - '{"text": "This is a JSON auto announcement!"}'
  - '{"text": "--------"}'
  vote:
  - '{"text": "--------"}'
  - '{"text": "Be sure to vote for the server!"}'
  - '{"text": "--------"}'
```

{% endcode %}


# MineCrates

Get lucky and find a chest full of rewards while mining! Best 'Lucky Blocks' plugin available

## Description

**MineCrates** allows server owners to define areas where crates will spawn. Blocks that are mined in the area contribute to the reward counters, once reached the last block the player broke will switch into a reward crate. Areas, rewards and tiers can all be edited within the config.

## Features

* Ability to define "crate areas"
* You can define unlimited "areas" and even "reward tiers"
* MineCrates supports: WorldGuard, WorldEdit, PrisonMines & MineResetLite
* Highly customizable.
* Rewards can be items or commands
* Highly customizable.
* PlaceholderAPI support
* Permission based


# Commands & Permissions

List of commands and permissions for the plugin

## Player commands

| Command          | Permission      | Description                                        |
| ---------------- | --------------- | -------------------------------------------------- |
| /minecrates help | minecrates.help | Help Message                                       |
| /minecrates info | minecrates.info | Gets the minecrate area in which u are standing in |

## Admin commands

| Command            | Permission        | Description                        |
| ------------------ | ----------------- | ---------------------------------- |
| /minecrates ingore | minecrates.ignore | Toggle on/off receiving minecrates |
| /minecrates reload | minecrates.admin  | Reload the config                  |

**Commands aliases**

* **/Minecrates:** /Mcrates

## Permissions

| Permission                 | Description                           |
| -------------------------- | ------------------------------------- |
| minecrates.get             | Ability to break blocks to get crates |
| minecrates.cooldown.exempt | Exempt from MineCrates cooldowns      |


# Configuration

## Config

{% code title="config.yml" %}

```yaml
# MineCrates 2.10.0 configuration file
# Created by: extended_clip
# 
# 
# area_handler: World / WorldGuard / MRL / PrisonMines
# area_handler is the name of the hook you want to define crate areas for
# Crate areas are tied to the name of the world / mine / region you choose
# depending on the hook you use.
# 
# crate_despawn_time: <time in seconds that crates will despawn after spawning>
# 
# crate_material: <Material or ID of the crate block that is spawned>
# 
# crate_inventory_name: <name of the inventory shown when the crate is opened>
# 
# ==================================================
# 
# Crate area configuration:
# 
# Almost all entries in areas are optional
# although you must have a drop_counter and drop_chance entry.
# You must also have a rewards section with at least 1 valid reward list for the area to be loaded.
# 
# areas:
#   (region, mine, or world name): 
#     permission: (if you want players to have a certain permission to obtain crates in this area, add the permission node here)
#     drop_counter: (how many blocks need to be broken before a crate has a chance to spawn)
#     drop_chance: (what is the chance out of 100.0 that a crate will spawn when the counter reaches 0)
#     alternate_areas:
#     - (if you would like to allow this area options to be used for other areas)
#     - (that way all rewards and options are shared, you can list the alternate area names here)
#     - world_nether
#     - world_the_end
#     counted_materials:
#     - (if you only want to have certain materials count towards the counter)
#     - (you can list them here, otherwise don't add this option)
#     - DIAMOND_ORE
#     - EMERALD_ORE
#     reward_on_break: <true/false> should rewards be given on break of the block instead of spawning a crate
#     rewards: (this section holds all reward related options specific to this area)
#       (name of this reward list):
#         priority: (if you have multiple lists, the lowest priority list will be applied if player has multiple list permissions)
#         permission: (optional if you require players have certain permission to obtain rewards in this list)
#         max_rewards_per_crate: (max amount of rewards a player can get in a crate from this list)
#         only_owner_can_open: (should only the person this crate spawned for be allowed to open it)
#         crate_spawn_actions: (these actions are performed when a crate holding this reward list is spawned)
#         - [msg] You found a crate
#         - [broadcast] @p found a crate
#         - [command] eco give @p 100
#         - [playersound] ANVIL_LAND 10 1
#         - [worldsound] ANVIL_BREAK 10 1
#         - [effect] helix
#         crate_open_actions: (these actions are performed when a crate holding this reward list is opened)
#         - [msg] You opened a MineCrate!
#         - [broadcast] @p opened a crate
#         - [playersound] CHEST_OPEN 10 1
#         - [effect] atom
#         crate_despawn_actions: (these actions are performed when a crate holding this reward list is despawned if it was not opened)
#         - [msg] You missed your crate
#         - [worldsound] ANVIL_BREAK 10 1
#         - [effect] heart
#         items: (this section holds all of the actual commands / items given as rewards)
#           (unique name for this item reward):
#             chance: (chance this reward will be selected) the chance system is explained below...
#             item: (if this reward is an itemstack, you must specify 'item:' here, otherwise you will specify 'commands:')
#               material: (if this is an item, these are the item options you can use)
#               data: (data value if needed)
#               amount: (amount of this item to give)
#               name: (display name to set on this item)
#               lore:
#               - (add your lore here if you want)
#               - (supports multiple lines)
#               enchantments:
#               - <ENCHANTMENT NAME>,<LEVEL>
#           (unique name for this command reward):
#             chance: 50.0
#             commands:
#             - (list all your commands here, they must start with a valid action identifier)
#             - [command] eco give @p 100
#             - [msg] you got 100 bucks!
# ==================================================
# 
# CRATE SPAWN CHANCE INFORMATION
# 
# This chance can be any double value from 0.01 to 100.0
# it is percentage based, so if you set the chance to 10.0
# there will be a 10% chance a crate will spawn when the break
# counter reaches 0. If you set it to 99.0, there will be a 99% chance
# that a crate will spawn when the counter rewaches 0.
# 
# ==================================================
# 
# REWARD CHANCE INFORMATION
# 
# All rewards in a specific reward list have a chance associated with the item/commands that are executed for that reward.
# All reward chances in a list must add up to or be less than 100.0
# Example:
# 
#     rewards:
#       VIP_REWARDS:
#         priority: 1
#         permission: vip.rewards
#         max_rewards_per_crate: 1
#         only_owner_can_open: true
#         items:
#           item_1:
#             chance: 10.0
#             item:
#               material: DIAMOND
#               amount: 128
#           item_2:
#             chance: 15.0
#             item:
#               material: IRON_INGOT
#               amount: 64
#           item_3:
#             chance: 25.0
#             item:
#               material: DIRT
#               amount: 64
#           command_1:
#             chance: 25.0
#             commands:
#             - [command] eco give @p 25
#             - [msg] You got 25 bucks
# 
# With this example, all of our chances add up to 75.0,
# This means that there is a 25% chance that we get nothing each time a reward is
# being selected. If we want to make sure players always get a reward, we could
# simply add one more reward item or command with the remainder percentage for all of our
# chances to equal 100.0, which would be 25.0.
# This system allows you to set what items are rare, and which items are going to be
# more commonly selected when the plugin chooses rewards.
# Always keep in mind that all reward chances must be less than, or add up to 100.0
# If your combined chance exceeds 100.0, the rewards that are being checked after 100.0 has
# been reached will not be loaded. Also remember, to make it where a player has a chance to get
# no reward, always leave the total chance less than 100.0 as all chance remaining will
# be the chance amount that no reward is chosen.
# 
# ==================================================
# 
# CRATE SPAWN/DESPAWN/OPEN/COMMANDS ACTION IDENTIFIERS
# 
# Any action added to these lists must contain a specific identifier
# as there are more actions than just commands to be executed.
# These actions are as follows:
# 
# [msg] <message>
# This will send a raw message to the target player
# 
# [broadcast] <message>
# This will broadcast a message to the entire server
# 
# [command] <command here>
# This will execute a command in the console
# 
# [worldsound] <sound> <volume> <pitch>
# This will play a sound to the entire world at the crate location
# 
# [playersound] <sound> <volume> <pitch>
# This will play a sound to the target player
# 
# [effect] <effectName>
# This will play a preset effect at the crate location
# 
# effect names:
#   animatedball
#   arc
#   atom
#   bleed
#   circle
#   cloud
#   cone
#   cube
#   cylinder
#   disco
#   dna
#   donut
#   dragon
#   earth
#   explode
#   flame
#   fountain
#   grid
#   heart
#   helix
#   hill
#   icon
#   love
#   music
#   shield
#   smoke
#   sphere
#   star
#   tornado
#   vortex
#   warp
#   wave
#   
# ==================================================
# 
# Optional: display a temporary hologram above the MineCrate when it is spawned.
# 
# To enable this feature, add the following entry to the top of your config file:
# 
# You can either use HolographicDisplays API to display the hologram, or the internal
# hologram mechanics. Set handler: none to disable holograms
# 
# Note: the internal hologram handler is only available for 1.8.8
# More hologram handlers will be coming soon.
# 
# crate_hologram:
#   handler: none/internal/holographicdisplays
#   message:
#   - '%player%s MineCrate'
#   - '(Right click to open)
#   height: 2'
# 
# Inside of the message, you can use the following placeholders:
#  %player% - shows players name who MineCrate is for
#  %area% - name of the area the crate spawned in
#  %rewardlist% - name of the list the rewards were chosen from
#  %rewards% - amount of rewards inside of the MineCrate
# 
# ==================================================

crate_hologram:
  handler: none
  message:
  - '&f%player%''s &aMineCrate'
  - '&e(&7Right click to open&e)'
  height: 2.2
check_updates: true
area_handler: World
ignore_silk_touch: true
crate_despawn_time: 30
crate_material: ENDER_CHEST
crate_inventory_name: '%reward_list_name% &aMineCrate'
messages:
  help:
  - '&aMineCrates &fhelp'
  - '&a/minecrates reload &7- &freload the plugin'
  - '&a/minecrates info &7- &fView minecrates information for the area you are standing'
  - '&a/minecrates ignore &7- &ftoggle on/off ignoring minecrates for yourself'
  ignore_toggle_on: '&aYou are now ignoring MineCrates!'
  ignore_toggle_off: '&fYou are no longer ignoring MineCrates!'
  only_owner_can_open_crate: '&cOnly &f@p &ccan open this &aMineCrate!'
  no_permission: '&cYou don''t have permission to do that!'
areas:
  world:
    permission: minecrates.getcrates.world
    drop_counter: 100
    drop_chance: 50.0
    cooldown: 30
    counted_materials:
    - COAL_ORE
    - IRON_ORE
    - GOLD_ORE
    - DIAMOND_ORE
    rewards:
      vip:
        priority: 1
        permission: minecrates.rewards.world.vip
        max_rewards_per_crate: 1
        only_owner_can_open: true
        crate_spawn_actions:
        - '[message] &aYou found a VIP MineCrate!'
        - '[command] eco give @p 100'
        - '[broadcast] &f@p &afound a MineCrate!'
        - '[effect] helix'
        crate_despawn_actions:
        - '[message] &7Your crate has despawned!'
        - '[effect] helix'
        items:
          example_item:
            chance: 20.0
            item:
              material: DIAMOND
              data: 0
              amount: 64
              name: '&bVIP &3Diamonds'
              lore:
              - This item is only available to players who
              - have permission for this vip reward list!
              enchantments:
              - LUCK,1
          example_command_1:
            chance: 1.0
            commands:
            - '[command] eco give @p 1000000'
            - '[msg] You got 1000000 dollars!'
          example_command_2:
            chance: 30.0
            commands:
            - '[command] eco give @p 500'
            - '[msg] You got 500 dollars!'
          example_command_3:
            chance: 49.0
            commands:
            - '[command] eco give @p 1000'
            - '[msg] You got 1000 dollars!'
      default:
        priority: 2
        max_rewards_per_crate: 1
        only_owner_can_open: false
        crate_spawn_actions:
        - '[message] &aYou found a regular MineCrate!'
        - '[command] eco give @p 100'
        - '[broadcast] &f@p &afound a MineCrate!'
        - '[effect] helix'
        items:
          example_item_1:
            chance: 5.0
            item:
              material: DIAMOND
              amount: 16
          example_item_2:
            chance: 10.0
            item:
              material: IRON_INGOT
              amount: 32
          example_command:
            chance: 85.0
            commands:
            - '[command] eco give @p 250'
            - '[msg] You got 250 dollars!'
```

{% endcode %}


# NoFlyZone

Block flying in specific WorldGuard regions + Auto flying in specific WorldGuard regions

## Description

**NoFlyZone** is a plugin that prevents players from flying in specific WorldGuard regions if they do not have permission.

## Instalation

All you need to do is add the region name to the NoFlyZone config list either by command or by editing the config manually and using /nfz reload. Anyone without the permission noflyzone.bypass will be stopped from flying as soon as they enter the region.

You NEED WorldGuard 6.x + WorldEdit for this plugin to work!

## Source

This plugin is open source. You can get the source code from here: <https://github.com/extendedclip/NoFlyZone>


# Commands & Permissions

List of commands and permissions for the plugin

## Player commands

| Command    | Permission | Description       |
| ---------- | ---------- | ----------------- |
| /noflyzone | -          | Info about plugin |

## Admin commands

| Command                 | Permission      | Description                   |
| ----------------------- | --------------- | ----------------------------- |
| /noflyzone list (world) | noflyzone.admin | List all/world no fly regions |
| /noflyzone add          | noflyzone.admin | Add a no fly region           |
| /noflyzone remove       | noflyzone.admin | Remove a no fly region        |
| /noflyzone reload       | noflyzone.admin | Reload the config             |

**Commands aliases**

* **/noflyzone:** /nfz

## Permissions

| Permission            | Description                                    |
| --------------------- | ---------------------------------------------- |
| noflyzone.bypass      | Allow players to fly anywhere                  |
| noflyzone.autofly.all | Albility to fly autofly in all autofly regions |


# Configuration

## Config

{% code title="config.yml" %}

```yaml
# NoFlyZone version: 2.0.0 Main Configuration
# 
# List regions below that will disable players from flying when they enter them

no_fly_worlds:
- world_nether
- world_the_end
no_fly_regions:
  world:
  - testflyregion
no_fly_message: '&cNo flying here!'
auto_fly_message: '&aYour flight has been toggled on!'
```

{% endcode %}


# CowPunch

Make Cows Fly Away

![](/files/-M54ojhd8eKIKdIzojLU)

Ever have that urge to punch a cow, but everytime you do its just so unsatisfying? Well I've got the plugin for you, this plugin allows cows to float up in into the sky after being punched by a player... and then come crashing down to the ground ultimately coming their end.


# Commands & Permissions

List of commands and permissions for the plugin

| Command | Permission   | Description                            |
| ------- | ------------ | -------------------------------------- |
| N/A     | cowpunch.use | Grants the ability to make cows float. |


# Firework Chests

Launch fireworks from any block

![](/files/-M54q-iJWrzsoEVh4ChI)

This is a fun little plugin that allows fireworks to come shooting out of any configured block clicked by a player. It also includes a configurable cooldown per block to stop pesky spammers.

![](/files/-M54q8JR8rWnKbZ1RDgI)


# Commands & Permissions

List of commands and permissions for the plugin

| Command | Permission         | Description                         |
| ------- | ------------------ | ----------------------------------- |
| N/A     | fireworkchests.use | Able to use the firework launchers. |


# Configuration

```
LaunchMessage: '&6Fireworks Launched!'
CooldownMessagePlural: '&cRestocking fireworks, please wait %time% seconds!'
CooldownMessage: '&cRestocking fireworks, please wait %time% second!'
CooldownTime: 5
NumberOfFireworks: 3
LauncherBlock: TRAPPED_CHEST
```

{% hint style="info" %}
Make sure `LauncherBlock` is valid material type!
{% endhint %}


# Fish Slapper

Slap your players sky high!

![](/files/-M54qd_a2bqmCCEZly-x)

FishSlapper allows any player with the correct permission to use raw fish as an tool to slap people around the server in a chaotic fashion. It's quite a simple concept, those with the permission allowing them have the permission to slap can slap anyone with the permission that allows them to be slapped. Once contact has been made between the fish and the player they are then sent flying away! (Pufferfish will allow for maximum slapping)

{% hint style="info" %}
Due to new fish added to the game, **v1.11.0+** You need to use a Pufferfish for the effect to work!
{% endhint %}


# Commands & Permissions

List of commands and permissions for the plugin

| Command        | Permission                | Description                                                                             |
| -------------- | ------------------------- | --------------------------------------------------------------------------------------- |
| /Slap (Player) | FishSlapper.SlapCommand   | Allows for use of /Slap, which will remotely slap a player                              |
| /SlapAll       | FishSlapper.SlapAll       | Slaps all players remotely!                                                             |
| N/A            | FishSlapper.ICanSlapYou   | Allows the player to slap anyone with the permission "FishSlapper.ICanBeSlapped"        |
| N/A            | FishSlapper.ICanBeSlapped | Allows the player to be slapped by anyone with the permission "FishSlapper.ICanSlapYou" |


# Configuration

```
SlapMessage: '&6You slapped &e%player%&6!'
SlappedMessage: '&6You got slapped by &e%player%!'
ServerSlap: '&4%player% &cslapped everyone on the server!'
SlapCommand: '&f%player% &aslapped you!'
SlapCommandWorked: '&f%player% &awas slapped!'
SlapCommandConsole: '&aYou have been slapped!'
NoPerms: '&cYou don''t have permission to use this command!'
```


# RawMsg

Send Raw Messages to a player or the server with PlaceholderApi Support

![](/files/-M54n2J0r-ZqtHNWi22E)

Just a simple plugin to send a raw message (No Prefix) from in game or console with [PlaceholderApi ](https://www.spigotmc.org/resources/placeholderapi.6245/)placeholders to either a single player or broadcast it to the whole server.

![](/files/-M54nG84J9wtookoCuJd)


# Commands & Permissions

List of commands and permissions for the plugin

| Command                                      | Permission | Description                    |
| -------------------------------------------- | ---------- | ------------------------------ |
| /RawMsg \<player/all> \<centered> \<message> | rawmsg.use | Permission for /RawMsg command |

{% hint style="info" %}
**\<centered>** - If set to *true RawMsg* will attempt to center the message when sending it to the player.

You can use **\<n>** in the message to add a new line. To add a blank line just use two!\
\
**For 1.16+ Users:**\
\#\<??????> for custom hex colours\
\&#xNAN;*Replace ?'s with hex value eg #\<ffffff>*
{% endhint %}


# Spit

Let your players spit like Llamas

![](/files/-M54rBQzeenTgjar_E8c)

Let your players spit like Llamas using the /spit command, this will fire spit from the player in the direction they are looking in.

![Spit on everything.](/files/-M54rJMrakM4yRdCcR5y)


# Commands & Permissions

List of commands and permissions for the plugin

| Command | Permission | Description                         |
| ------- | ---------- | ----------------------------------- |
| /spit   | spit.use   | Fire a ball of spit at your victim. |


# Temp MOTD

Set a timed temporary message all from one command!

![](/files/-M54vhR74JLODIrZWkT0)

Set a timed message to show up in your server list MOTD, broadcast events in your message, Thank voters in your message, Congratulate rankups in your message and much more.

![](https://proxy.spigotmc.org/d7112b8743976624285c5ad74fbc36e5db5435d9?url=https%3A%2F%2Fi.imgur.com%2Fcc1mhPM.png)

Using [ChatReaction ](https://www.spigotmc.org/resources/chatreaction.3748/)you can launch commands on correct guesses, use this to show off who won the reaction win and tell others to join in on the fun.

![](https://proxy.spigotmc.org/76308b3a829165fa400c0c1fea4f6382683ae229?url=http%3A%2F%2Fi.imgur.com%2FZ30HwMu.png)

\
Using [EzRanksPro ](https://www.spigotmc.org/resources/ezrankspro.10731/)on a rankup you can run the TempMotd command in the console and show off who ranked up and what they ranked up to!

![](https://proxy.spigotmc.org/0c02641d9fc2923d0ca28fd029f725d114ca8356?url=http%3A%2F%2Fi.imgur.com%2FAHyG4M8.png)

**More examples include:**\
\- Thank players for donating to the server.\
\- Thank players for voting for the server.\
\- Broadcast Drop Parties or other events.\
\- Congratulate on level ups.\
And many more.


# Commands & Permissions

List of commands and permissions for the plugin

| Command                      | Permission   | Description                                                          |
| ---------------------------- | ------------ | -------------------------------------------------------------------- |
| /TempMotd \<time> \<message> | tempmotd.use | he command used to broadcast a message to the MOTD, time in seconds. |
| /TempMotd Stop               | tempmotd.use | Force stop the current custom MOTD, sets back to default.            |
| /TempMotd Reload             | tempmotd.use | Reload the config and apply any change.                              |


# Configuration

```
# TempMOTD Config File
# By Funnycube
#
#DefaultMOTD: What is shown when no temp MOTD are active (Use \n for new line)
#TempMOTD: What is shown when there is a temp MOTD is active (Use \n for new line & use %message% for where the temp section will go)
#

DefaultMOTD: "&b&lMy Server&r &7|&r &dSomeRandomIp.com&r\n&7Come join my server!"
TempMOTD: "&b&lMy Server&r &7|&r &dSomeRandomIp.com&r\n%message%"
```


# Guilds \[W\.I.P Migration]

RPG, GUIs, Land Claims, Arenas, Guild Wars, MySQL and more!

![](/files/-M-BNWTNsR7LBNUOA02p)

## Description

**Guilds** were created to offer an RPG-type system to servers. It was inspired by players like you who enjoy creating a fun, exciting, and adventurous environment for your server. **Guilds** allow players to join interactive groups of other players, make their own communities on your server, and have a general fun time!

## **Features**

* Per-Guild Hierarchy (Roles)
* Tiers (Includes perks of your choosing)
* Claims (via WorldGuard)
* Banks
* Vaults (As many as your choose!)
* Buffs
* Per-Guild Chat
* Wars (via Arenas that you make)
* Multilingual
* **Tons** of GUIs!
* JSON + MySQL + SQLite support!

## Dependencies **(soft)**

* [Vault](https://www.spigotmc.org/resources/34315/)
* [WorldGuard](https://dev.bukkit.org/projects/worldguard)
* [PlaceholderAPI](https://placeholderapi.com)
* [Essentials](https://www.spigotmc.org/resources/9089/)

You can read more about the dependencies in the plugin on the next page, or by clicking [here](/helpchat-plugins/deluxemenus/options-and-configurations/requirements).

## Supported Platforms

* Spigot
* Paper
* CatServer? (I'm leaving this here because I've been told by multiple sources that this plugin seems to be working on whatever this is).\
  \
  Note: I've been told this works on cracked servers to an extent but it is not tested, nor is it fully supported.

## Translations

In **Guilds**, we always try to support as many languages as we can in order to support more people! The plugin currently supports 20 languages, but not all of them are always up-to-date on the translations. If you speak a language fluently other than English and are interested in translating, please join our [discord](https://helpch.at/discord) and let us know so that we can give you information on how to do that!


# Installation

Easy-to-follow-steps on how to get started with the plugin!

## First-Time Setup

1. **Stop** your server.
2. Put the **Guilds jar** file that you downloaded into your **plugins** folder.
3. Download the [optional dependencies](/glares-plugins/guilds-w.i.p-migration#dependencies-soft).
4. **Start** your server.
5. Modify the **config.yml**, **language files**, and all other files to your liking for your server. (All found in `/plugins/Guilds/.`

## Requirements

### Plugin Dependencies

**Vault:** Is a soft dependency but **highly** recommended. It helps handle the economy and permissions. It's also used by basically all other plugins that utilize economy.

**Economy Plugin:** An economy plugin is **highly** encouraged to help make the plugin work properly. Some popular ones are [EssentialsX](https://www.spigotmc.org/resources/9089/) and [TheNewEconomy](https://www.spigotmc.org/resources/7805/).

**Permission Plugin:** A permission plugin is **highly** encouraged to make the plugin run properly. The commands and other features all use permission nodes in order to work properly. A popular permission plugin is [LuckPerms](https://www.spigotmc.org/resources/28140/)!

### Server Dependencies

**CPU:** The plugin will run just fine on basically any modern CPU. It's optimized to be smooth and non-intensive to the server it runs on.

**RAM:** The project uses fairly little RAM. Via testing, the smallest it has run fine on was about 256MB if you were to have about 100 guilds or so running on the server.

**Disk Space:** The project uses very little space. It's optimized to keep itself clean and not bloat up your drive.

### SQL Dependencies

**MySQL:** If you choose to use MySQL, please make sure your database version is 5.7.8 or **higher**.

**MariaDB:** If you choose to use MariaDB, please make sure your database version is 10.2.7 or **higher**.


# Configuration

Overview page for the different configuration files

When the plugin starts up for the first time, the following files will be generated:

* [buff.yml](/glares-plugins/guilds-w.i.p-migration/configuration/buffs)
* [config.yml](/glares-plugins/guilds-w.i.p-migration/configuration/config)
* [roles.yml](/glares-plugins/guilds-w.i.p-migration/configuration/roles)
* [tiers.yml](/glares-plugins/guilds-w.i.p-migration/configuration/tiers)

The configuration for the plugin is split up into multiple files due to how flexible the plugin is and how much custom data you can add to it.


# Buffs

Example configuration for the buffs.yml file

```yaml
guild-buffs:
    # What should the name of the inventory be?
    gui-name: Guild Buffs
    # How often (in seconds) can a guild buy a buff?
    cooldown: 60
    # Do we want to allow users to have more than one buff at a time?
    buff-stacking: false
    # Set the name and material for the navigation buttons
    nav:
        next:
            material: EMPTY_MAP
            name: Next
        previous:
            material: EMPTY_MAP
            name: Previous
    # This is where the buffs themselves are to be created. You can create an unlimited number of buffs as long as the IDENTIFIERS are different.
    # Ths identifiers can be anything you want, they just tell the plugin that they aren't the same as the buff before.
    # The buffs are loaded into the menu in the order they are listed in the config. So, to change the order, simply change their location in their list of the config.
    # Example Buff:
    #     # The identifier of the buff, can be anything you want.
#    - identifier: '1'
    # This is what the buff will look like to the player when they DON'T have the permission listed below.
#      locked:
#        name: '&a&lSubstance of the Redmod Graff'
#        material: FEATHER
#        lore:
#        - '&aType » &7Haste'
#        - '&aLength » &760 Seconds'
#        - '&aCost » &7$60'
    # This is what the buff will look like to the player when they DO have the permission listed below.
#      unlocked:
#        name: '&a&lSubstance of the Redmod Graff'
#        material: FEATHER
#        lore:
#        - '&aType » &7Haste'
#        - '&aLength » &760 Seconds'
#        - '&aCost » &7$60'
    # The price of the buff, pulled from Guild Bank.
#      price: 60.0
    # The effects that the guild will get for buying the buff. You should be able to list as many as you want.
    # The way you do it is: EFFECT_TYPE;AMPLIFICATION;LENGTH OF BUFF
    # So, this effect here will give Haste I for 60 seconds.
#      effects:
#      - FAST_DIGGING;0;60
    # The permission required to purchase the buff.
#      permission: example.perm.here
    # Would you like to execute commands on the player that bought the buff for the guild? Supports {player}, {buyer}, {buff_name}.
#      clicker:
#        enabled: false
#        commands:
#        - ''
    # Would you like to execute commands on the guild that bough the buff? Supports {player}, {buyer}, {buff_name}.
#      guild:
#        enabled: false
#        commands:
#        - ''
    buffs: 
    - identifier: '1'
      locked:
        name: '&a&lSubstance of the Redmod Graff'
        material: FEATHER
        lore:
        - '&aType » &7Haste'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lSubstance of the Redmod Graff'
        material: FEATHER
        lore:
        - '&aType » &7Haste'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - FAST_DIGGING;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '2'
      locked:
        name: '&a&lBlessing of the Cheetah'
        material: SUGAR
        lore:
        - '&aType » &7Speed'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lBlessing of the Cheetah'
        material: SUGAR
        lore:
        - '&aType » &7Speed'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - SPEED;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '3'
      locked:
        name: '&a&lScales of the Dragon'
        material: BLAZE_POWDER
        lore:
        - '&aType » &7Fire-Resistance'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lScales of the Dragon'
        material: BLAZE_POWDER
        lore:
        - '&aType » &7Fire-Resistance'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - FIRE_RESISTANCE;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '4'
      locked:
        name: '&a&lEyes of the Lurking Demon'
        material: EYE_OF_ENDER
        lore:
        - '&aType » &7Night-Vision'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lEyes of the Lurking Demon'
        material: EYE_OF_ENDER
        lore:
        - '&aType » &7Night-Vision'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - NIGHT_VISION;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '5'
      locked:
        name: '&a&lFeet of the Ghostly Walker'
        material: DIAMOND_BOOTS
        lore:
        - '&aType » &7Invisibility'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lFeet of the Ghostly Walker'
        material: DIAMOND_BOOTS
        lore:
        - '&aType » &7Invisibility'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - INVISIBILITY;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '6'
      locked:
        name: '&a&lMighty Strength of the Pouncing Lion'
        material: DIAMOND_SWORD
        lore:
        - '&aType » &7Strength'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lMighty Strength of the Pouncing Lion'
        material: DIAMOND_SWORD
        lore:
        - '&aType » &7Strength'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - INCREASE_DAMAGE;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '7'
      locked:
        name: '&a&lBounce of the Quick Witted Rabbit'
        material: DIAMOND_BOOTS
        lore:
        - '&aType » &7Jump'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lBounce of the Quick Witted Rabbit'
        material: DIAMOND_BOOTS
        lore:
        - '&aType » &7Jump'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - JUMP;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '8'
      locked:
        name: '&a&lLungs of the Albino Shark'
        material: BUCKET
        lore:
        - '&aType » &7Water-Breathing'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lLungs of the Albino Shark'
        material: BUCKET
        lore:
        - '&aType » &7Water-Breathing'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - WATER_BREATHING;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''
    - identifier: '9'
      locked:
        name: '&a&lIntegrity of the Mystic Witch'
        material: EMERALD
        lore:
        - '&aType » &7Regeneration'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      unlocked:
        name: '&a&lIntegrity of the Mystic Witch'
        material: EMERALD
        lore:
        - '&aType » &7Regeneration'
        - '&aLength » &760 Seconds'
        - '&aCost » &7$60'
      price: 60.0
      effects:
      - REGENERATION;0;60
      permission: example.perm.here
      clicker:
        enabled: false
        commands:
        - ''
      guild:
        enabled: false
        commands:
        - ''

```


# Config

Example configuration for the config.yml file

```yaml
# Guilds
# Creator: Glare
# Contributors: https://github.com/guilds-plugin/Guilds/graphs/contributors
# Issues: https://github.com/guilds-plugin/Guilds/issues
# Spigot: https://www.spigotmc.org/resources/66176/
# Wiki: https://wiki.glaremasters.me/
# Discord: https://glaremasters.me/discord
settings:
    announcements:
        # This is used for the Guild's Announcement System, which allow me (The Author) to communicate to you guys without updating.
        # The way this works is very simple. If you have "console" set to "true", you will see the announcement when the server starts.
        # If you have "in-game" set to "true", your OPed players will see it the first time they login to the server.
        console: true
        in-game: true
    # Choosing your language for the plugin couldn't be easier! The default language is english.
    # If you speak another language but don't see it here, feel free to submit it via one of the links above to have it added to the plugin.
    # If you try and use a different language than any in the list above, the plugin will not function in a normal manner.
    # As you can see this is currently en-US, and there is a en-US.yml file in the language folder.
    # If I wanted to switch to french, I would use fr-FR as the language instead.
    messagesLanguage: en-US
    # Would you like to check for plugin updates on startup? It's highly suggested you keep this enabled!
    update-check: true
    # What would you like the command aliases for the plugin to be?
    # You can have as many as your want, just separate each with | and NO SPACES.
    plugin-aliases: guild|guilds|g
    # Change this to whatever you change it to above, this will handle the changes within <>
    # Keep in mind you should only set it to ONE thing. Such as guild, town, etc.
    syntax-name: guild
    # Would you like to run vault permission changes async? (Will be less stress on the main thread and prevent lag)
    # Async is used by LuckPerms.
    # Set this to false if you are using PEx.
    # I do suggest you switch to LuckPerms so that you can keep it async, but ultimately the choice is yours.
    run-vault-async: true
storage:
    # What storage method should be used? (MySQL, MariaDB, JSON, SQLite)
    storage-type: json
    # How often (in minutes) do you want all Guild Data to save?
    save-interval: 1
    sql:
        # Define the address for the database. (Doesn't apply to SQLite)
        host: localhost
        # Define the port for the database. (Doesn't apply to SQLite)
        port: '3306'
        # The name of the database to store data in.
        # This must be already created! (Doesn't apply to SQLite)
        database: guilds
        # The prefix for all Guilds tables.
        table-prefix: guilds_
        # Define the credentials for the database. (Doesn't apply to SQLite)
        username: root
        password: ''
        # Sets whether or not to use SSL for the remote SQL database connection (Doesn't apply to SQLite)
        enable-ssl: false
        # These settings change the SQL connection pool.
        # The default settings are optimized for the majority of users.
        # Do NOT change these settings unless you know what you are doing!
        # For those looking to migrate data:
        # IF YOU ARE MIGRATING FROM JSON OR SQLITE TO MYSQL THE SETTINGS MUST BE CONFIGURED EVEN IF THE DATA TYPE IS SET TO JSON OR MYSQL.
        # When migrating to MySQL, it will attempt to use the MySQL backend (grab the login information here) in order to connect to the database.
        # We are not responsible for data loss if you are too lazy to read the warnings.
        # ALWAYS REMEMBER TO BACKUP DATA BEFORE MIGRATING.
        # Lastly, remember to change your storage-type to the type you're migrating to before you reboot.
        pool:
            # Sets the maximum size of the SQL connection pool.
            # This value will determine the maximum number of connections maintained. (Doesn't apply to SQLite)
            maximum-pool-size: 10
            # Sets the minimum number of idle connections that the pool will maintain.
            # For maximum performance keep this value the same as 'maximum-pool-size' (Doesn't apply to SQLite)
            minimum-idle: 10
            # Sets the maximum lifetime of a connection in the pool in milliseconds. (Doesn't apply to SQLite)
            maximum-lifetime: 1800000
            # Sets the maximum number of milliseconds for a connection in the pool before timing out. (Doesn't apply to SQLite)
            connection-timeout: 5000
hooks:
    # Do we want to hook into Essentials-Chat format to handle guild placeholders?
    essentials-chat: false
    # Do we want to hook into WorldGuard to allow claiming land?
    worldguard-claims: false
# Use the following website to get available materials: https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html
# This can work across all MC versions and will attempt to use the proper material based on what version of MC you are using.
guis:
    # What time format should we use in the GUIs?
    # You can use this site to build it https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
    time-format: MMM, d, yy hh:mm aaa
    guild-list:
        # What should the name of the inventory be?
        gui-name: Guild List
        # What should the name of the all the items be in the inventory?
        # Currently supports {player} and {guild}.
        item-name: '&f{player}''s Guild'
        # How should the menu be sorted?
        # LOADED: In the order that the Guilds were loaded on startup
        # TIER: In order from highest tier to lowest tier
        # MEMBERS: In order from most members to least members
        # BALANCE: In order from most in bank to least
        # WINS: In order from most arena wins to least
        # NAME: In order by name
        # AGE: In order from first created to last
        sort: LOADED
        # What item should players click to go to the next page?
        next-page-item: EMPTY_MAP
        # What should the name of this item be?
        next-page-item-name: '&fNext Page'
        # What item should players click to go to the previous page?
        previous-page-item: EMPTY_MAP
        # What should the name of this item be?
        previous-page-item-name: '&fPrevious Page'
        # What should be the default texture url for textures that fail to load in? Refer to the Guild Manage settings to see how to change the texture!
        head-default-url: 7a2df315b43583b1896231b77bae1a507dbd7e43ad86c1cfbe3b2b8ef3430e9e
        # Do we want to try to use skull textures or just ignore them and use the one provided?
        use-default-texture: false
        # You are free to design this to your liking
        # This is just an example of all the available placeholders that you can use for the lore!
        # Note: With v3.6.7 and on, you can now use {guild-tier-name} for the name of the tier.
        # Also, from v3.6.7 and on, {guild-status} will now apply from what you set for the guild-info GUI for the status being public or private.
        # In version 3.5.2.2, {guild-challenge-wins} and {guild-challenge-loses} have been added.
        # In version 3.5.3.3, {creation} was added to display the creation date of the guild
        head-lore: 
        - '&cName&8: &a{guild-name}'
        - '&cPrefix&8: &a{guild-prefix}'
        - '&cMaster&8: &a{guild-master}'
        - '&cStatus&8: &a{guild-status}'
        - '&cTier&8: &a{guild-tier}'
        - '&cBalance&8: &a{guild-balance}'
        - '&cMember Count&8: &a{guild-member-count}'
        - '&cCreation Date&8: &a{creation}'
    # Here you can control what the GUI looks like that allows players to choose which vault to open
    # You can do things like set the name of the gui, the material to use, material name, and lore!
    vault-picker:
        # What do you want the name of the gui to be?
        # Currently supports {name} for the name of the guild.
        name: '&8» &r{name}''s Vaults'
        # How many rows would you like to display?
        rows: 1
        # What do you want the material of the vaults to be?
        item-material: CHEST
        # WHat do you want the name of the vault to be?
        # I recommend keeping this blank so that we can put the vault number in the lore.
        item-name: ' '
        item-lore: 
        - '&8• &7Vault &9#{number}'
        - '&8• &7Status: {status}'
        - ''
        # What do you want to show when a vault is unlocked?
        unlocked: '&9Unlocked'
        # What do you want to show when a vault is locked?
        locked: '&c&mLocked&r'
    vault:
        # What do you want the name of the Vault to be?
        # Note: This requires a restart to change the inventory names.
        name: '&8» &rGuild Vault'
        blacklist:
            # What materials would you like to blacklist from being put into the vaults?
            materials: 
            - ''
            # What custom names of items would you like to blacklist from being put into the vaults?
            names: 
            - ''
            # What custom lore do you want to blacklist from being put into the vaults?
            # Please keep in mind this can be prove to false-positives so please let me know if you have issues.
            # This will currently loop through your lore to check for any strings you have in the list to check.
            # Improvements will be made over time. Thanks for your patience and suppport in advanced.
            lores: 
            - ''
    # Welcome to the Guild Info GUI section of the config.
    # Here you can modify the configuration of what the Guild Info GUI looks like.
    # This can be used by any member of a Guild and shows key information of the Guild.
    # You can see things like the members, the balance, tier, etc.
    guild-info:
        # What would you like the name of the GUI to be?
        # Currently supports {name} for the name of the guild and {prefix} for the prefix of the guild
        name: '&8» &r{name}''s Info'
        # What material do you want the tier button to be?
        tier-material: DIAMOND
        # What do you want the name of the tier button to be?
        tier-name: '&3Guild Tier'
        # What do you want the lore of the tier button to be?
        tier-lore: 
        - '&8• &7Level: &b{tier}'
        # Would you like to display this button?
        tier-display: true
        # What material do you want the bank button to be?
        bank-material: GOLD_INGOT
        # What do you want the name of the bank button to be?
        bank-name: '&6Guild Bank'
        # What do you want the lore of the bank button to be?
        bank-lore: 
        - '&8• &7Balance: &e{current} &7/ &e{max}'
        # Would you like to display this button?
        bank-display: true
        # What material do you want the members button to be?
        members-material: IRON_HELMET
        # What do you want the name of the members button to be?
        members-name: '&5Guild Members'
        # What do you want the lore of the members button to be?
        members-lore: 
        - '&8• &7Members: &d{current} &7/ &d{max}'
        - '&8• &7Online: &d{online} &7/ &d{current}'
        - ''
        - '&7Click to view members!'
        # Would you like to display this button?
        members-display: true
        status-material:
            # What material do you want the status button to be when a guild is public?
            public: EMERALD
            # What material do you want the status button to be when a guild is private?
            private: REDSTONE
        # What do you want the name of the status button to be?
        status-name-item: '&2Guild Status'
        status-name:
            # What do you want the status to say if it's public?
            public: '&aPublic'
            # What do you want the status to say if it's private?
            private: '&cPrivate'
        # What do you want the lore of the status button to be?
        status-lore: 
        - '&8• &7Status: &r{status}'
        # Would you like to display this button?
        status-display: true
        # What material do you want the home button to be?
        home-material: BED
        # What do you want the name of the home button to be?
        home-name: '&cGuild Home'
        # What do you want the lore of the home button to be?
        home-lore: 
        - '&8• &7Home: &f{coords}'
        # Would you like to display this button?
        home-display: true
        # What do you want it to say when a guild doesn't have a home set?
        home-empty: '&fNot Set'
        # Do you want players to be teleported to their guild home when they click this?
        home-teleport: false
        # What material do you want the vault button to be?
        vault-material: CHEST
        # What do you want the name of the home button to be?
        vault-name: '&9Guild Vaults'
        # What do you want the lore of the vault button to be?
        vault-lore: 
        - '&7Click here to open your guild vaults!'
        # Would you like to display this button?
        vault-display: true
        # What material do you want the motd button to be?
        motd-material: SIGN
        # What do you want the name of the motd button to be?
        motd-name: '&6Guild MOTD'
        # What do you want the lore of the motd button to be?
        motd-lore: 
        - '{motd}'
        # Would you like to display this button?
        motd-display: true
    # This part of the config controls what the members gui looks like.
    # You can get to this in game by clicking on the members icon via the guild info gui.
    guild-info-members:
        # How should the menu be sorted?
        # ROLE: In order from highest role to lowest
        # NAME: In order by their username
        # AGE: In order of length in guild
        sort: ROLE
        # What would you like the name of the GUI to be?
        name: '&8» &rMembers of {name}'
        item:
            # What material do you want to use to represent members?
            material: EMPTY_MAP
            # What do you want the name of the item to be?
            name: ' '
            # What do you want the lore of the item to be?
            lore: 
            - '&8• &7Name: &a{name}'
            - '&8• &7Role: &a{role}'
            - '&8• &7Status: {status}'
            - '&8• &7Join Date: &a{join}'
            - '&8• &7Last Login: &a{login}'
            # What do you want to be what shows when a member is online?
            online: '&aOnline'
            # What do you want to be what shows when a member is offline?
            offline: '&cOffline'
guild:
    requirements:
        # With the default RegEx currently set, the minimum length of the prefix is 1 and the maximum is 64.
        # To change this, adjust the number and you can refer to the link below on how to modify RegEx.
        # RegEx (https://en.wikipedia.org/wiki/Regular_expression) used to only allow certain characters (default only allows alphanumeric characters).
        # To turn off the ability to use colors, remove the & from the RegEx.
        # Trying to use symbols such as Chinese ones? Try this Regex: [\u4E00-\u9FA5_a-zA-Z0-9&_\一-龥]{1,6}
        name: '[a-zA-Z0-9&]{1,64}'
        # Similar to the name, just refer above.
        prefix: '[a-zA-Z0-9&]{1,20}'
        # Would you like to include color codes signs (&b &l, etc) in the length check?
        include-color-codes: true
    # Would you like to allow players to make a guild without a prefix?
    disable-prefix: false
    # Would you like player to respawn at their guild home (if they have one) when they die?
    respawn-at-home: false
    blacklist:
        # Do we want to enable the blacklist?
        enabled: true
        # Do we want the blacklist to be case sensitive?
        case-sensitive: true
        # What words would you like to blacklist from being used?
        words: 
        - crap
        - ass
        - stupid
    format:
        # This is the style used when a message sent in guild chat.
        # As of 3.4.7, this now supports {display-name} to show the display name of a player.
        chat: '&7&l[Guild Chat]&r &b[{role}&b]&r &b {player}: {message}'
        # This is the style used when a message is sent to ally chat
        ally-chat: '&7&l[Ally Chat]&r &b[{guild}&b]&r &b {player}: {message}'
        # Similar to the one above, just for the admins spying.
        spy: '&7&l[Guild Spy]&r &b[{guild}&b]&r &b[{role}&b]&r &b {player}: {message}'
        # Would you like to log the guild chat to console?
        log-guild-chat: false
        # Would you like to log the ally chat to console?
        log-ally-chat: false
        # Used for {GUILD_FORMATTED} and %guilds_formatted%
        placeholder-design:
            # The left bracket in the placeholder
            left-bracket: '['
            # The content of the placeholder. Either will be {name} or {prefix}
            content: '{name}'
            # What to show instead of the placeholder if there's no guild
            no-guild: ''
            # The right bracket in the placeholder
            right-bracket: ']'
    damage:
        # Do we want people in the same guild to be able to damage each other?
        guild: false
        # Do we want allies to be able to damage each other?
        ally: false
    # Would you like to send players their guild's motd on login?
    motd-on-login: true
war:
    # How often (in minutes) can a guild be the defender in a war?
    # This is to help prevent abuse from guilds fighting each other to farm rewards.
    # This is defaulted to 1 day.
    defend-cooldown: 1440
    # Would you like to block commands while a player is in the war?
    disable-commands: false
    # How long does a defending guild have to accept a war challenge? (In seconds)
    accept-time: 120
    # What is the min number of players needed on each side for a war to start?
    min-players: 3
    # What is the max number of players allowed on each side for a war?
    max-players: 8
    # How long do players of both sides have to join the war? (In seconds)
    join-time: 60
    # How long should we wait to teleport the players and start the war after everyone joined?
    ready-time: 60
    # How would you like to notify the player about joining the war and the countdowns?
    # Options: [actionbar, title, subtitle, none]
    notify-type: actionbar
    post-challenge-commands:
        # Would you like to enable running commands after a challenge ends? (such as broadcasting)
        enabled: false
        # What commands would you like to run after a challenge ends??
        # Supports the following placeholder:
        # {challenger} - The name of the challenging Guild
        # {defender} - The name of the defending Guild
        # {winner} - The winner of the challenge
        # {loser} - The loser of the challenge
        commands: 
        - ''
    rewards:
        # Would you like to give rewards to the winning guild?
        enabled: false
        # What rewards (commands) would you like to run for the winning Guild?
        # Current supports {player}.
        rewards: 
        - ''
timers:
    cooldowns:
        # How often (in seconds) can a player set their guild home?
        sethome: 60
        # How often (in seconds) can a player go to their guild home?
        home: 60
        # How often (in seconds) can a player request to join a guild?
        request: 60
        # How long should a user have to wait before joining a new guild after leaving one?
        join: 120
    warmups:
        home:
            # Do you want to enable making players stand still before teleporting?
            enabled: false
            # How long should a user have to stand still before teleporting?
            time: 3
cost:
    # How much should it cost to create a guild?
    creation: 0.0
    # How much should it cost to rename a guild? (Leave at 0.0 to disable)
    rename: 0.0
    # How much should it cost to set the cost of the guild home?
    sethome: 0.0
# This section of the config will allow you to handle guild land claiming.
# Remember that the enable / disable for this is the WorldGuard Hook at the TOP of the config.
# There are multiple options when it comes to guild claims. For the time being, all guilds will only get one claim.
claims:
    # This is the number of blocks around the player it will try to create the region.
    # Keep in mind this is the RADIUS, it will go this many blocks in both directions.
    # For example, if you take the default 15, it'll do 30 total as it will go 15 blocks in both directions.
    # This is a CUBOID region, not SPHERE.
    radius: 15
    # Customize the entrance and exit message of joining claims.
    # Supports {prefix} for guild prefix and {guild} for guild name.
    # Also supports color codes!
    enter-message: '&aNow entering &d{guild}''s &aclaim!'
    exit-message: '&aNow leaving &d{guild}''s &aclaim!'
    # Would you like to disable guild claiming in specific worlds?
    disabled-worlds: 
    - ''
    # Would you like to enable claim signs?
    # Format - 
    # First Line: [Guild Claim]
    # Second Line: WorldGuard Region Name
    # Third Line: Price
    claim-signs: false
    # The text to look for on a sign for the guild claims
    claim-sign-text: '[Guild Claim]'
    # Would you like to make it so that claims can only be aquired through the purchasing with signs?
    # This will disable the regular claim commands.
    force-claim-signs: false
tickets:
    # What do you want the name of the upgrade ticket to be?
    name: '&bGuild Upgrade Ticket'
    # What do you want the lore of the ticket to be?
    lore: 
    - '&dRight click this ticket to upgrade your guild tier!'
    # What do you want the material of the ticket to be?
    material: PAPER
codes:
    # How long do you want the default length of guild codes to be?
    length: 7
    # Do you want inactive codes (no uses left) to display on the /guild code list?
    list-inactive-codes: true
    # What is the max amount of active codes you would like to allow per guild?
    amount: 10

```


# Roles

Example configuration for the roles.yml file

```yaml
roles:
    0:
        name: GuildMaster
        permission-node: guilds.roles.master
        permissions:
            activate-buff: true
            add-ally: true
            ally-chat: true
            change-home: true
            change-prefix: true
            rename: true
            chat: true
            demote: true
            deposit-money: true
            invite: true
            kick: true
            open-vault: true
            promote: true
            remove-ally: true
            remove-guild: true
            toggle-guild: true
            transfer-guild: true
            upgrade-guild: true
            withdraw-money: true
            claim-land: true
            unclaim-land: true
            destroy: true
            place: true
            interact: true
            create-code: true
            delete-code: true
            see-code-redeemers: true
            modify-motd: true
            initiate-war: true
    1:
        name: Officer
        permission-node: guilds.roles.officer
        permissions:
            activate-buff: false
            add-ally: true
            ally-chat: true
            change-home: true
            change-prefix: false
            rename: false
            chat: true
            demote: true
            deposit-money: true
            invite: true
            kick: true
            open-vault: true
            promote: true
            remove-ally: true
            remove-guild: false
            toggle-guild: false
            transfer-guild: false
            upgrade-guild: false
            withdraw-money: true
            claim-land: false
            unclaim-land: false
            destroy: true
            place: true
            interact: true
            create-code: true
            delete-code: true
            see-code-redeemers: true
            modify-motd: false
            initiate-war: true
    2:
        name: Veteran
        permission-node: guilds.roles.veteran
        permissions:
            activate-buff: false
            add-ally: false
            ally-chat: true
            change-home: false
            change-prefix: false
            rename: false
            chat: true
            demote: false
            deposit-money: true
            invite: true
            kick: false
            open-vault: true
            promote: false
            remove-ally: false
            remove-guild: false
            toggle-guild: false
            transfer-guild: false
            upgrade-guild: false
            withdraw-money: false
            claim-land: false
            unclaim-land: false
            destroy: true
            place: true
            interact: true
            create-code: false
            delete-code: false
            see-code-redeemers: false
            modify-motd: false
            initiate-war: false
    3:
        name: Member
        permission-node: guilds.roles.member
        permissions:
            activate-buff: false
            add-ally: false
            ally-chat: true
            change-home: false
            change-prefix: false
            rename: false
            chat: true
            demote: false
            deposit-money: true
            invite: false
            kick: false
            open-vault: true
            promote: false
            remove-ally: false
            remove-guild: false
            toggle-guild: false
            transfer-guild: false
            upgrade-guild: false
            withdraw-money: false
            claim-land: false
            unclaim-land: false
            destroy: true
            place: true
            interact: true
            create-code: false
            delete-code: false
            see-code-redeemers: false
            modify-motd: false
            initiate-war: false

```


# Tiers

Example configuration for the tiers.yml file

```yaml
# This section of the config will talk about various parts of upgrading a guild and allow you to choose how it works.
# For "mob-xp-multiplier" the default is 1, meaning that it will drop the normal amount of XP for non-upgraded guilds.
# DO NOT set it to 0, that will either throw errors or cause mobs to not drop XP.
# Keep in mind for the damage-multiplier, it applies to players also, so by default it's set to normal for every tier.
tiers:
    # Should permissions carry over between tiers?
    carry-over: true
    list:
        1:
            # Which level tier is this? 1 is the default.
            level: 1
            # What is the name of this tier?
            name: Bronze
            # How much is this tier? (If first tier, keep as same price as cost creation)
            cost: 0.0
            # How many members can be in a guild of this tier?
            max-members: 15
            # How many Vaults would you like the Guild to be able to use?
            vault-amount: 1
            # How much extra XP should drop from mobs?
            mob-xp-multiplier: 1.0
            # How much extra damage should be done?
            damage-multiplier: 1.0
            # How much can this tier hold in the bank?
            max-bank-balance: 10000.0
            # How many members should be in a guild for it to be able to rankup?
            members-to-rankup: 0
            # What is the max amount of allies a guild with this tier can have?
            max-allies: 5
            # Would you like this tier to be able to open the buff GUI?
            use-buffs: true
            # If you wish to give this tier extra permissions, put them here.
            permissions: 
            - example.perm.here
        2:
            # Which level tier is this? 1 is the default.
            level: 2
            # What is the name of this tier?
            name: Silver
            # How much is this tier? (If first tier, keep as same price as cost creation)
            cost: 200.0
            # How many members can be in a guild of this tier?
            max-members: 30
            # How many Vaults would you like the Guild to be able to use?
            vault-amount: 2
            # How much extra XP should drop from mobs?
            mob-xp-multiplier: 2.0
            # How much extra damage should be done?
            damage-multiplier: 1.0
            # How much can this tier hold in the bank?
            max-bank-balance: 20000.0
            # How many members should be in a guild for it to be able to rankup?
            members-to-rankup: 0
            # What is the max amount of allies a guild with this tier can have?
            max-allies: 10
            # Would you like this tier to be able to open the buff GUI?
            use-buffs: true
            # If you wish to give this tier extra permissions, put them here.
            permissions: 
            - example.perm.here
        3:
            # Which level tier is this? 1 is the default.
            level: 3
            # What is the name of this tier?
            name: Gold
            # How much is this tier? (If first tier, keep as same price as cost creation)
            cost: 300.0
            # How many members can be in a guild of this tier?
            max-members: 50
            # How many Vaults would you like the Guild to be able to use?
            vault-amount: 3
            # How much extra XP should drop from mobs?
            mob-xp-multiplier: 3.0
            # How much extra damage should be done?
            damage-multiplier: 1.0
            # How much can this tier hold in the bank?
            max-bank-balance: 30000.0
            # How many members should be in a guild for it to be able to rankup?
            members-to-rankup: 0
            # What is the max amount of allies a guild with this tier can have?
            max-allies: 15
            # Would you like this tier to be able to open the buff GUI?
            use-buffs: true
            # If you wish to give this tier extra permissions, put them here.
            permissions: 
            - example.perm.here

```


# Commands & Permissions

Overview of all the commands in the plugin and an explanation of what they do.

Understanding how the commands work in the project is super simple. All you have to do is type `/guilds` and you will be presented with a very nice-looking help menu!

![](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-Ljvb1saMgD8bceF8vll%2F-Lrz69CpJe5AnBwA0-lj%2F-Lrz6HlHLztXvL5sxc-5%2Fjavaw_2019-10_24-13-51-48.png?alt=media\&token=b117dfcd-73a2-4aa3-9582-295bce3aeb51)

### Group Perms <a href="#group-perms" id="group-perms"></a>

To easily give a player / group access to all the correct commands, you can give the following permissions:

**Member:** guilds.group.member\
**Admin:** guilds.group.admin

### ​Aliases <a href="#aliases" id="aliases"></a>

Since Guilds is such a big project, we knew that it can get repetitive typing out full commands each time so we have made the follow aliases work so you don't have to type everything out each time. Use whichever you want! You can configure this in the config!

## ​Action Commands <a href="#action-commands" id="action-commands"></a>

Action commands control the user's choice to proceed with some of the commands in the plugin. We know that some people get curious when playing with commands and we've designed the commands that cause bigger changes to ask for a confirmation.

`/guild cancel`\
**Permission**: guilds.command.cancel\
If a user has an active action, it will cancel it and not proceed further with what they were trying to do.

`/guild confirm`\
**Permission**: guilds.command.confirm\
If a user has an active action, it will confirm the action and continue with what they were attempting to do.

## ​Admin Commands <a href="#admin-commands" id="admin-commands"></a>

Admin commands are basically self-understandable. They give you the power over how the plugin is used and can do many things to modify how the plugin works.

`/guild admin addplayer <player> <guild>`\
**Permission**: guilds.command.admin\
Allows you to put a player into a guild by force.

`/guild admin bank balance <guild>`\
**Permission**: guilds.command.admin\
Admin command to view a guild's bank balance.

`/guild admin bank deposit <guild> <amount>`\
**Permission**: guilds.command.admin\
Admin command to put money into a guild's ban.

`/guild admin bank withdraw <guild> <amount>`\
**Permission**: guilds.command.admin\
Admin command to put money into a guild's ban.

`/guild admin delhome <guild>`\
**Permission**: guilds.command.admin\
Admin command to delete the home of a guild.

`/guild admin give <player> <amount>`\
**Permission**: guilds.command.admin\
Allows you to give upgrade tickets to players.

`/guild admin home <guild>`\
**Permission**: guilds.command.admin\
Admin command to teleport to the home of a guild.\
\
`/guild admin motd <guild>`\
**Permission**: guilds.command.admin\
Allows you to view the MOTD of a guild.

`/guild admin motd remove <guild>`\
**Permission**: guilds.command.admin\
Allows you to remove the MOTD of a guild.

`/guild admin motd set <guild> <motd>`\
**Permission**: guilds.command.admin\
Allows you to set the MOTD of a guild

`/guild admin prefix <guild> <prefix>`\
**Permission**: guilds.command.admin\
Allows you to change the prefix of a guild by force.

`/guild admin remove <guild>`\
**Permission**: guilds.command.admin\
Allows you to remove a guild as a whole by force.

`/guild admin removeplayer <player>`\
**Permission**: guilds.command.admin\
Allows you to remove a player from their guild by force.

`/guild admin rename <guild> <new name>`\
**Permission**: guilds.command.admin\
Allows you change the current name of a guild by force.\
\
`/guild admin score resetall`\
**Permission:** guilds.command.admin\
Allows you to reset the score of all guilds\
\
`/guild admin score setwins <guild> <amount>`\
**Permission:** guilds.command.admin\
Allows you to set the wins of a guild\
\
`/guild admin score setloses <guild> <amount>`\
**Permission:** guilds.command.admin\
Allows you to set the loses of a guild

`/guild admin sethome`\
**Permission**: guilds.command.admin\
Admin command to set the home of a guild.

`/guild admin spy`\
**Permission**: guilds.chat.spy\
Toggles the ability to see all guild chat.

`/guild admin status <guild>`\
**Permission**: guilds.command.admin\
Toggle the status of a guild by force.

`/guild admin transfer <guild> <new master>`\
**Permission:** guilds.command.admin\
Transfer a guild to another member by force

`/guild admin upgrade <guild>`\
**Permission**: guilds.command.admin\
Force upgrade a guild's tier.

`/guild admin vault <guild>`\
**Permission**: guilds.command.admin\
Open any guild's vault GUI

`/guild reload`\
**Permission**: guilds.command.admin\
Reloads the configuration files.

## ​Ally Commands <a href="#ally-commands" id="ally-commands"></a>

The ally commands are a set of commands that let guild members control different actions such as listing their current allies or adding and removing them!

`/guild ally accept <guild>`\
**Permission**: guilds.command.ally.accept\
This command allows you to accept an ally invite from another guild if there is one currently pending!

`/guild ally add <guild>`\
**Permission**: guilds.command.ally.add\
This command allows you to send an ally request to another guild!

`/guild ally decline <guild>`\
**Permission**: guilds.command.ally.decline\
This command allows you to decline and incoming ally invite from another guild!

`/guild ally list`\
**Permission**: guilds.command.ally.list\
This command allows you to list all the allies of your guild!

`/guild ally remove <guild>`\
**Permission**: guilds.command.ally.remove\
This command allows you to remove any of your current allies!

## Arena Commands <a href="#arena-commands" id="arena-commands"></a>

`/guild arena set challenger <arena>`\
**Permission**: guilds.command.admin\
Sets challenger side for an arena

`/guild arena create <name>`\
**Permission**: guilds.command.admin\
Create an arena

`/guild arena set defender <arena>`\
**Permission**: guilds.command.admin\
Sets defender side for an arena

`/guild arena delete <arena>`\
**Permission**: guilds.command.admin\
Delete an arena

`/guild arena list`\
**Permission**: guilds.command.admin\
Lists all arenas on the server

`/guild arena tp <arena> <side>`\
**Permission**: guilds.command.admin\
Teleport to specific side of an arena

## ​Bank Commands <a href="#bank-commands" id="bank-commands"></a>

One of the cool features about this plugin is that it allows each guild to have a centralized bank that all players in a guild can work together to grow!

`/guild bank balance`\
**Permission**: guilds.command.bank.balance\
Allows you to check the current balance of your guild bank!

`/guild bank deposit <amount>`\
**Permission**: guilds.command.bank.deposit\
Allows you to put money from your balance into your guild bank!

`/guild bank withdraw <amount>`\
**Permission**: guilds.command.bank.withdraw\
Allows you to take money from your guild bank and put it back into your personal balance!

## ​Claim Commands <a href="#claim-commands" id="claim-commands"></a>

Another cool feature of this plugin is the ability to make claims! This is ultilized through the WorldGuard Hook and allows players to "claim" land for their guild members to use.

`/guild claim`\
**Permission**: guilds.command.claim\
Create a guild claim surrounding you!

`/guild unclaim`\
**Permission**: guilds.command.unclaim\
Get rid of your current guild claim!

## ​Code Commands <a href="#code-commands" id="code-commands"></a>

This feature is actually a new one at the time of writing this wiki. The idea came to me when I realized I wanted to allow a group of my friends to join my guild but at the time I didn't know all their usernames. This feature allows you to create an invite code with the option of one-time-usage or multiple-uses and you can give it to anyone, then they can use that code to join the guild at any time!

`/guild code create [uses]`\
**Permission**: guilds.command.code.create\
Create an invite code for your guild that can be used by anyone!

`/guild code delete <code>`\
**Permission**: guilds.command.code.delete\
Remove an invite code from your guild

`/guild code info <code>`\
**Permission**: guilds.command.code.info\
Allows you to retrieve specific information about a guild code!

`/guild code list`\
**Permission**: guilds.command.code.list\
Allows you to list all your current guild codes!

`/guild code redeem <code>`\
**Permission**: guilds.command.code.redeem\
Allows you to redeem an invite code!

## Console Commands <a href="#console-commands" id="console-commands"></a>

These are commands that are only to be ran from console because they do important operations that typical players shouldn't be doing.

`/guild console update-languages`\
**Permission**: guilds.command.admin\
Update language files for the plugin

`/guild console backup`\
**Permission**: guilds.command.admin\
Create a backup of all plugin data

`/guild console migrate <type>`\
**Permission:** guilds.command.admin\
Migrate all the plugin data from one type of storage to another

`/guild console unclaim-all`\
**Permission:** guilds.command.admin\
Remove all claim data from the plugin

## ​GUI Commands <a href="#gui-commands" id="gui-commands"></a>

`/guild buff`\
**Permission**: guilds.command.buff\
Opens the guild buff GUI.

`/guild list`\
**Permission**: guilds.command.list\
Opens the guild list GUI.

`/guild members`\
**Permission**: guilds.command.members\
Opens the member list GUI.

`/guild vault`\
**Permission**: guilds.command.vault\
Opens a guild vault GUI.

`/guild info`\
**Permission**: guilds.command.info\
Opens up the guild info GUI.

## ​Homes Commands <a href="#homes-commands" id="homes-commands"></a>

`/guild delhome`\
**Permission**: guilds.command.delhome\
Delete your guild home.

`/guild home`\
**Permission**: guilds.command.home\
Teleport to your guild home.

`/guild sethome`\
**Permission**: guilds.command.sethome\
Set your guild home to your current location.

## ​Management Commands <a href="#management-commands" id="management-commands"></a>

`/guild create <name> [prefix]`\
**Permission**: guilds.command.create\
Create a new guild!

`/guild delete`\
**Permission**: guilds.command.delete\
Deletes your current guild.

`/guild kick <player>`\
**Permission**: guilds.command.boot\
Kicks a player from your guild.

`/guild prefix <prefix>`\
**Permission**: guilds.command.prefix\
Set a new prefix for your guild.

`/guild rename <name>`\
**Permission**: guilds.command.rename\
Set a new name for your guild.

`/guild status`\
**Permission**: guilds.command.status\
Toggles the status of your guild.

`/guild transfer <player>`\
**Permission**: guilds.command.transfer\
Transfer your guild to another person.

`/guild upgrade`\
**Permission**: guilds.command.upgrade\
Upgrade your guild's tier.

## ​Member Commands <a href="#member-commands" id="member-commands"></a>

Commands handled by members of the server / guild.

`/guild accept <name>`\
**Permission**: guilds.command.accept\
Accepted a guild invite from a guild.

`/guild check`\
**Permission**: guilds.command.check\
Checks to see if a user has any pending guild invites.

`/ guild decline <name>`\
**Permission**: guilds.command.decline\
Declines a pending guild invite from a guild.

`/guild demote <player>`\
**Permission**: guilds.command.demote\
Demote a player in your guild.

`/guild invite <player>`\
**Permission**: guilds.command.invite\
Invite a player to your guild.

`/guild language <language>`\
**Permission**: guilds.command.language\
Set the plugin language to your choosing!

`/guild leave`\
**Permission**: guilds.command.leave\
Leave your current guild.

`/guild promote <player>`\
**Permission**: guilds.command.promote\
Promote a player in your guild.

## ​MOTD Commands <a href="#motd-commands" id="motd-commands"></a>

Commands that manage a guild's MOTD.

`/guild motd`\
**Permission**: guilds.command.motd\
View your guild's MOTD.

`/guild motd set <motd>`\
**Permission**: guilds.command.motd.modify\
Set the MOTD of your guild.

`/guild motd remove`\
**Permission**: guilds.command.motd.modify\
Remove the MOTD of your guild.

## ​Misc Commands <a href="#misc-commands" id="misc-commands"></a>

Random commands that haven't been categorized yet.

`/guild chat`\
**Permission**: guilds.command.chat\
Toggles the guild chat.

`/guild request <guild>`\
**Permission**: guilds.command.request\
Send a request to join a guild.

## War Commands <a href="#war-commands" id="war-commands"></a>

`/guild war accept`\
**Permission**: guilds.command.war.accept\
Accept a war request

`/guild war challenge <guild>`\
**Permission**: guilds.command.war.challenge\
Challenge another guild to a war

`/guild war deny`\
**Permission**: guilds.command.war.deny\
Deny a war request

`/guild war join`\
**Permission**: guilds.command.war.join\
Join a guild war


# Placeholders

Guild's placeholders

**Guilds** provides placeholders in various forms to support different APIs.

### [PlaceholderAPI](https://placeholderapi.com), [MVdWPlaceholderAPI](https://www.spigotmc.org/resources/11182/), and [EssentialsXChat](https://www.spigotmc.org/resources/9089/)

**Note:** For MVdWPlaceholderAPI, in order to ensure they all stay up-to-date with each other, we just hook into regular PlaceholderAPI. This means that PlaceholderAPI is **also** required.

**EssentialsX Example:**\
(Make sure you enabled the hook in the config and reboot for this to work)

```yaml
format: '<{GUILD} {DISPLAYNAME}> {MESSAGE}'
```

### Leaderboard Placeholders

<table><thead><tr><th width="319">PlaceholderAPI</th><th>Description</th></tr></thead><tbody><tr><td>%guilds_top_wins_name_#%</td><td>Name of guild with wins in # place</td></tr><tr><td>%guilds_top_wins_amount_#%</td><td>Amount of wins the guild in # place has</td></tr><tr><td>%guilds_top_losses_name_#%</td><td>Name of guild with losses in # place</td></tr><tr><td>%guilds_top_losses_amount_#%</td><td>Amount of losses the guild in # place has</td></tr><tr><td>%guilds_top_wlr_name_#%</td><td>Name of guild with win/loss ratio in # place</td></tr><tr><td>%guilds_top_wlr_amount_#%</td><td>The win/loss ratio of the guild in # place</td></tr></tbody></table>

### Regular Placeholders

| PlaceholderAPI             | MVdWPlaceholderAPI                         | EssentialsXChat           |
| -------------------------- | ------------------------------------------ | ------------------------- |
| %guilds\_name%             | {placeholderapi\_guilds\_name}             | {GUILD}                   |
| %guilds\_master%           | {placeholderapi\_guilds\_master}           | {GUILD\_MASTER}           |
| %guilds\_member\_count%    | {placeholderapi\_guilds\_member\_count}    | {GUILD\_MEMBER\_COUNT}    |
| %guilds\_prefix%           | {placeholderapi\_guilds\_prefix}           | {GUILD\_PREFIX}           |
| %guilds\_members\_online%  | {placeholderapi\_guilds\_members\_online}  | {GUILD\_MEMBERS\_ONLINE}  |
| %guilds\_status%           | {placeholderapi\_guilds\_status}           | {GUILD\_STATUS}           |
| %guilds\_role%             | {placeholderapi\_guilds\_role}             | {GUILD\_ROLE}             |
| %guilds\_tier%             | {placeholderapi\_guilds\_tier}             |                           |
| %guilds\_balance%          | {placeholderapi\_guilds\_balance}          |                           |
| %guilds\_balance\_raw%     |                                            |                           |
| %guilds\_tier\_name%       | {placeholderapi\_guilds\_tier\_name}       |                           |
| %guilds\_role\_node%       | {placeholderapi\_guilds\_role\_node}       |                           |
| %guilds\_id%               | {placeholderapi\_guilds\_id}               |                           |
| %guilds\_code\_amount%     | {placeholderapi\_guilds\_code\_amount}     |                           |
| %guilds\_max\_members%     | {placeholderapi\_guilds\_max\_members}     |                           |
| %guilds\_max\_balance%     | {placeholderapi\_guilds\_max\_blanace}     |                           |
| %guilds\_formatted%        | {placeholderapi\_guilds\_formatted}        | {GUILD\_FORMATTED}        |
| %guilds\_challenge\_wins%  | {placeholderapi\_guilds\_challenge\_wins}  | {GUILD\_CHALLENGE\_WINS}  |
| %guilds\_challenge\_loses% | {placeholderapi\_guilds\_challenge\_loses} | {GUILD\_CHALLENGE\_LOSES} |
| %guilds\_motd%             | {placeholderapi\_guilds\_motd}             |                           |


# Developer API

## Build Tool Stuff <a href="#hooking-into-the-api" id="hooking-into-the-api"></a>

<figure><img src="https://img.shields.io/nexus/r/me.glaremasters/guilds?nexusVersion=3&#x26;server=https%3A%2F%2Frepo.glaremasters.me" alt=""><figcaption><p>Sonatype Nexus (Releases)</p></figcaption></figure>

{% tabs %}
{% tab title="Maven" %}

```markup
        <repository>
            <id>glares-repo</id>
            <url>https://repo.glaremasters.me/repository/public/</url>
        </repository>
        
        <dependency>
            <groupId>me.glaremasters</groupId>
            <artifactId>guilds</artifactId>
            <version>VERSION</version>
        </dependency>
```

{% endtab %}

{% tab title="Gradle" %}

```groovy
repositories {
    maven { 
        url = 'https://repo.glaremasters.me/repository/public/' 
    }
}

dependencies {
    compileOnly 'me.glaremasters:guilds:VERSION'
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
repositories {    
    maven("https://repo.glaremasters.me/repository/public/")
}

dependencies {
    compileOnly("me.glaremasters:guilds:versions")
}
```

{% endtab %}
{% endtabs %}

## Hooking Into the API <a href="#hooking-into-the-api" id="hooking-into-the-api"></a>

Obtaining the instance of the API is pretty simple by using the singleton that provides static access to the class. You can obtain the instance of the API through the main `Guilds` class.

```java
GuildsAPI api = Guilds.getApi();
```

## Using the API <a href="#using-the-api" id="using-the-api"></a>

The API can be used for obtaining a bunch of information from the plugin. You can browse over the following section to see what all is provided.

### Getting a Guild object <a href="#getting-a-guild-object" id="getting-a-guild-object"></a>

We provide a few ways to obtain a Guild object, so feel free to use what is easiest for you.

{% tabs %}
{% tab title="OfflinePlayer" %}

```kotlin
    /**
     *
     * Get the guild of a player
     * @param player the players you're getting the guild of
     * @return the guild that the player is in
     */
    fun getGuild(player: OfflinePlayer): Guild? {
        return guildHandler.getGuild(player)
    }
```

{% endtab %}

{% tab title="Guild UUID" %}

```kotlin
    /**
     * Get a guild by it's uuid
     * @param uuid uuid of the guild
     * @return the guild the uuid belong to
     */
    fun getGuild(uuid: UUID): Guild? {
        return guildHandler.getGuild(uuid)
    }
```

{% endtab %}

{% tab title="Guild Name" %}

```kotlin
    /**
     * Get a guild by it's name
     * @param name the name of the guild
     * @return the guild object
     */
    fun getGuild(name: String): Guild? {
        return guildHandler.getGuild(name)
    }
```

{% endtab %}

{% tab title="Player UUID" %}

```kotlin
    /**
     * Get a guild by a player's uuid
     *
     * @param uuid the uuid of the player
     * @return the guild of the player or null
     */
    fun getGuildByPlayerId(uuid: UUID): Guild? {
        return guildHandler.getGuildByPlayerId(uuid)
    }
```

{% endtab %}
{% endtabs %}

### Getting a GuildMember object <a href="#getting-a-guild-vault" id="getting-a-guild-vault"></a>

```kotlin
    /**
     * Get a guild member by their uuid
     *
     * @param uuid the uuid of the player
     * @return the guild member instance or null
     */
    fun getGuildMember(uuid: UUID): GuildMember? {
        return guildHandler.getGuildMember(uuid)
    }
```

### Getting a Guild Vault <a href="#getting-a-guild-vault" id="getting-a-guild-vault"></a>

```kotlin
   /**
     * Get a copy of one of a guild's vaults
     * @param guild the guild to get the vault of
     * @param vaultNumber which vault to get
     * @return guild vault
     */
    fun getGuildVault(guild: Guild, vaultNumber: Int): Inventory {
        return guildHandler.getGuildVault(guild, vaultNumber)
    }
```

### Getting a GuildRole <a href="#getting-a-guildrole" id="getting-a-guildrole"></a>

```kotlin
    /**
     * Get the role of a player
     * @param player role
     * @return the role of a player
     */
    fun getGuildRole(player: Player): GuildRole? {
        return getGuild(player)?.getMember(player.uniqueId)?.role
    }
```

### Getting the GuildHandler <a href="#getting-the-guildhandler" id="getting-the-guildhandler"></a>

The GuildHandler will give you access to anything you might need in the plugin. Please use caution with this method as the content it lets you access to can break the plugin if you use it incorrectly.

```java
    /**
     * Get a copy of the guild handler
     * @return guild handler
     */
    public GuildHandler getGuildHandler() {
        return guildHandler;
    }
```

## Custom Events <a href="#custom-events" id="custom-events"></a>

In the plugin we offer a bunch of custom events that you can listen to and modify as you see fit.

### Base GuildEvent <a href="#base-guildevent" id="base-guildevent"></a>

```java
    /**
     * Base guild event
     * @param player player in event
     * @param guild guild in the event
     */
    public GuildEvent(Player player, Guild guild) {
        super(player);
        this.guild = guild;
    }
```

### GuildAddAllyEvent <a href="#guildaddallyevent" id="guildaddallyevent"></a>

```java
    /**
     * This event takes place when two guilds ally each other
     * @param player player who accepted
     * @param guild guild one
     * @param ally guild two
     */
    public GuildAddAllyEvent(Player player, Guild guild, Guild ally) {
        super(player, guild);
        this.ally = ally;
    }
```

### GuildBuffEvent <a href="#guildcreateevent" id="guildcreateevent"></a>

```java
    /**
     * Called when a guild purchases a buff
     * @param player the player purchasing the buff
     * @param guild the guild the player is in
     * @param buff the buff being purchased
     */
    public GuildBuffEvent(Player player, Guild guild, GuildBuff buff) {
        super(player, guild);
        this.buff = buff;
    }
```

### GuildCreateEvent <a href="#guildcreateevent" id="guildcreateevent"></a>

```java
    /**
     * Called when people create a guild
     * @param player player creating the guild
     * @param guild the guild being created
     */
    public GuildCreateEvent(Player player, Guild guild) {
        super(player, guild);
    }
```

### GuildDepositMoneyEvent <a href="#guilddepositmoneyevent" id="guilddepositmoneyevent"></a>

```java
    /**
     * Base guild event
     *  @param player player in event
     * @param guild  guild in the event
     * @param amount the amount to deposit
     */
    public GuildDepositMoneyEvent(Player player, Guild guild, double amount) {
        super(player, guild);
        this.amount = amount;
    }
```

### GuildInviteEvent <a href="#guildinviteevent" id="guildinviteevent"></a>

```java
    /**
     * Called when a player gets invited to a guild
     * @param player the player inviting other to guild
     * @param guild the guild player will be joining
     * @param invitedPlayer the player being invited
     */
    public GuildInviteEvent(Player player, Guild guild, Player invitedPlayer) {
        super(player, guild);
        this.invitedPlayer = invitedPlayer;
    }
```

### GuildJoinEvent <a href="#guildjoinevent" id="guildjoinevent"></a>

```java
    /**
     * Called when a player joins a guild
     * @param player the player joining a guild
     * @param guild the guild the player will be joining
     */
    public GuildJoinEvent(Player player, Guild guild) {
        super(player, guild);
    }
```

### GuildLeaveEvent <a href="#guildleaveevent" id="guildleaveevent"></a>

```java
    /**
     * Called a when a player leaves the guild
     * @param player the player leaving the guild
     * @param guild the guild the player was leaving
     */
    public GuildLeaveEvent(Player player, Guild guild) {
        super(player, guild);
    }
```

### GuildKickEvent

```java
/**
* Called when a player is kicked from the guild
* @param player the player executing the event
* @param kicked the player being kicked from the guild
* @param cause the cause for being kicked
*/
class GuildKickEvent(player: Player, guild: Guild, val kicked: OfflinePlayer, val cause: Cause) : GuildEvent(player, guild) {

    enum class Cause {
        PLAYER_KICKED, ADMIN_KICKED
    }
}
```

### GuildPrefixEvent <a href="#guildprefixevent" id="guildprefixevent"></a>

```java
    private String prefix;

    /**
     * Base guild event
     *  @param player player in event
     * @param guild  guild in the event
     * @param prefix
     */
    public GuildPrefixEvent(Player player, Guild guild, String prefix) {
        super(player, guild);
        this.prefix = prefix;
    }

    public String getPrefix() {
        return prefix;
    }
```

### GuildRemoveAllyEvent <a href="#guildremoveallyevent" id="guildremoveallyevent"></a>

```java
    /**
     * Called when a guild removes an ally
     * @param player the player calling the removal
     * @param guild the guild calling the removal
     * @param ally the guild being removed
     */
    public GuildRemoveAllyEvent(Player player, Guild guild, Guild ally) {
        super(player, guild);
        this.ally = ally;
    }
```

### GuildRemoveEvent <a href="#guildremoveevent" id="guildremoveevent"></a>

```java
    private String name;
    
    /**
     * Called when a guild is removed
     * @param player the player removing the guild
     * @param guild the guild getting removed
     * @param cause the reason for the guild being removed
     */
    public GuildRemoveEvent(Player player, Guild guild, Cause cause) {
        super(player, guild);
        this.cause = cause;
    }

    public enum Cause {
        MASTER_LEFT,
        PLAYER_DELETED,
        ADMIN_DELETED
    }
```

### GuildRenameEvent <a href="#guildrenameevent" id="guildrenameevent"></a>

```java
    /**
     * @param player player in event
     * @param guild  guild in the event
     */
     public GuildRenameEvent(Player player, Guild guild, String newName) {
        super(player, guild);
        this.name = newName;
    }

    public String getName() {
        return name;
    }
```

### GuildSetHomeEvent <a href="#guildtransferevent" id="guildtransferevent"></a>

```java
    /**
     * Called when a guild sets their home
     * @param player the player setting the home
     * @param guild the guild the player is in
     * @param location the location the home is being set at
     */
    public GuildSetHomeEvent(Player player, Guild guild, Location location) {
        super(player, guild);
        this.location = location;
    }
```

### GuildTransferEvent <a href="#guildtransferevent" id="guildtransferevent"></a>

```java
private Player newMaster;

    /**
     * Base guild event
     *  @param player player in event
     * @param guild  guild in the event
     * @param newMaster
     */
    public GuildTransferEvent(Player player, Guild guild, Player newMaster) {
        super(player, guild);
        this.newMaster = newMaster;
    }

    public Player getNewMaster() {
        return newMaster;
    }
```

### GuildWithdrawMoneyEvent <a href="#guildwithdrawmoneyevent" id="guildwithdrawmoneyevent"></a>

```java
    /**
     * @param player player in event
     * @param guild  guild in the event
     * @param amount the amount to withdraw
     */
    public GuildWithdrawMoneyEvent(Player player, Guild guild, double amount) {
        super(player, guild);
        this.amount = amount;
    }a
```

### GuildUpgradeEvent

```java
    /**
     * Called when a guild upgrades their tier
     * @param player the player upgrading the tier
     * @param guild the guild the player is in
     * @param tier the new guild tier for the guild
     */
    public GuildUpgradeEvent(Player player, Guild guild, GuildTier tier) {
        super(player, guild);
        this.tier = tier;
    }
```

### GuildWarAcceptEvent

```kotlin
/**
 * Called when a guild war has been accepted
 * @param player the player that accepted the war challenge
 * @param challenger the challenging guild for the war
 * @param defender the defending guild for the war
 */
class GuildWarAcceptEvent(player: Player, val challenger: Guild, val defender: Guild) : GuildEvent(player, defender)
```

### GuildWarChallengeEvent

```kotlin
/**
 * Called when a guild war challenge has been sent from one guild to another
 * @param player the player that sent the war challenge
 * @param challenger the challenging guild for the war
 * @param defender the defending guild for the war
 */
class GuildWarChallengeEvent(player: Player, val challenger: Guild, val defender: Guild) : GuildEvent(player, challenger)
```

### GuildWarDeclineEvent

```kotlin
/**
 * Called when a guild war has been declined
 * @param player the player that declined the challenge
 * @param challenger the challenging guild for the war
 * @param defender the defending guild for the war
 */
class GuildWarDeclineEvent(player: Player, val challenger: Guild, val defender: Guild) : GuildEvent(player, defender)
```

### GuildWarEndEvent

```kotlin
/**
 * Called when a guild war has ended
 * @param challenger the challenging guild for the war
 * @param defender the defending guild for the war
 * @param winner the winner of the guild war
 */
class GuildWarEndEvent(val challenger: Guild, val defender: Guild, val winner: Guild) : Event() {

    override fun getHandlers(): HandlerList {
        return handlerList
    }

    companion object {
        val handlerList = HandlerList()
    }
}

```

### GuildWarStartEvent

```kotlin
/**
 * Called when a guild war has started
 * @param challenger the challenging guild for the war
 * @param defender the defending guild for the war
 */
class GuildWarStartEvent(val challenger: Guild, val defender: Guild) : Event() {

    override fun getHandlers(): HandlerList {
        return handlerList
    }

    companion object {
        val handlerList = HandlerList()
    }
}

```


# VoteParty

Give rewards to all online players when the server gets a certain amount of votes! 1.8+

![](/files/-LxgxIi2yJMj5w3JFCSs)

## Description

**VoteParty** was designed to allow you to reward all online players with customizable rewards when your servers gets to a certain number of votes using **VoteParty**, encouraging your community to get involved. **VoteParty** contains a simple but very effective way to generate a random, but very customizable reward system based on chance.

## Features

* Give players rewards for voting
* Quick and easy to setup
* Encourages community involvement
* Vote Reminders
* Highly customizable
* [PlaceholderAPI](https://placeholderapi.com) support
* [NuVotifier](https://www.spigotmc.org/resources/13449/) support (backend & proxy)

## Dependencies

* [PlaceholderAPI](https://placeholderapi.com)
* [NuVotifier](https://www.spigotmc.org/resources/13449/) (soft)

## Translations

In **VoteParty**, we strive to support as many languages we can in order to support more people! Currently we only support Dutch, English, and French. If you speak a language besides this fluently and are interested in translating, please join our [discord](https://helpch.at/discord) and let us know and we can give you information on how to do that!

## Setup

1. **Stop** your server.
2. Put the **VoteParty jar** file that you downloaded into your **plugins** folder.
3. Download the [**PlaceholderAPI**](https://placeholderapi.com) dependency.
4. Download the [**NuVotifier**](https://www.spigotmc.org/resources/nuvotifier.13449/) dependency.
5. **Start** your server.
6. Modify the **config.yml** and **language files** that were generated to fit your server's layout (Both found in `/plugins/VoteParty/`).
7. Download the **PlaceholderAPI Player Expansion** (/papi ecloud download Player)
8. Check the [Commands & Permissions](/glares-plugins/voteparty/commands-and-permissions) page to familiarize yourself with the plugin.
9. That's it! You're good to go!


# Commands & Permissions

List of commands and permissions for the plugin

## Player Commands

| Command   | Permission              | Description                                   |
| --------- | ----------------------- | --------------------------------------------- |
| /vp       | none                    | Shows how many votes needed for a Vote Party. |
| /vp help  | none                    | Helpful commands for VoteParty.               |
| /vp claim | voteparty.command.claim | Claim offline voting rewards.                 |

## Admin Commands

| Command                                        | Permission              | Description                                                            |
| ---------------------------------------------- | ----------------------- | ---------------------------------------------------------------------- |
| /vp addvote \<amount>                          | voteparty.command.admin | Add votes to the current vote tally.                                   |
| /vp addvote \<player> \<silent> \<amount>      | voteparty.command.admin | Add votes to the current vote tally with some extra parameter options. |
| /vp givecrate \<player> \<amount>              | voteparty.command.admin | Supply a player with a vote crate.                                     |
| /vp checkvotes \<player> \<amount> \<timeunit> | voteparty.command.admin | Check the amount of votes a player has.                                |
| /vp totalvotes \<player>                       | voteparty.command.admin | Get the total amount of votes a player has.                            |
| /vp resetvotes \<player>                       | voteparty.command.admin | Reset the amount of votes a player has.                                |
| /vp setcounter \<amount>                       | voteparty.command.admin | Set the current vote counter.                                          |
| /vp top \<type> \[page]                        | voteparty.command.admin | List top voters                                                        |
| /vp startparty                                 | voteparty.command.admin | Force launch a Vote Party.                                             |
| /vp giveparty \<player>                        | voteparty.command.admin | Host a private Vote Party for a player.                                |
| /vp reload                                     | voteparty.command.admin | Reloads the config file.                                               |

## Permissions

| Permission              | Description                                             |
| ----------------------- | ------------------------------------------------------- |
| voteparty.command.admin | Gives access to all VoteParty commands and permissions. |


# Placeholders

VoteParty's placeholders

**VoteParty** provides [**PlaceholderAPI**](https://placeholderapi.com) placeholders that you can utilize inside any plugin that supports [**PlaceholderAPI**](https://placeholderapi.com).\
You can also use any [**PlaceholderAPI**](https://placeholderapi.com) placeholder inside of **VoteParty**. ([PlaceholderAPI placeholders list](https://helpch.at/placeholders))\
\
To utilize with plugins such as FeatherBoard, change the below placeholders from %% to {placeholderapi\_\<placeholder>}.\
\
Example: {placeholderapi\_voteparty\_votes\_recorded}

| Placeholder                             | Return Value | Description                                                                                              |
| --------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------- |
| %voteparty\_votes\_recorded%            | Text         | Returns the current amount of votes towards a Vote Party.                                                |
| %voteparty\_votes\_required\_party%     | Text         | Returns the amount of votes left that are needed for a Vote Party to happen.                             |
| %voteparty\_votes\_required\_total%     | Text         | Returns the total amount of votes needed for a Vote Party to happen.                                     |
| %voteparty\_player\_votes%              | Text         | <p><strong>DEPRECATED.</strong></p><p>Returns the total amount of votes a player has.</p>                |
| %voteparty\_votes\_total%               | Text         | Returns the total votes of all players                                                                   |
| %voteparty\_top\_TYPE\_INFO\_PLACEMENT% | Text         | Returns information about the placement voter depending on the input.                                    |
| %voteparty\_placement\_TYPE%            | Text         | Returns the player's spot in the leaderboard with the given type.                                        |
| %voteparty\_totalvotes\_TYPE%           | Text         | Returns the total votes of a player in the time-frame of the type provided.                              |
| %voteparty\_totalparties\_TYPE%         | Text         | Returns the total amount of parties the server has had in a given time-frame based on the type provided. |

**Type**\
The type placeholder refers to the list of placeholders above that contain `TYPE` in them. The options for these are `daily`, `weekly`, `monthly`, `lastmonth`, `annually` and `alltime`.

**Info**\
The info placeholder refers to the list of placeholders above that contain `INFO` in them. The options for these can be `name` or `votes`.\
\
The placement is just the placement of the player in the leaderboard, so like `1` would return the top voter, `2` would return the 2nd top voter, etc.\
**Example Placeholders**:\
`%voteparty_top_alltime_name_1%` - Returns the name of the top voter of all time `%voteparty_top_monthly_name_1%` - Returns the name of the top voter in the past month

## Download

There is **no** download required anymore to utilize the **VoteParty** placeholders. It is all built into the plugin.




---

[Next Page](/llms-full.txt/1)

