# Join & Leave

Join/leave messages in three levels: personal (self-set) over group (LuckPerms) over global. Plus optional first-join message, MOTD, sounds, titles and action bar. Vanished players trigger none of these effects.

## Commands

| Command | Syntax | Permission | Default | Description |
|---|---|---|---|---|
| `/joinmsg set` | `/joinmsg set <message>` | `joinleave.setjoin` | `true` | Set your personal join message |
| `/joinmsg reset` | `/joinmsg reset` | `joinleave.setjoin` | `true` | Delete your personal join message |
| `/joinmsg preview` | `/joinmsg preview` | `joinleave.setjoin` | `true` | Preview the current join message |
| `/joinmsg reload` | `/joinmsg reload` | `joinleave.admin` | `false` | Reload the configuration |
| `/leavemsg set` | `/leavemsg set <message>` | `joinleave.setleave` | `true` | Set your personal leave message |
| `/leavemsg reset` | `/leavemsg reset` | `joinleave.setleave` | `true` | Delete your personal leave message |
| `/leavemsg preview` | `/leavemsg preview` | `joinleave.setleave` | `true` | Preview the current leave message |

## Additional permissions

| Permission | Default | Description |
|---|---|---|
| `joinleave.colors` | `true` | MiniMessage colors in personal messages (plain text otherwise) |

**Placeholders:** `<player>` (name), `<display_name>` (with [nick](nick.html)), `<player_count>`, `<date>`, `<time>`.

> **Note:** [Vanished](moderation.html#vanish) players trigger no messages, sounds or titles; this also applies to third-party plugins using the same metadata key.

## Configuration (modules/joinleave.yml)

```yaml
# Enables or disables the join/leave module.
enabled: true

joinleave:
  # Secondary switch for the effects.
  enabled: true
  # Character limit for personal messages.
  max-message-length: 256
  # Format of the <date> and <time> placeholders.
  date-format: "yyyy-MM-dd"
  time-format: "HH:mm"
  # Global messages; overridden by group and personal messages.
  # first-join-message replaces join-message on the very first join.
  join-message: "<green>+ <yellow><player> <green>joined the server! <gray>(<player_count> online)"
  leave-message: "<red>- <yellow><player> <red>left the server. <gray>(<player_count> online)"
  first-join-message: "<gold>✦ <yellow><player> <gold>joined the server for the first time! Welcome!"
  # Messages per LuckPerms group. Order = priority: with multiple groups
  # the first listed one wins.
  groups: {}
  # inherited = checks all inherited groups (default).
  # primary = only the LuckPerms primary group (faster).
  group-resolution-mode: inherited
  motd:
    # Sends these lines to the player after login (MiniMessage,
    # placeholders allowed). Independent of the server list MOTD.
    enabled: false
    lines:
      - "<gold>Welcome back, <display_name><gold>!"
  sounds:
    join:
      broadcast:
        # Heard by all players on join.
        enabled: false
        sound: "entity.player.levelup"
        volume: 0.5
        pitch: 1.2
      self:
        # Heard only by the joining player.
        enabled: false
        sound: "entity.experience_orb.pickup"
        volume: 1.0
        pitch: 1.0
    leave:
      broadcast:
        enabled: false
        sound: "entity.enderman.teleport"
        volume: 0.5
        pitch: 0.8
  title:
    # Title/subtitle on join. Times in ticks.
    enabled: false
    title: "<gold>Welcome!"
    subtitle: "<gray>Have fun on the server!"
    fade-in: 10
    stay: 40
    fade-out: 20
  actionbar:
    # Message above the hotbar on join. duration in ticks.
    enabled: false
    text: "<yellow>Welcome, <display_name><yellow>!"
    duration: 60
  vanish:
    # Suppresses all effects for players marked invisible.
    enabled: true
    metadata-key: "vanished"
```

## Complete example config

```yaml
enabled: true

joinleave:
  enabled: true
  max-message-length: 128
  date-format: "yyyy-MM-dd"
  time-format: "HH:mm"
  join-message: "<green>» <yellow><display_name> <green>is now online <gray>(<player_count>)"
  leave-message: "<red>« <yellow><display_name> <red>is now offline"
  first-join-message: "<gold>✦ Welcome <yellow><player> <gold>to the server!"
  groups:
    admin:
      join: "<red>⚡ <gold><player> <red>(Staff) <gold>joined!"
      leave: "<red>⚡ <gold><player> <red>(Staff) <gold>left."
    vip:
      join: "<yellow>★ <gold><player> <yellow>(VIP) <gold>arrived!"
      leave: "<yellow>★ <gold><player> <yellow>(VIP) <gold>left the server."
  group-resolution-mode: inherited
  motd:
    enabled: true
    lines:
      - "<gradient:#ff6600:#ffaa00>━━━━━━━━━━━━━━━━━━</gradient>"
      - "  <gold>Welcome back, <display_name><gold>!"
      - "  <gray>Online: <yellow><player_count>"
      - "<gradient:#ff6600:#ffaa00>━━━━━━━━━━━━━━━━━━</gradient>"
  sounds:
    join:
      broadcast:
        enabled: false
        sound: "entity.player.levelup"
        volume: 0.5
        pitch: 1.2
      self:
        enabled: true
        sound: "entity.experience_orb.pickup"
        volume: 1.0
        pitch: 1.0
    leave:
      broadcast:
        enabled: false
        sound: "entity.enderman.teleport"
        volume: 0.5
        pitch: 0.8
  title:
    enabled: true
    title: "<gold>Welcome!"
    subtitle: "<gray>Have fun!"
    fade-in: 10
    stay: 40
    fade-out: 20
  actionbar:
    enabled: false
    text: ""
    duration: 60
  vanish:
    enabled: true
    metadata-key: "vanished"
```
