# PixelMessage

### [Download Plugin](https://builtbybit.com/resources/pixelmessage.98772/)

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td></td><td data-object-fit="contain"><a href="/files/2JgynXOBGErxUPAlMzHF">/files/2JgynXOBGErxUPAlMzHF</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/XgSWgLXHsOJRk7eWhs58">/files/XgSWgLXHsOJRk7eWhs58</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/XS3AleixsSEAjoo5gIKq">/files/XS3AleixsSEAjoo5gIKq</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/Yr13GxmWtBa9YX02DFKx">/files/Yr13GxmWtBa9YX02DFKx</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/eBaIOQ8UxKQUzmO62n79">/files/eBaIOQ8UxKQUzmO62n79</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/U87KC4y6DOzMmJTAZgmi">/files/U87KC4y6DOzMmJTAZgmi</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/PkhjHQnbeiK1Xy4KGMTO">/files/PkhjHQnbeiK1Xy4KGMTO</a></td></tr><tr><td></td><td data-object-fit="contain"><a href="/files/iv6LUKyewAqlCrkqkvpc">/files/iv6LUKyewAqlCrkqkvpc</a></td></tr></tbody></table>

## <mark style="color:$primary;">**Plugin description**</mark>

* It bundles chat announcements, tablist formatting, animated sidebars, join / quit messages, actionbars, titles, bossbars, and toast popups into one plugin with shared formatting support and modular configuration.
* Chat announcements with manual send commands for:
  * chat
  * actionbar
  * title
  * bossbar
* AdvancedTABList module with:
  * header / footer profiles
  * formatted player names
  * sorting
  * player list objective values
  * animated placeholders
* AdvancedScoreboard module with:
  * animated sidebar titles and lines
  * per-world scoreboard file selection
  * player toggle command
* JoinMessage module with:
  * personal join messages
  * global join messages
  * title
  * actionbar
  * toast popup
  * quit message
  * optional pixel-rendered player head in the personal chat message
* MiniMessage support
* Legacy `&` color support
* Hex color support
* PlaceholderAPI support
* Internal `%pixel_*%` placeholders for tablist / scoreboard formatting
* Optional Vault support for money placeholders
* Soft integrations for custom text / font ecosystems already present on the server

## <mark style="color:$primary;">Compatibility</mark>

* Minecraft: `1.19.4 - 1.21.x`
* API: `Paper / Spigot`

## <mark style="color:$primary;">Commands</mark>

* `/pixelmessage sb`
  * Permission: `pixelmessage.scoreboard.toggle`
  * Toggles your personal sidebar scoreboard on or off.

## <mark style="color:$primary;">Admin Commands</mark>

* `/pixelmessage reload`
  * Permission: `pixelmessage.reload`
  * Reloads the whole PixelMessage plugin and all enabled modules.
* `/pixelmessage message [player]`
  * Permission: `pixelmessage.send.chat`
  * Sends one configured chat announcement immediately.
* `/pixelmessage actionbar [player]`
  * Permission: `pixelmessage.send.actionbar`
  * Sends one configured actionbar announcement immediately.
* `/pixelmessage title [player]`
  * Permission: `pixelmessage.send.title`
  * Sends one configured title immediately.
* `/pixelmessage bossbar [player]`
  * Permission: `pixelmessage.send.bossbar`
  * Sends one configured bossbar immediately.

## <mark style="color:$primary;">Permissions</mark>

* `pixelmessage.reload`
* `pixelmessage.send.chat`
* `pixelmessage.send.actionbar`
* `pixelmessage.send.title`
* `pixelmessage.send.bossbar`
* `pixelmessage.scoreboard.toggle`
* `pixelmessage.update.notify`

## <mark style="color:$primary;">Placeholders</mark>

* `%pixelmessage_player%`
* `%pixelmessage_prefix%`
* `%pixelmessage_suffix%`
* `%pixelmessage_online%`
* `%pixelmessage_max%`
* `%pixelmessage_world%`
* `%pixelmessage_ping%`
* `%pixelmessage_level%`
* `%pixelmessage_time%`
* `%pixelmessage_health%`
* `%pixelmessage_health_half%`
* `%pixelmessage_money%`
* `%pixelmessage_ram_used%`
* `%pixelmessage_ram_max%`
* `%pixelmessage_anim:<name>%`

## <mark style="color:$primary;">Text Formatting</mark>

