# Tablist

Formats the tablist with LuckPerms prefix/suffix, team tags, nicknames and optional Nexo glyphs, plus header/footer and an optional fixed tab layout with defined slots. Sorting follows the LuckPerms group weight (higher `weight` = higher up), AFK players get the marker from the [AFK module](afk.html). The module has no commands of its own.

> **Note:** When the module is disabled, CoreEngine does not touch the tablist at all; external tablist plugins like TAB run without conflicts. When disabling via `/ce reload`, the tablist is reset to the Minecraft default once.

> **Tip:** Chat and tablist format use the same placeholder building blocks (`<lp_prefix>`, `<team_tag>`, `<player>`, ...) but are configured independently (see [Chat Format](chat.html)). For text prefixes like `[Admin]` the module automatically ensures exactly one space before the name.

## Configuration (modules/tab.yml)

```yaml
# Enables or disables tablist formatting, header/footer and layout.
enabled: true

# Layout of the player name in the tablist. <player> automatically shows
# the nickname if set.
format: "<lp_prefix><font:minecraft:default><team_tag><player><font:minecraft:default>"

# Multi-line text above the player list. MiniMessage plus %online%,
# %max_players% and PlaceholderAPI placeholders.
header:
  enabled: false
  lines:
    - "<gold>My Server"

# Text below the player list, same formatting.
footer:
  enabled: false
  lines:
    - "<gray>Online: <white>%online%<gray>/%max_players%"

# How often header/footer placeholders refresh (20 ticks = 1s).
# 0 = only on join and after reload.
header-footer-update-interval-ticks: 100

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

nexo-glyphs:
  # Like the chat format: resolves Nexo placeholders even without
  # PlaceholderAPI; shift values correct spacing around glyph prefixes.
  resolve-placeholders-without-papi: true
  compact-spacing-enabled: false
  compact-shift: 0
  prefix-leading-shift: 0
  prefix-trailing-shift: 2

team-tag:
  # Team tag before the name. Changes to tag/color/team automatically
  # refresh the tablist of all members.
  enabled: true
  format: "<team_color>[<tag>] "

layout:
  # Fixed layout: hides real player entries and shows defined slots
  # (Minecraft supports at most 80).
  enabled: false
  slot-count: 20
  # true = unused slots stay visible as gaps (empty-slot-text).
  fill-empty-slots: false
  # Refresh interval in ticks. Too low = server load,
  # too high = joins appear delayed.
  update-interval-ticks: 20
  # Fixed text slots in the format "SlotNumber|Text".
  fixed-slots: []
  # Slot ranges for real players, e.g. "2-20".
  player-slots:
    - "2-20"
  # Format for players in the reserved slots.
  player-format: "<lp_prefix><font:minecraft:default><team_tag><player><font:minecraft:default>"
  # Placeholder text for empty slots (only with fill-empty-slots true).
  empty-slot-text: " "
  # Ping bar for fixed/empty slots (0 = hidden).
  fixed-ping: 0
  empty-ping: 0
```

## Complete example config

```yaml
enabled: true

format: "<lp_prefix><font:minecraft:default><team_tag><player><font:minecraft:default>"

header:
  enabled: true
  lines:
    - "<gold>━━━ My Server ━━━"
    - "<gray>Welcome!"

footer:
  enabled: true
  lines:
    - "<gray>Online: <white>%online%<gray>/%max_players%"

header-footer-update-interval-ticks: 100

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

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

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

layout:
  enabled: true
  slot-count: 25
  fill-empty-slots: false
  update-interval-ticks: 20
  fixed-slots:
    - "1|<gold>━━━ SERVER ━━━"
    - "2|<yellow>Online: <white>%online%"
    - "25|<gray>example.com"
  player-slots:
    - "3-24"
  player-format: "<lp_prefix><team_tag><player>"
  empty-slot-text: " "
  fixed-ping: 0
  empty-ping: 0
```
