Skip to content

Formats

Formats control how chat messages look. Create unlimited styles in the formats/ folder and use them across the plugin — not just chat.

Formats support interactive elements (hover, click) so you can build help menus, clickable links, and more.

Placeholders

Supports PlaceholderAPI and built-in variables. Players can use placeholders like [item] in chat.

Chat placeholders demonstration

See Variables.

How Formats Work

Each format is a file in formats/. The filename is the format name (e.g., "pm-sender" can be referenced elsewhere). Each format has unlimited parts, each with its own settings (hover text, click action, etc.).

Creating a Format

See formats/chat.yml for a full example. Here's a minimal format (first-format.yml):

First format example

Now use this format elsewhere (e.g., in Channels by setting Format: first-format). Here's a more practical chat format:

Chat format example

This format has three parts: Prefix (with hover/click URL), PlayerName (suggests /tell on click), and Message (suffix + chat text).

Part Options Reference

All options are optional except Message. See chat.yml for examples.

OptionDescription
Message(Required) The text this part prints
Sender_PermissionOnly show this part if sender has this permission. Prefix with ! to negate (e.g. !group.bot shows the part to everyone without that permission)
Sender_VariableShow part if sender's variable equals value. Syntax: {placeholder} value (prefix with ! to negate). Example: {player_gamemode} creative or {player_gamemode} !creative
Sender_ConditionJavaScript returning true/false. Uses player variable. See chat.yml for examples. Performance penalty.
Receiver_PermissionOnly show to receivers with this permission. Prefix with ! to negate. Supports {sender_name} and {channel_name}. See Variables for examples
Receiver_VariableLike Sender_Variable but checked per receiver. Supports {sender_name}, {channel_name}. See Variables for examples
Receiver_ConditionJavaScript per receiver. Heavy performance penalty. Supports {sender_name}, {channel_name}. See Variables for examples
HoverList of texts shown on mouse hover. Supports ItemsAdder and Nexo font images (:name:).
Hover_ItemJavaScript returning ItemStack (e.g., player.getItemInHand())
Open_UrlURL to open on click
Suggest_CommandCommand to put in chat input on click
Run_CommandCommand to run on click (runs as the receiver)
InsertionText inserted on shift+click
Copy_To_ClipboardText copied on click (1.16+)
InheritImport another format from another file
Inherit_PartImport another part from the same file
GradientGradient colors. Syntax: RED - GOLD or #123456 - #654321 (1.16+)
Image_FileDisplay image from ChatControl's images/ folder. Example: creeper-head.png
Image_HeadDisplay player skin head. Examples: 'Herobrine', '{player}'. Blocking operation.
Image_UrlDisplay image from URL. Examples: 'https://mywebsite.com/images/creeper.png', "https://mc-heads.net/avatar/{player_uuid}". Blocking operation.
Image_HeightImage height in chat lines (min 8, default 8). Example: 15
Image_TypeImage render type: BLOCK, DARK_SHADE, MEDIUM_SHADE, LIGHT_SHADE
ProxySet to false to skip this part when the formatted message is forwarded across the proxy. Use it for parts that contain per-receiver data (such as relational PlaceholderAPI placeholders) which cannot resolve on remote servers. Defaults to true.

Image_File example:

Image file example

Image_Type example (DARK_SHADE):

Image type example

Example: Player Rank Prefixes

Use format parts with Sender_Permission instead of a separate prefix plugin:

yaml
    Rank_1:
      Message: "&c[Admin] "
      Sender_Permission: "my.rank.admin"
    Rank_2: 
      Message: "&9[Mod] "
      Sender_Permission: "my.rank.mod"
    Rank_3: 
      Message: "&6[Helper] "
      Sender_Permission: "my.rank.helper"
    The_Rest: 
      Message: "&7{pl_prefix+}{player}&7: &f{message}"