The plugin supports two text formatting styles.

### MiniMessage

Examples:

```
<red>Hello</red>
<bold><green>Server</green></bold>
<gradient:#00c6ff:#0072ff>Gradient Text</gradient>
<rainbow>Rainbow</rainbow>
```

### Legacy

Examples:

```
&aGreen text
&cRed text
&#ff00ffHex text
```

### Clickable Links

Chat messages sent by the plugin automatically detect links and make them clickable.

Supported examples:

* `https://yourwebsite.net`
* `http://yourwebsite.net`
* `www.yourwebsite.net`
* `yourwebsite.net`
* `discord.gg/yourinvite`

## <mark style="color:$primary;">Config Files</mark>

{% tabs %}
{% tab title="scoreboards / default.yml" %}

```yml
# ============================================================
# Scoreboard - default.yml
# ============================================================
# This file defines ONE sidebar scoreboard.
# Every .yml file inside:
#   /plugins/AdvancedScoreboard/scoreboards/
# is a separate scoreboard that you can select in config.yml
# (globally or per-world).
#
# ------------------------------------------------------------
# MINECRAFT LIMITS (IMPORTANT)
# ------------------------------------------------------------
# 1) The sidebar can display up to 15 lines (line-1 ... line-15).
# 2) Each line is split into a Team prefix/suffix internally.
#    Minecraft has strict length limits (~64 visible chars each).
#    The plugin automatically cuts text safely and carries colors
#    to the suffix.
# 3) "score" controls vertical order:
#    - higher score = higher line on the sidebar.
#
# ------------------------------------------------------------
# TEXT FORMATTING (YOU CAN MIX BOTH STYLES)
# ------------------------------------------------------------
# A) Classic Minecraft formatting using '&'
#    Colors: &0..&f
#    Styles: &l (bold), &o (italic), &n (underline),
#            &m (strikethrough), &r (reset)
#    Example: "&6&lGold Title"
#
# B) MiniMessage formatting (Adventure)
#    <bold>text</bold>
#    <italic>text</italic>
#    <underlined>text</underlined>
#    <strikethrough>text</strikethrough>
#    <reset>
#    <color:#RRGGBB>text</color>
#    <gradient:#RRGGBB:#RRGGBB>text</gradient>
#
#    Example:
#    "<gradient:#00e5ff:#9b5cff><bold>LIVE</bold></gradient>"
#
# C) HEX with '&' style: &#RRGGBB
#    Example: "&#ff00ffMagenta"
#
# ------------------------------------------------------------
# PLACEHOLDERS (PlaceholderAPI OPTIONAL)
# ------------------------------------------------------------
# The plugin supports PlaceholderAPI but does not require it.
# If PlaceholderAPI is installed, you can use %placeholders%.
# If it is NOT installed, placeholders will appear as plain text.
#
# Common examples (if you have the expansions installed):
# - %player_name%
# - %player_ping%
# - %server_online%
# - %server_uptime%
# ============================================================

scores:
  # ----------------------------------------------------------
  # hidden (reserved)
  # ----------------------------------------------------------
  # Vanilla Minecraft always shows score numbers internally.
  # Bukkit/Paper API cannot hide them reliably.
  # This option is reserved for a future ProtocolLib/NMS mode.
  #
  # true  = (currently no visible effect)
  # false = default
  hidden: false

display:
  # ==========================================================
  # TITLE (scoreboard header)
  # ==========================================================
  title:
    # text:
    # - 1 entry  -> static title
    # - 2+ entries -> animated title (frames)
    #
    # Tip: gradients and <bold> look best in titles.
    text:
      - "<gradient:#00e5ff:#9b5cff><bold>SERVER INFO</bold></gradient>"
      - "<gradient:#9b5cff:#00e5ff><bold>SERVER INFO</bold></gradient>"

    # random:
    # true  = pick a random frame each update
    # false = play frames in order (1,2,3,...)
    random: false

    # interval (ticks):
    # How often to switch to the next frame.
    # 20 ticks = 1 second
    interval: 10

  # ==========================================================
  # LINES (up to 15)
  # ==========================================================
  # Each line format:
  #
  # line-X:
  #   text:
  #     - "frame 1"
  #     - "frame 2"
  #   random: false
  #   interval: 20
  #   score: 99
  #
  # Notes:
  # - If "text" has 1 line -> the line is static.
  # - If "text" has multiple lines -> the line is animated.
  # - The "score" decides position (higher = higher).
  # ==========================================================

  line-1:
    # Player name (PlaceholderAPI: %player_name%)
    text:
      - "&8┌ &b👤 &fPlayer: &a%player_name%"
    random: false
    interval: 40
    score: 99

  line-2:
    # Animated status (3 frames)
    text:
      - "&8├ &a✔ &fStatus: &aOnline"
      - "&8├ &e⏳ &fStatus: &ePlaying"
      - "&8├ &b✦ &fStatus: &bExploring"
    random: false
    interval: 40
    score: 98

  line-3:
    # Online players (PlaceholderAPI: %server_online%)
    text:
      - "&8├ &e🌐 &fOnline: &6%server_online%"
    random: false
    interval: 40
    score: 97

  line-4:
    # Ping (PlaceholderAPI: %player_ping%)
    text:
      - "&8├ &b📶 &fPing: &a%player_ping%ms"
    random: false
    interval: 40
    score: 96

  line-5:
    # Uptime (PlaceholderAPI: %server_uptime%)
    text:
      - "&8├ &7⏱ &fUptime: &b%server_uptime%"
    random: false
    interval: 80
    score: 95

  line-6:
    # Spacer line
    text:
      - "&8│"
    random: false
    interval: 200
    score: 94

  line-7:
    # Tip (animated)
    text:
      - "&8├ &6💡 &fTip: &eVisit &b/discord &efor more info"
      - "&8├ &6💡 &fTip: &eJoin our Discord: &b/discord"
      - "&8├ &6💡 &fTip: &eCheck updates on: &aexample.com"
    random: false
    interval: 60
    score: 93

  line-8:
    # Progress bar animation example
    text:
      - "&8├ &d❤ &fDaily: &a■■■■■&7■■■■■"
      - "&8├ &d❤ &fDaily: &a■■■■■■&7■■■■"
      - "&8├ &d❤ &fDaily: &a■■■■■■■&7■■■"
      - "&8├ &d❤ &fDaily: &a■■■■■■■■&7■■"
      - "&8├ &d❤ &fDaily: &a■■■■■■■■■&7■"
      - "&8├ &d❤ &fDaily: &a■■■■■■■■■■"
    random: false
    interval: 10
    score: 92

  line-9:
    # MiniMessage example inside a line (gradient + bold)
    text:
      - "&8├ &d✨ &fEvent: <gradient:#ffd86f:#fc6262><bold>ACTIVE</bold></gradient>"
      - "&8├ &d✨ &fEvent: <gradient:#7cfcc2:#00d1ff><bold>ACTIVE</bold></gradient>"
    random: false
    interval: 20
    score: 91

  line-10:
    # Spacer line
    text:
      - "&8│"
    random: false
    interval: 200
    score: 90

  line-11:
    # Footer (animated)
    text:
      - "&8└ &7🌍 &fexample.com &8┃ &7/discord"
      - "&8└ &7🌍 &fexample.com &8┃ &7/store"
    random: false
    interval: 80
    score: 89

```

