# Chat Format

Formats every public chat message with LuckPerms prefix/suffix, team tag and optionally Nexo glyphs (MiniMessage tags). The same file defines the formats for team chat, ally chat and chat spy. The module has no commands of its own.

## Placeholders

| Placeholder | Value |
|---|---|
| `<display_name>` | Fully formatted name (LP prefix + team tag + name + LP suffix) |
| `<lp_prefix>` / `<lp_suffix>` | LuckPerms prefix/suffix (empty when unset or LP missing) |
| `<player>` | Player name or [nickname](nick.html) if set |
| `<player_name>` | Always the real player name |
| `<team_tag>` | Team prefix like `[RED]` (only when the team has a valid tag) |
| `<team>` / `<team_name>` | Internal team name / display name |
| `<team_color>` | Color tag of the team (e.g. `<red>`) |
| `<message>` | The written message |

> **Note:** Formatting codes in team/ally chat message text are always stripped. The separate `/socialspy` for private messages uses its own format in `messages.yml` (see [Moderation](moderation.html#socialspy)). The optional job title before the name is configured in `modules/jobs.yml` (see [Jobs](jobs.html)).

## Configuration (modules/chat.yml)

```yaml
# Enables or disables chat, team chat and chat spy formatting.
enabled: true

# Layout of the public chat line.
format: "<display_name><font:minecraft:default><gray>: <message>"
# Layout of the <display_name> placeholder.
display-name-format: "<lp_prefix><font:minecraft:default><team_tag><player><lp_suffix><font:minecraft:default>"

luckperms:
  # Prefix and suffix can be toggled independently.
  prefix-enabled: true
  suffix-enabled: true

nexo-glyphs:
  # Resolves %nexo_<glyphid>% and %nexo_shift_<pixels>% in LP prefixes,
  # even without PlaceholderAPI.
  resolve-placeholders-without-papi: true
  # Rank glyphs are visually wider than their texture: inserts a shift
  # tag after each glyph so the name moves closer to the badge.
  compact-spacing-enabled: true
  compact-shift: -2
  # Additional pixel correction before/after the LP prefix.
  prefix-leading-shift: 0
  prefix-trailing-shift: 0

team-tag:
  # Team tag before the name in public chat.
  enabled: true
  format: "<team_color>[<tag>] "

# Format for /team chat.
team-chat:
  format: "<gray>[Team] <<team_color>><player><gray>: <white><message>"

# Format for /team allychat (team + allies).
ally-chat:
  format: "<gray>[Ally] <<team_color>><player><gray>: <white><message>"

# Admin format for spied team/ally chat (/teama chatspy).
chatspy:
  format: "<dark_gray>[<red>Spy<dark_gray>] [<team_color><team><dark_gray>] <gray><player><dark_gray>: <gray><message>"
```

## Complete example config

```yaml
enabled: true

format: "<display_name><gray> » <white><message>"
display-name-format: "<lp_prefix><team_tag><player>"

luckperms:
  prefix-enabled: true
  suffix-enabled: false

nexo-glyphs:
  resolve-placeholders-without-papi: true
  compact-spacing-enabled: true
  compact-shift: -3
  prefix-leading-shift: 0
  prefix-trailing-shift: 1

team-tag:
  enabled: true
  format: "<team_color><bold>[<tag>]</bold> "

team-chat:
  format: "<dark_green>[Team] <green><player><gray>: <white><message>"

ally-chat:
  format: "<dark_aqua>[Ally] <aqua><player><gray>: <white><message>"

chatspy:
  format: "<dark_gray>[<red>Spy<dark_gray>] <gray><team>/<player>: <message>"
```
