Configuration
Configuration
Structure, validation rules, and the complete default Dynamic Join Greetings configuration.
Configuration lives at config/dynamic-join-greetings.json.
After editing the file, apply changes with:
/joingreetings reloadInvalid reloads keep the previously active configuration and print details to the server console.
Complete default configuration
This is the packaged default shipped with documentation version 1.0.4+26.2 (10 first-time greetings and 50 returning greetings):
{
"configVersion": 1,
"enabled": true,
"serverName": "Minecraft Server",
"delayTicks": 40,
"selection": {
"mode": "SHUFFLE_BAG",
"avoidImmediateRepeats": true,
"rememberPerPlayer": true
},
"firstJoin": {
"enabled": true,
"audience": "PLAYER",
"messages": [
{
"id": "first_welcome",
"weight": 1,
"lines": [
"<gold><bold>Welcome to {server}, {player}!</bold></gold>",
"<gray>Your first adventure begins here.</gray>"
]
},
{
"id": "first_new_chapter",
"weight": 1,
"lines": [
"<yellow>Welcome, {player}!</yellow>",
"<gray>A new chapter awaits you on {server}.</gray>"
]
},
{
"id": "first_arrival",
"weight": 1,
"lines": [
"<green>A new traveler has arrived!</green>",
"<gold>Welcome to {server}, {player}.</gold>"
]
},
{
"id": "first_new_face",
"weight": 1,
"lines": [
"<aqua>Welcome, {player}!</aqua>",
"<gray>We are glad you found your way to {server}.</gray>"
]
},
{
"id": "first_beginning",
"weight": 1,
"lines": [
"<gold>Every great story has a beginning.</gold>",
"<yellow>Yours on {server} starts now, {player}.</yellow>"
]
},
{
"id": "first_open_gates",
"weight": 1,
"lines": [
"<yellow>The gates are open, {player}!</yellow>",
"<gray>Welcome to your first day on {server}.</gray>"
]
},
{
"id": "first_fresh_trail",
"weight": 1,
"lines": [
"<green>A fresh trail lies ahead, {player}.</green>",
"<gray>Welcome to {server}!</gray>"
]
},
{
"id": "first_story_begins",
"weight": 1,
"lines": [
"<gold><bold>Your story begins here, {player}.</bold></gold>",
"<gray>Welcome to {server}.</gray>"
]
},
{
"id": "first_home_awaits",
"weight": 1,
"lines": [
"<yellow>Welcome to {server}, {player}!</yellow>",
"<gray>Somewhere out there, a new home awaits.</gray>"
]
},
{
"id": "first_adventure_calls",
"weight": 1,
"lines": [
"<aqua>Adventure is calling, {player}.</aqua>",
"<gold>Welcome to {server}!</gold>"
]
}
]
},
"returningJoin": {
"enabled": true,
"audience": "PLAYER",
"messages": [
{
"id": "return_welcome_back",
"weight": 1,
"lines": [
"<gold>Welcome back, <yellow>{player}</yellow>!</gold>"
]
},
{
"id": "return_adventure",
"weight": 1,
"lines": [
"<yellow>Another adventure awaits, {player}!</yellow>"
]
},
{
"id": "return_home",
"weight": 1,
"lines": [
"<gold>Welcome home, {player}.</gold>",
"<gray>It is good to see you again on {server}.</gray>"
]
},
{
"id": "return_good_to_see_you",
"weight": 1,
"lines": [
"<green>Good to see you again, {player}!</green>"
]
},
{
"id": "return_world_waited",
"weight": 1,
"lines": [
"<aqua>{server} has been waiting for you, {player}.</aqua>"
]
},
{
"id": "return_next_chapter",
"weight": 1,
"lines": [
"<gold>Welcome back, {player}.</gold>",
"<gray>Your next chapter is ready.</gray>"
]
},
{
"id": "return_back_again",
"weight": 1,
"lines": [
"<yellow>Back again, {player}?</yellow>",
"<gray>We knew adventure could not keep you away.</gray>"
]
},
{
"id": "return_trail_continues",
"weight": 1,
"lines": [
"<green>The trail continues, {player}.</green>"
]
},
{
"id": "return_pick_up",
"weight": 1,
"lines": [
"<gold>Welcome back to {server}!</gold>",
"<gray>Pick up right where you left off, {player}.</gray>"
]
},
{
"id": "return_familiar_face",
"weight": 1,
"lines": [
"<aqua>A familiar face returns.</aqua>",
"<yellow>Welcome back, {player}!</yellow>"
]
},
{
"id": "return_gates_open",
"weight": 1,
"lines": [
"<gold>The gates of {server} open once more for {player}.</gold>"
]
},
{
"id": "return_another_day",
"weight": 1,
"lines": [
"<yellow>Another day, another adventure.</yellow>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_world_turns",
"weight": 1,
"lines": [
"<green>The world keeps turning.</green>",
"<gray>Glad to have you back, {player}.</gray>"
]
},
{
"id": "return_ready",
"weight": 1,
"lines": [
"<aqua>Ready for more, {player}?</aqua>"
]
},
{
"id": "return_builds_await",
"weight": 1,
"lines": [
"<gold>Your builds await, {player}.</gold>"
]
},
{
"id": "return_tools_ready",
"weight": 1,
"lines": [
"<yellow>Your tools are ready.</yellow>",
"<gray>Welcome back to {server}, {player}.</gray>"
]
},
{
"id": "return_land_remembers",
"weight": 1,
"lines": [
"<green>The land remembers your footsteps, {player}.</green>"
]
},
{
"id": "return_fire_burning",
"weight": 1,
"lines": [
"<gold>The fire is still burning.</gold>",
"<gray>Welcome home, {player}.</gray>"
]
},
{
"id": "return_paths_open",
"weight": 1,
"lines": [
"<aqua>The paths of {server} are open again, {player}.</aqua>"
]
},
{
"id": "return_good_timing",
"weight": 1,
"lines": [
"<yellow>Perfect timing, {player}.</yellow>",
"<gray>There is always more to discover.</gray>"
]
},
{
"id": "return_adventure_resumes",
"weight": 1,
"lines": [
"<gold>Your adventure resumes now, {player}.</gold>"
]
},
{
"id": "return_missed_you",
"weight": 1,
"lines": [
"<green>{server} missed you, {player}!</green>"
]
},
{
"id": "return_back_home",
"weight": 1,
"lines": [
"<yellow>Back home at last.</yellow>",
"<gray>Welcome, {player}.</gray>"
]
},
{
"id": "return_new_horizon",
"weight": 1,
"lines": [
"<aqua>A new horizon awaits, {player}.</aqua>"
]
},
{
"id": "return_story_continues",
"weight": 1,
"lines": [
"<gold>The story of {player} continues on {server}.</gold>"
]
},
{
"id": "return_server_brighter",
"weight": 1,
"lines": [
"<yellow>{server} is a little brighter with you back, {player}.</yellow>"
]
},
{
"id": "return_welcome_traveler",
"weight": 1,
"lines": [
"<green>Welcome back, traveler.</green>",
"<gray>May the road be kind, {player}.</gray>"
]
},
{
"id": "return_dust_off_tools",
"weight": 1,
"lines": [
"<gold>Dust off your tools, {player}.</gold>",
"<gray>There is work to be done.</gray>"
]
},
{
"id": "return_more_to_build",
"weight": 1,
"lines": [
"<yellow>There is always more to build.</yellow>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_next_project",
"weight": 1,
"lines": [
"<aqua>What is the next project, {player}?</aqua>"
]
},
{
"id": "return_world_alive",
"weight": 1,
"lines": [
"<green>The world feels alive again.</green>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_familiar_ground",
"weight": 1,
"lines": [
"<gold>Familiar ground beneath your feet, {player}.</gold>"
]
},
{
"id": "return_back_in_action",
"weight": 1,
"lines": [
"<yellow>{player} is back in action!</yellow>"
]
},
{
"id": "return_rejoin_friends",
"weight": 1,
"lines": [
"<aqua>Friends, builds, and adventures await.</aqua>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_journey_resumes",
"weight": 1,
"lines": [
"<gold>The journey resumes, {player}.</gold>"
]
},
{
"id": "return_land_calls",
"weight": 1,
"lines": [
"<green>The land of {server} calls you home.</green>"
]
},
{
"id": "return_another_chapter",
"weight": 1,
"lines": [
"<yellow>Another chapter begins today, {player}.</yellow>"
]
},
{
"id": "return_pickaxe_ready",
"weight": 1,
"lines": [
"<gold>Pickaxe ready?</gold>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_base_waiting",
"weight": 1,
"lines": [
"<aqua>Your base has been waiting patiently, {player}.</aqua>"
]
},
{
"id": "return_fires_lit",
"weight": 1,
"lines": [
"<gold>The fires are lit and the doors are open.</gold>",
"<gray>Welcome back to {server}.</gray>"
]
},
{
"id": "return_road_home",
"weight": 1,
"lines": [
"<green>Every road eventually leads home.</green>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_legend_returns",
"weight": 1,
"lines": [
"<gold>A legend returns to {server}.</gold>",
"<yellow>Welcome back, {player}!</yellow>"
]
},
{
"id": "return_time_to_create",
"weight": 1,
"lines": [
"<yellow>Time to create something remarkable, {player}.</yellow>"
]
},
{
"id": "return_good_company",
"weight": 1,
"lines": [
"<aqua>Good worlds deserve good company.</aqua>",
"<gray>Welcome back, {player}.</gray>"
]
},
{
"id": "return_skies_clear",
"weight": 1,
"lines": [
"<green>The skies are clear and adventure awaits, {player}.</green>"
]
},
{
"id": "return_footsteps",
"weight": 1,
"lines": [
"<gold>Once again, your footsteps echo across {server}.</gold>"
]
},
{
"id": "return_workshop_open",
"weight": 1,
"lines": [
"<yellow>The workshop is open, {player}.</yellow>"
]
},
{
"id": "return_world_ready",
"weight": 1,
"lines": [
"<aqua>{server} is ready when you are, {player}.</aqua>"
]
},
{
"id": "return_right_where_left",
"weight": 1,
"lines": [
"<green>Everything is right where you left it.</green>",
"<gray>Probably. Welcome back, {player}!</gray>"
]
},
{
"id": "return_once_more",
"weight": 1,
"lines": [
"<gold>Once more into the world, {player}.</gold>"
]
}
]
}
}
Field reference
| Field | Type | Default | Limits / accepted values | Description |
|---|---|---|---|---|
configVersion | number | 1 | Must be 1 | Configuration schema version. |
enabled | boolean | true | true or false | Master switch for automatic greetings. |
serverName | string | "Minecraft Server" | Non-empty | Value substituted for {server}. |
delayTicks | number | 40 | Integer 0–1200 | Delay before delivery. Twenty ticks ≈ one second. |
selection.mode | enum | "SHUFFLE_BAG" | RANDOM, NO_REPEAT, SHUFFLE_BAG | Message selection strategy. |
selection.avoidImmediateRepeats | boolean | true | true or false | Avoids immediate repeats when another message is available. |
selection.rememberPerPlayer | boolean | true | true or false | Per-player vs shared selection history. |
firstJoin | object | enabled pool | Required object | First-time player message pool. |
returningJoin | object | enabled pool | Required object | Returning player message pool. |
*.enabled | boolean | true | true or false | Enables that pool. |
*.audience | enum | "PLAYER" | PLAYER, BROADCAST, BOTH | Who receives the greeting. |
*.messages | array | packaged defaults | Required; non-empty when enabled | Selectable message entries. |
messages[].id | string | unique ids | Unique within the pool, non-blank | Message identifier. |
messages[].weight | number | 1.0 | Finite and > 0 | Relative selection weight. |
messages[].lines | string[] | one or more lines | At least one line; valid Simplified Text Format | Message body lines. |
Deeper guides
Found a problem in these docs? Report a documentation issue on GitHub.