{% endtab %}

{% tab title="scoreboards / example.yml" %}

```yml
# ============================================================
# Scoreboard - example.yml (showcase)
# ============================================================
# This example demonstrates:
# - Animated title (gradient swap)
# - Animated lines (status, ping pulse, rotating tips)
# - Mixed formatting: & codes + MiniMessage tags
# - Unicode icons (may depend on font/resource pack)
# ============================================================

scores:
  # Reserved (currently no visible effect without ProtocolLib/NMS mode)
  hidden: false

display:
  title:
    # 4-frame title animation (smooth gradient rotation)
    text:
      - "<gradient:#00e5ff:#9b5cff><bold>LIVE DASHBOARD</bold></gradient>"
      - "<gradient:#4dfcff:#ff5cf2><bold>LIVE DASHBOARD</bold></gradient>"
      - "<gradient:#ffd86f:#fc6262><bold>LIVE DASHBOARD</bold></gradient>"
      - "<gradient:#7cfcc2:#00d1ff><bold>LIVE DASHBOARD</bold></gradient>"
    random: false
    interval: 10

  # ----------------------------------------------------------
  # HEADER / PLAYER BLOCK
  # ----------------------------------------------------------
  line-1:
    text:
      - "&8┌&7────────────────────────&8┐"
    random: false
    interval: 200
    score: 99

  line-2:
    text:
      - "&8│ &b👤 &fPlayer:&a %player_name% &8│"
    random: false
    interval: 40
    score: 98

  line-3:
    # Animated rank label (example)
    text:
      - "&8│ &d⭐ &fRank:&d <bold>VIP</bold> &8│"
      - "&8│ &d⭐ &fRank:&5 <bold>VIP</bold> &8│"
      - "&8│ &d⭐ &fRank:&b <bold>VIP</bold> &8│"
    random: false
    interval: 20
    score: 97

  line-4:
    text:
      - "&8├&7────────────────────────&8┤"
    random: false
    interval: 200
    score: 96

  # ----------------------------------------------------------
  # SERVER STATS
  # ----------------------------------------------------------
  line-5:
    text:
      - "&8│ &e🌐 &fOnline:&6 %server_online% &8│"
    random: false
    interval: 40
    score: 95

  line-6:
    # Ping pulse (color cycling)
    text:
      - "&8│ &b📶 &fPing:&a %player_ping%ms &8│"
      - "&8│ &b📶 &fPing:&e %player_ping%ms &8│"
      - "&8│ &b📶 &fPing:&c %player_ping%ms &8│"
      - "&8│ &b📶 &fPing:&e %player_ping%ms &8│"
    random: false
    interval: 10
    score: 94

  line-7:
    text:
      - "&8│ &7⏱ &fUptime:&b %server_uptime% &8│"
    random: false
    interval: 80
    score: 93

  line-8:
    text:
      - "&8├&7────────────────────────&8┤"
    random: false
    interval: 200
    score: 92

  # ----------------------------------------------------------
  # STATUS / EVENT (ANIMATED)
  # ----------------------------------------------------------
  line-9:
    # 4-frame animated "mode" line
    text:
      - "&8│ &a✔ &fMode:&a Survival &8│"
      - "&8│ &b✦ &fMode:&b Adventure &8│"
      - "&8│ &e⛏ &fMode:&e Mining &8│"
      - "&8│ &d⚔ &fMode:&d PvP Ready &8│"
    random: false
    interval: 30
    score: 91

  line-10:
    # MiniMessage gradient inside line (event highlight)
    text:
      - "&8│ &d✨ &fEvent:&r <gradient:#ffd86f:#fc6262><bold>BOOST x2</bold></gradient> &8│"
      - "&8│ &d✨ &fEvent:&r <gradient:#7cfcc2:#00d1ff><bold>BOOST x2</bold></gradient> &8│"
    random: false
    interval: 20
    score: 90

  line-11:
    text:
      - "&8├&7────────────────────────&8┤"
    random: false
    interval: 200
    score: 89

  # ----------------------------------------------------------
  # DAILY PROGRESS BAR (ANIMATED)
  # ----------------------------------------------------------
  line-12:
    text:
      - "&8│ &d❤ &fDaily:&a ■■■■■&7■■■■■ &8│"
      - "&8│ &d❤ &fDaily:&a ■■■■■■&7■■■■ &8│"
      - "&8│ &d❤ &fDaily:&a ■■■■■■■&7■■■ &8│"
      - "&8│ &d❤ &fDaily:&a ■■■■■■■■&7■■ &8│"
      - "&8│ &d❤ &fDaily:&a ■■■■■■■■■&7■ &8│"
      - "&8│ &d❤ &fDaily:&a ■■■■■■■■■■ &8│"
    random: false
    interval: 10
    score: 88

  # ----------------------------------------------------------
  # ROTATING TIPS (ANIMATED)
  # ----------------------------------------------------------
  line-13:
    text:
      - "&8│ &6💡 &fTip:&e Use &b/discord &eto join community &8│"
      - "&8│ &6💡 &fTip:&e Use &b/discord &eto join community &8│"
      - "&8│ &6💡 &fTip:&e Visit &aexample.com &efor news &8│"
      - "&8│ &6💡 &fTip:&e Invite friends → get rewards! &8│"
    random: false
    interval: 60
    score: 87

  # ----------------------------------------------------------
  # FOOTER
  # ----------------------------------------------------------
  line-14:
    text:
      - "&8└&7────────────────────────&8┘"
    random: false
    interval: 200
    score: 86

  line-15:
    # Small animated footer tagline (optional)
    text:
      - "&7&l  example.com  &8┃ &7/discord"
      - "&b&l  example.com  &8┃ &7/store"
    random: false
    interval: 80
    score: 85

```

