BlockyJoin

BlockyJoin

Folia Paper 1.21+ v1.1.1

GUI-based join and leave message plugin for Paper and Folia servers. Ships with 30+ customisable message sets, HEX colour support, a private MOTD system with player head rendering, first-join rewards, configurable fireworks, spawn teleportation and full vanish plugin compatibility.

Overview

BlockyJoin replaces default join and leave messages with a fully configurable system. Each "message set" is a YAML file that defines join messages, leave messages, GUI appearance, sounds and permissions independently. Multiple sets can be active simultaneously — the plugin selects the correct one based on each player's permission level.

Soft Dependencies

  • PlaceholderAPI — enables %placeholder% usage in all messages
  • Vanish Plugins — SuperVanish, PremiumVanish, Essentials, CMI, VanishNoPacket — suppresses messages for vanished staff automatically

Live reload. Run /bj reload after editing any file — no restart needed.

Installation

  1. Download BlockyJoin from BuiltByBit
  2. Place the JAR in your plugins/ folder
  3. Start or restart the server — config.yml, messages.yml, menu.yml and join-leave-messages.yml generate automatically
  4. Edit plugins/BlockyJoin/config.yml and the files in plugins/BlockyJoin/messages/
  5. Run /bj reload to apply changes

No hard dependencies. All vanish integrations and PlaceholderAPI support are loaded automatically when those plugins are present.

Configuration

Message Type

Controls how the join message is delivered to all online players.

config.yml
message-type: "CHAT"  # CHAT | ACTIONBAR | TITLE | BOSSBAR | TOAST
default-message-set: "default"

Join and Leave Messages

Fallback messages used when no message set is matched for a player.

config.yml
join:
  enabled: true
  sound:   BLOCK_NOTE_BLOCK_PLING;7;5
  messages:
    - "<#49FF00>[+] {player}"

leave:
  enabled: true
  messages:
    - "<#FF3232>[-] {player}"

First Join

Separate messages sent only when a player connects for the first time. Supports {total_new_joins} to display a running count.

config.yml
first-join:
  enabled:          true
  random-message:   true
  spawn-on-first-join: false
  sound:            ENTITY_PLAYER_LEVELUP;7;5
  messages:
    - "<#CB1FE9>Welcome {player} to the server! [{total_new_joins}]"

Fireworks

config.yml
firework:
  enabled:          true
  first-join-only:  false
  type:             BALL_LARGE
  power:            1
  flicker:          true
  trail:            true
  colors:           [AQUA, RED, TEAL, WHITE]
  height:           1.0    # blocks above player eye level
  delay-ticks:      20

GUI Settings

config.yml
gui:
  shift-left-click:  favorite         # favorite | select | none
  shift-right-click: remove-favorite
  left-click:        select
  right-click:       select
  confirm-selection-gui:
    enabled: true
  favorite-gui:
    enabled: true

Database

config.yml
database:
  type: "SQLITE"  # SQLITE | MYSQL
  mysql:
    host:     "localhost"
    port:     3306
    database: "blockyjoin"
    username: "root"
    password: "password"

Message Sets

Message sets live in plugins/BlockyJoin/join-leave-messages.yml as named keys. Each set defines its own join messages (supports multiple for random selection), leave messages, GUI item, permission node and whether the item glows when selected.

Built-in Sets

BlockyJoin ships with two built-in sets: default (simple green/red prefixed messages) and king (royal-themed messages with random selection, locked behind blockyjoin.set.king). Additional sets can be added freely.

Set Structure

join-leave-messages.yml
messages:
  my-set:
    join:
      - "<#49FF00>[+] <white>{player} joined!"
      - "<#49FF00>[+] <white>Welcome, {player}!"   # random per join
    leave:
      - "<#FF3232>[-] <white>{player} left."
    item:
      material: "PLAYER_HEAD"
      skull:    "<base64-texture>"
      name:     "<white>My Set {favorite-icon}"
      lore:
        - ""
        - "<white>Preview your set here."
        - ""
        - "{info-lore}"
    permission:      "blockyjoin.set.my-set"
    glow-on-select:  true