{% endtab %}

{% tab title="announcements.yml" %}

```yml
# =========================================================
# Announcements Configuration
# =========================================================
# TEXT FORMATTING GUIDE
#
# You can write messages in 2 styles:
#
# 1) MiniMessage (recommended) - uses <tags>
#    Examples:
#      <red>Hello</red>
#      <bold><green>Server</green></bold>
#      <gradient:#00c6ff:#0072ff>Gradient Text</gradient>
#      <rainbow>Rainbow</rainbow>
#
# 2) Legacy formatting (Minecraft codes)
#    Use & codes:
#      &a green, &c red, &l bold, &n underline, &o italic, &r reset
#    Hex with &:  &#RRGGBB
#      Example: &#ff00ffHello
#
# Placeholders:
# - If PlaceholderAPI is installed, placeholders like %player_name% will work automatically.
# - If PlaceholderAPI is NOT installed, the plugin still works and placeholders stay as plain text.
#
# ============================================================

# Update checker is configured globally in config.yml

# ------------------------------------------------------------
# CHAT MESSAGES
# ------------------------------------------------------------
chat:
  enabled: true
  interval-seconds: 60
  random: false

  # Prefix added before every chat message.
  # Leave empty "" for no prefix.
  prefix: "<bold><gradient:#f5ed02:#ad090b>[ Pixel ] >></gradient></bold> "

  messages:
    - "<gradient:#00c6ff:#0072ff><bold>Welcome to YourServer!</bold></gradient>"
    - "&eCheck our website: &6www.yourserver.net"
    - "Online: &a%server_online%&7/&a%server_max_players%"

# ------------------------------------------------------------
# ACTIONBAR
# ------------------------------------------------------------
actionbar:
  enabled: true
  interval-seconds: 20
  random: true

  # How long a single actionbar message should stay visible (seconds).
  # If you set it higher than interval-seconds, it will be automatically clamped to interval-seconds.
  #
  # NOTE: ActionBar has no real "duration" API. This setting works by re-sending the same message
  # every second for display-seconds.
  display-seconds: 4

  messages:
    - "<gradient:#00c6ff:#0072ff><bold>Join our Discord!</bold></gradient>"
    - "&eYou are playing on &6YourServer"
    - "Online: &a%server_online%&7/&a%server_max_players%"

# ------------------------------------------------------------
# TITLES (repeating)
# ------------------------------------------------------------
titles:
  broadcast:
    enabled: false
    interval-seconds: 120
    random: true

    times:
      fade-in: 20
      stay: 60
      fade-out: 20

    entries:
      - title: "<gradient:#ff0000:#ffff00><bold>Welcome!</bold></gradient>"
        subtitle: "<gray>Have fun,</gray> <yellow>%player_name%</yellow>"

# ------------------------------------------------------------
# BOSSBAR
# ------------------------------------------------------------
bossbar:
  enabled: false
  interval-seconds: 120
  random: false

  # BossBar color: PINK, BLUE, RED, GREEN, YELLOW, PURPLE, WHITE
  color: BLUE

  # BossBar overlay style (how the bar is divided)
  #
  # Available options:
  # PROGRESS     - Smooth continuous bar (no segments)
  # NOTCHED_6    - Bar divided into 6 segments
  # NOTCHED_10   - Bar divided into 10 segments
  # NOTCHED_12   - Bar divided into 12 segments
  # NOTCHED_20   - Bar divided into 20 segments
  overlay: PROGRESS

  # Default progress (used if countdown.enabled is false)
  progress: 1.0

  # If enabled, bossbar will smoothly shrink from 1.0 to 0.0 during interval-seconds
  countdown:
    enabled: true
    # Update rate in ticks (20 ticks = 1 second). Lower = smoother, higher = less CPU.
    update-ticks: 2

  flags:
    darken-screen: false
    play-boss-music: false
    create-fog: false

  messages:
    - "<gradient:#00ff99:#00aaff><bold>Store:</bold></gradient> <white>shop.yourserver.net</white>"
    - "&eDiscord: &bdiscord.gg/yourlink"
    - "Online: &a%server_online%&7/&a%server_max_players%"

```

{% endtab %}

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

```yml
# Global update checker for PixelMessage
updatechecker: true

# Module toggles
announcements: true
tablist: true
scoreboard: true
joinmessage: true

```

{% endtab %}

{% tab title="joinmessage.yml" %}

```yml
# =========================================================
# JoinMessage Configuration
# =========================================================
# TEXT FORMATTING
#
# This module supports two text styles:
#
# 1) MiniMessage (recommended)
#    Examples:
#      <red>Hello</red>
#      <bold><green>PixelMessage</green></bold>
#      <gradient:#00c6ff:#0072ff>Gradient</gradient>
#      <rainbow>Rainbow</rainbow>
#
# 2) Legacy formatting (&)
#    Examples:
#      &aGreen
#      &cRed
#      &lBold
#      &#ff00ffHex
#
# PlaceholderAPI:
# - If PlaceholderAPI is installed, placeholders like %player_name%
#   will be replaced automatically.
# - If PlaceholderAPI is not installed, the plugin still works and the
#   placeholder will stay as plain text.
#
# IMPORTANT:
# - This module always disables vanilla join/quit messages and only sends
#   the messages you enable below.
# - Sections with multiple entries can still use random selection.
#
# ============================================================

join:
  chat:
    # Private chat message only for the player who joins.
    personal:
      enabled: true

      # If enabled, the player's pixel head is rendered on the left side and
      # the personal message is shown next to it, vertically centered.
      player-head:
        enabled: true
        # Player head size.
        # You can use either a single number or NxN format:
        # - 4
        # - 6x6
        # - 8x8
        #
        # Recommended options:
        # - 4x4  = very compact
        # - 5x5  = compact
        # - 6x6  = recommended
        # - 8x8  = classic Minecraft face size
        # - 10x10 = large
        # - 12x12 = very large
        size: 8x8

      # A single personal message split into chat lines.
      # Each list item below becomes a new line.
      message:
        - "<gradient:#00c6ff:#0072ff><bold>Welcome %player_name%!</bold></gradient>"
        - "<green>Good to see you on the server, <white>%player_name%</white><green>!</green>"

    # Global chat message shown to everyone when a player joins.
    global:
      enabled: true
      random: true

      # Global messages also support both single-line strings and multi-line entries.
      messages:
        - "<gold>%player_name%</gold> <green>joined the server!</green>"
        - "<gradient:#8E2DE2:#4A00E0>%player_name%</gradient> <white>just logged in.</white>"

  # Title only for the player who joins.
  title:
    enabled: true
    random: true

    times:
      fade-in: 10
      stay: 60
      fade-out: 20

    entries:
      - title: "<gradient:#43cea2:#185a9d><bold>Welcome!</bold></gradient>"
        subtitle: "<white>Have fun, <yellow>%player_name%</yellow></white>"
      - title: "<gold><bold>Hello %player_name%!</bold></gold>"
        subtitle: "<gray>Enjoy your time on the server</gray>"

  # ActionBar only for the player who joins.
  actionbar:
    enabled: true
    random: true

    # The join actionbar is re-sent for a short time so it is less likely
    # to be overwritten immediately by another module or plugin.
    display-seconds: 3
    resend-ticks: 5

    messages:
      - "<green>Online:</green> <white>%server_online%</white>/<white>%server_max_players%</white>"
      - "<yellow>Good luck, %player_name%!</yellow>"

  # Toast / advancement popup in the top-right corner.
  # frame:
  # - TASK      = classic advancement popup
  # - GOAL      = goal popup
  # - CHALLENGE = challenge popup and Minecraft plays the vanilla challenge sound
  #
  # icon must be a Bukkit Material name.
  # sound.name must be a Bukkit Sound enum name.
  # Use sound.name: "none" or sound.enabled: false to disable the custom sound.
  toast:
    enabled: true
    random: true

    # Delay before showing the toast after join.
    # 20 ticks = 1 second.
    delay-ticks: 20

    entries:
      - title: "<gold><bold>Welcome Back!</bold></gold>"
        description: "<gray>Have fun, <yellow>%player_name%</yellow></gray>"
        frame: TASK
        icon: BOOK
        sound:
          enabled: true
          name: ENTITY_PLAYER_LEVELUP
          volume: 1.0
          pitch: 1.0

      - title: "<gradient:#00c6ff:#0072ff><bold>Daily Login</bold></gradient>"
        description: "<white>%player_name%</white> <gray>joined the server</gray>"
        frame: GOAL
        icon: DIAMOND
        sound:
          enabled: true
          name: UI_TOAST_IN
          volume: 1.0
          pitch: 1.0

quit:
  chat:
    # Global chat message shown when a player leaves the server.
    global:
      enabled: true
      random: true
      messages:
        - "<red>%player_name%</red> <gray>left the server.</gray>"
        - "<white>%player_name%</white> <dark_gray>logged out.</dark_gray>"

```