Placeholders in Messages

variables
{player}          Player username
{online_count}    Current player count
{max_players}     Server max players
{total_new_joins} All-time first-join counter

MOTD

A private multi-line message sent directly to each player on join. Supports player head rendering — {player_head_1} through {player_head_8} render the player's own face texture alongside the text lines.

config.yml
motd:
  enabled:     true
  delay-ticks: 20   # 1 second delay before sending
  lines:
    - "{player_head_1}  <white>Welcome to <#CB1FE9>YourServer<white>, <#CB1FE9>{player}<white>."
    - "{player_head_2}  "
    - "{player_head_3}  <white>Store: <#FFD700>store.example.com"
    - "{player_head_4}  <white>Discord: <#7289DA>discord.gg/example"
    - "{player_head_8}  <white>Type <#CB1FE9>/help <white>if you need support."

Welcome Rewards

Players can earn rewards by welcoming new joiners in chat. Configure the trigger words, reward commands and a time window after which the new player can no longer be welcomed.

config.yml
first-join:
  welcome-rewards:
    enabled:       true
    welcome-words:  [welcome, "welcome {player}", wb, "wb {player}"]
    time-window:   15    # seconds after join to allow welcoming
    cooldown:      300   # seconds between welcomes per player
    exact-match:   false
    commands:
      - "[MESSAGE] &aThanks for welcoming {player}!"
      - "[CONSOLE] give {welcomer} minecraft:diamond 5"
      - "[SOUND] ENTITY_PLAYER_LEVELUP {welcomer} 1 1"

Commands

Base command: /blockyjoin — aliases /bj, /blockyj, /joinmessages, /jmsg (configurable).

/bj helpblockyjoin.help
List all commands.
/bj reloadblockyjoin.reload
Reload all message set files and config.yml without restarting.
/bj listblockyjoin.list
List all loaded message sets.
/bj guiblockyjoin.gui
Open the message set selection GUI.
/bj set <set>blockyjoin.set
Set your own active message set.
/bj set <set> <player>blockyjoin.set.other
Set another player's active message set.
/bj testblockyjoin.test
Preview the current join or leave message without triggering a real join or leave.
/bj updateblockyjoin.update.check
Check for the latest version on BuiltByBit.
/bj setspawnblockyjoin.admin
Save the current location as the configured spawn point.

Permissions

Node Default Description
blockyjoin.*opAll BlockyJoin permissions.
blockyjoin.reloadopUse /bj reload.
blockyjoin.guitrueOpen the message set GUI.
blockyjoin.testopPreview messages with /bj test.
blockyjoin.settrueChange your own message set.
blockyjoin.set.otheropChange another player's message set.
blockyjoin.listopList all loaded sets.
blockyjoin.adminopAdmin commands including /bj setspawn.
blockyjoin.update.checkopCheck for updates via /bj update.
blockyjoin.update.notifyopReceive update notifications on join.
blockyjoin.set.kingopAccess the king message set.
i

Custom set permissions follow the pattern blockyjoin.set.<setname>. Assign this to LuckPerms groups to control access per set.

Advanced

Spawn System

config.yml
spawn-settings:
  enabled:           false
  spawn-on-join:     false    # teleport all players to spawn on every join
  void-teleport:
    enabled:         false
    trigger-level:   -90    # Y level below which players are teleported
    no-damage:       true

Use /bj setspawn to save the current location, or configure coordinates manually in config.yml.

Vanish Behaviour

config.yml
vanish:
  show-messages: false  # show join/leave messages for vanished players
  fake-messages: false  # send fake leave/join when vanishing/unvanishing

Command Customisation

config.yml
command:
  name:    "blockyjoin"    # rename the main command
  aliases:
    - "bj"
    - "joinmessages"
    - "jmsg"