{% endtab %}

{% tab title="scoreboard.yml" %}

```yml
# =========================================================
# Scoreboard Configuration
# =========================================================
# Main scoreboard config for PixelMessage.
# Board layouts are stored in:
# /plugins/PixelMessage/scoreboards/

scoreboard:
  global: "default.yml"

  per_world:
  # world_nether: "nether.yml"
  # world_the_end: "end.yml"

```

{% endtab %}

{% tab title="tablist.yml" %}

```yml
# =========================================================
# TabList Configuration
# =========================================================
# TICKS:
# 20 ticks = ~1 second
#
# TEXT FORMATTING (everywhere):
# - Legacy: &a &7 &f ...
# - HEX: &#RRGGBB or <#RRGGBB>
# - Gradient: <gradient:#RRGGBB:#RRGGBB>Text</gradient>
# - Rainbow: <rainbow>Text</rainbow>
# - MiniMessage tags: <bold> <italic> <underlined> <reset> etc.
#
# PLACEHOLDERS:
# Internal placeholders (always):
# - %pixel_player%        -> player name
# - %pixel_online%        -> online player count
# - %pixel_max%           -> max slots
# - %pixel_world%         -> world folder name
# - %pixel_ping%          -> ping in ms
# - %pixel_level%         -> vanilla minecraft level
# - %pixel_health%        -> HP number (rounded up int)
# - %pixel_health_half%   -> HP number with .5 steps (example 18.5)
# - %pixel_time%          -> HH:mm:ss
# - %pixel_money%         -> Vault balance (if Vault+economy exists, otherwise 0)
# - %pixel_ram_used% / %pixel_ram_max% -> JVM memory MB
#
# Animated placeholders:
# - %pixel_anim:<name>%   -> animation frames from placeholders.animations.<name>
#
# PlaceholderAPI:
# If PlaceholderAPI is installed, any PAPI placeholders also work.
# =========================================================



# =========================================================
# CORE SETTINGS
# =========================================================
settings:
  header_footer_update_ticks: 20
  tabname_update_ticks: 20
  objective_update_ticks: 20

  anti_override: true
  sorting_enabled: true



# =========================================================
# HEADER & FOOTER
# =========================================================
header_footer:
  enabled: true

  profiles:

    - name: "default"
      priority: 1
      condition: ""
      header:
        - ""
        - "%pixel_anim:servername% &8• &7Welcome, &#a5b4fc%pixel_player%&7!"
        - "&7Online: &#22c55e%pixel_online%&7/&f%pixel_max% &8• &7World: &#60a5fa%pixel_world%"
        - "&8────────────────────────"
      footer:
        - "&8────────────────────────"
        - "&7Time: &#34d399%pixel_time% &8• &7Discord: &#5865F2/discord"
        - "&7Store: &#a78bfa/store"
        - ""

    - name: "nether"
      priority: 5
      condition: "%pixel_world%==world_nether"
      header:
        - ""
        - "<gradient:#ef4444:#f97316><bold>YourServer</bold></gradient> &8• &cNether"
        - "&7Online: &#22c55e%pixel_online%&7/&f%pixel_max% &8• &7Be careful!"
        - "&8────────────────────────"
      footer:
        - "&8────────────────────────"
        - "&7Time: &#34d399%pixel_time% &8• &7Discord: &#5865F2/discord"
        - ""

    - name: "staff"
      priority: 10
      condition: "perm:pixelmessage.staff"
      header:
        - ""
        - "<gradient:#22c55e:#86efac><bold>YourServer STAFF</bold></gradient> &8• &7Hi, &#bbf7d0%pixel_player%"
        - "&7Online: &#22c55e%pixel_online%&7/&f%pixel_max% &8• &7World: &#60a5fa%pixel_world%"
        - "&8────────────────────────"
      footer:
        - "&8────────────────────────"
        - "&7Time: &#34d399%pixel_time% &8• &7Discord: &#5865F2/discord"
        - ""



# =========================================================
# TABLIST FORMATTING (prefix + name + suffix)
# =========================================================
tablist_formatting:
  enabled: true
  format: "%pixel_prefix%%pixel_player%%pixel_suffix%"

  groups:
    owner:
      permission: "group.owner"
      weight: 1000
      prefix: "<gradient:#f59e0b:#f97316><bold>OWNER</bold></gradient> &8| &f"
      suffix: ""

    admin:
      permission: "group.admin"
      weight: 900
      prefix: "&#ef4444<bold>ADMIN</bold> &8| &f"
      suffix: ""

    mod:
      permission: "group.mod"
      weight: 800
      prefix: "&#22c55e<bold>MOD</bold> &8| &f"
      suffix: ""

    vip:
      permission: "group.vip"
      weight: 500
      prefix: "&#a855f7<bold>VIP</bold> &8| &f"
      suffix: ""

    member:
      permission: ""
      weight: 1
      prefix: "&#94a3b8"
      suffix: ""



# =========================================================
# RIGHT VALUE NEXT TO PLAYER NAME (auto suffix like [62ms] / [HP 18] / hearts)
# =========================================================
tablist_right_value:

  # suffix_mode:
  # - OFF               -> show nothing (normal vanilla look)
  # - PING              -> shows ping in ms (example: [62ms])
  # - LEVEL             -> shows minecraft level (example: [Lv 12])
  # - MONEY             -> shows Vault balance (Vault optional) (example: [$1200])
  # - HEALTH_NUMBER     -> shows HP as number (example: [HP 18])
  # - HEALTH_NUMBER_HALF -> shows HP with .5 steps (example: [HP 18.5])
  # - HEALTH_HEARTS     -> shows visual hearts next to name (example: [❤❤❤❤❤❤❤□□□])
  suffix_mode: "PING"



# =========================================================
# SORTING (tablist order)
# =========================================================
sorting:
  enabled: true

  # mode:
  # GROUP SORTING:
  # - weight_desc  -> higher group weight first
  # - weight_asc   -> lower group weight first
  #
  # SIMPLE VALUE SORTING (ignores group weights):
  # - level_desc   -> higher level first
  # - level_asc    -> lower level first
  # - money_desc   -> higher money first (Vault optional; without Vault money=0)
  # - money_asc    -> lower money first
  # - ping_desc    -> higher ping first
  # - ping_asc     -> lower ping first
  #
  # GROUP + VALUE SORTING (group weights first, then inside group):
  # - weight_then_level_desc
  # - weight_then_level_asc
  # - weight_then_money_desc
  # - weight_then_money_asc
  # - weight_then_ping_desc
  # - weight_then_ping_asc
  mode: "weight_desc"

  case_sensitive: false



# =========================================================
# DISPLAYED INSTEAD OF PING NUMBERS
# =========================================================
playerlist_objective:
  enabled: true

  # mode:
  # - NONE          -> disable objective completely
  # - PING          -> numeric ping (ms)
  # - LEVEL         -> numeric minecraft level
  # - MONEY         -> numeric Vault money (Vault optional)
  # - HEALTH_NUMBER -> numeric HP (0-20)
  mode: "LEVEL"



# =========================================================
# PLACEHOLDER ANIMATIONS
# =========================================================
placeholders:
  animations:
    servername:
      interval_ticks: 10
      frames:
        - "<gradient:#7c3aed:#22d3ee><bold>YourServer</bold></gradient>"
        - "<gradient:#22d3ee:#7c3aed><bold>YourServer</bold></gradient>"



# =========================================================
# PLACEHOLDER REPLACEMENTS
# =========================================================
replacements:
  enabled: true

  rules:
    - placeholder: "%pixel_world%"
      type: "text_map"
      map:
        "world": "Overworld"
        "world_nether": "Nether"
        "world_the_end": "The End"
      fallback: "%value%"



# =========================================================
# RGB SUPPORT
# =========================================================
rgb_support:
  enabled: true



# Update checker is configured globally in config.yml


```

{% endtab %}
{% endtabs %}

## <mark style="color:$primary;">Optional Integrations</mark>

ChatAnnouncements uses soft dependencies.\
These plugins are supported but not required.

* PlaceholderAPI


---

# Agent Instructions: Querying This Documentation

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

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

```
GET https://pixelforge.gitbook.io/pixelforge/documentation/plugins/pixelmessage.md?ask=<question>
```

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

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