Custom Join Quit Msg Config
config.yml is the main control file for the Custom Join Quit Msg module. It does not only store text templates. It decides whether vanilla join and quit messages are suppressed, which profile parts are active, how the first join profile is delivered, which join/quit message presets exist, and which permission nodes are generated for selectable options.
Source file:
modules/announce/Custom Join Quit Msg/config.yml
Runtime player choices are saved outside this config in:
modules/announce/Custom Join Quit Msg/player-preferences.yml
If database storage is enabled by the plugin, the same preference data can be stored under the joinquit.preferences namespace instead of only relying on the YAML file.
Module access
The module itself is controlled by the global module path modules.joinquit. When that module setting is enabled, the Custom Join Quit Msg service loads this config and registers the join/quit behavior.
Players need the base permission before they can use the module selector commands:
fiochat.joinquit.use
The command permissions are separate:
fiochat.joinquit.command.join
fiochat.joinquit.command.quit
The plugin also uses toggle permissions for players who want to hide or restore their own view of join/quit message and sound output:
fiochat.joinquit.toggle.join.message
fiochat.joinquit.toggle.join.sound
fiochat.joinquit.toggle.quit.message
fiochat.joinquit.toggle.quit.sound
Those toggle permissions do not choose a preset. They only allow the player to control whether they personally receive the matching join/quit message or sound category.
Generated option permissions
Every selectable option can have its own permission. The module builds those permission nodes from the option id.
fiochat.joinquit.join.message.<preset-id>
fiochat.joinquit.quit.message.<preset-id>
fiochat.joinquit.join.sound.<sound-id>
fiochat.joinquit.quit.sound.<sound-id>
fiochat.joinquit.join.particle.<particle-id>
fiochat.joinquit.quit.particle.<particle-id>
fiochat.joinquit.join.style.<style-id>
fiochat.joinquit.quit.style.<style-id>
For example, the classic join preset is checked as:
fiochat.joinquit.join.message.classic
The selected option is only used if the player is allowed to use it. When a selected join or quit message preset is no longer available or no longer permitted, the module falls back to classic, then default, then the first preset that exists in the loaded map.
Commands
The config header documents these module commands:
/fiochat join
/fiochat quit
/fiochat join opens the join selector flow. /fiochat quit opens the quit selector flow. The available message, sound, particle, and style options shown in those flows are controlled by this config together with sound.yml, particles.yml, and styles.yml.
settings.debug-log
settings:
debug-log: false
debug-log controls extra module logging. Keep it false for normal production use. Set it to true when you need more service-side information while checking selector loading, preference loading, or join/quit delivery behavior.
Vanilla join and quit override
settings:
override-vanilla-join-message: true
override-vanilla-quit-message: true
override-vanilla-join-message decides whether the normal Minecraft join line is removed when the Custom Join Quit Msg module handles a player join.
override-vanilla-quit-message decides whether the normal Minecraft quit line is removed when the Custom Join Quit Msg module handles a player quit.
When these values are true, the module becomes responsible for broadcasting the configured output. When they are false, vanilla output can still appear alongside module output depending on the server event behavior.
Device labels
settings:
device:
java: "Java"
bedrock: "Bedrock"
settings.device.java is the text used when the player is detected as a Java player.
settings.device.bedrock is the text used when the player is detected as a Bedrock player.
These values feed the %device% placeholder used by join, quit, and first-join messages. Change the labels here when you want the same preset text to show different wording without editing every preset line.
Feature switches
what-feature-enabled:
join:
message: true
sounds: true
particles: true
styles: true
quit:
message: true
sounds: true
particles: true
styles: true
These switches affect normal join and quit profiles. They do not affect the first-join profile.
what-feature-enabled.join.message controls whether normal join messages and message-linked visual outputs are active. When this is false, the selected join message preset is not delivered, and message-tied outputs such as action bar, title, boss bar, and toast delivery are also treated as disabled for the normal join profile.
what-feature-enabled.join.sounds controls whether the normal join sound profile can be delivered. When this is false, selected join sounds are not played even if a player has a saved join sound preference.
what-feature-enabled.join.particles controls whether the selected join particle can spawn for the normal join profile.
what-feature-enabled.join.styles controls whether the selected join particle style is used. When this is false, the service falls back to the default style behavior instead of applying a selected style id.
what-feature-enabled.quit.message applies the same message delivery rule to normal quit output.
what-feature-enabled.quit.sounds applies the same sound delivery rule to normal quit output.
what-feature-enabled.quit.particles applies the same particle delivery rule to normal quit output.
what-feature-enabled.quit.styles applies the same style delivery rule to normal quit output.
The selector menus also use these switches to decide whether a category should be available. Disabling a feature is therefore stronger than hiding one option from a selector list.
First join profile
first-join is used for the player's first recorded join. It is separate from the normal preset selector system, and it is not blocked by what-feature-enabled.
first-join.message.enabled
first-join:
message:
enabled: true
When true, the first-join chat lines are broadcast. When false, the first-join chat message section is skipped while other enabled first-join sections can still run.
first-join.message.lines
first-join:
message:
lines:
- "<dark_gray>(<red>%device%</red>)</dark_gray> ..."
lines is a list, so one first-join event can send multiple chat lines. Each line supports MiniMessage-style formatting used by FioChat, the module placeholders, and PlaceholderAPI placeholders when PlaceholderAPI is present.
The current source config contains some mojibake glyphs in the decorative symbols. That is a source file encoding issue, not a separate module feature. You can replace those decorative characters in the YAML with clean symbols or plain text.
first-join.actionbar.enabled
first-join:
actionbar:
enabled: false
When true, the first-join profile sends an action bar message. When false, the action bar part is skipped.
first-join.actionbar.text
first-join:
actionbar:
text: "<yellow>Welcome %player_name% to the server!</yellow>"
text is the exact action bar content sent when the first-join action bar is enabled.
first-join.title.enabled
first-join:
title:
enabled: false
When true, the first-join profile sends a title and subtitle. When false, title output is skipped.
first-join.title.title
first-join:
title:
title: "<gold>Welcome!</gold>"
title is the large top title text.
first-join.title.subtitle
first-join:
title:
subtitle: "<white>%player_name%</white>"
subtitle is the smaller line under the title.
first-join.title.fade-in
first-join:
title:
fade-in: 5
fade-in is the title fade-in duration in ticks.
first-join.title.stay
first-join:
title:
stay: 60
stay is the time the title remains fully visible, in ticks.
first-join.title.fade-out
first-join:
title:
fade-out: 10
fade-out is the title fade-out duration in ticks.
first-join.bossbar.enabled
first-join:
bossbar:
enabled: false
When true, the first-join profile sends a boss bar. When false, the boss bar part is skipped.
first-join.bossbar.title
first-join:
bossbar:
title: "<gold>First time on the server!</gold>"
title is the boss bar text.
first-join.bossbar.color
first-join:
bossbar:
color: "YELLOW"
color is the Bukkit boss bar color name.
first-join.bossbar.style
first-join:
bossbar:
style: "SOLID"
style is the Bukkit boss bar style name.
first-join.bossbar.progress
first-join:
bossbar:
progress: 1.0
progress is the fill amount of the boss bar. 1.0 means full.
first-join.bossbar.seconds
first-join:
bossbar:
seconds: 5
seconds controls how long the boss bar stays visible.
first-join.sound.enabled
first-join:
sound:
enabled: true
When true, the first-join sound is played. When false, the sound part is skipped.
first-join.sound.name
first-join:
sound:
name: "ENTITY_PLAYER_LEVELUP"
name is the Bukkit sound id played by the first-join profile.
first-join.sound.volume
first-join:
sound:
volume: 1.0
volume controls the sound volume.
first-join.sound.pitch
first-join:
sound:
pitch: 1.0
pitch controls the sound pitch.
first-join.particle.enabled
first-join:
particle:
enabled: true
When true, the first-join particle is spawned at the player location.
first-join.particle.type
first-join:
particle:
type: "TOTEM"
type is the Bukkit particle id used by the first-join profile.
first-join.particle.count
first-join:
particle:
count: 50
count is the number of particle instances requested from the server.
first-join.particle.offset-x
first-join:
particle:
offset-x: 0.5
offset-x is the horizontal X spread around the player.
first-join.particle.offset-y
first-join:
particle:
offset-y: 1.0
offset-y is the vertical spread around the player.
first-join.particle.offset-z
first-join:
particle:
offset-z: 0.5
offset-z is the horizontal Z spread around the player.
first-join.particle.extra
first-join:
particle:
extra: 0.02
extra is passed as the particle's extra data value. Bukkit particles commonly use this value as speed, but the exact meaning depends on the particle type.
Join and quit presets
presets:
join:
classic:
display: "<green>Classic Join</green>"
material: "PAPER"
message: "<green>+</green> <white>%player_name%</white> <gray>joined the server.</gray>"
quit:
classic:
display: "<red>Classic Quit</red>"
material: "PAPER"
message: "<red>-</red> <white>%player_name%</white> <gray>left the server.</gray>"
presets.join contains the selectable join message presets.
presets.quit contains the selectable quit message presets.
The current source defines these ids for both join and quit:
classic
vanilla
minimalist
cheerful
royal
fantasy
cyber
fiery
ocean
spooky
epic
Each preset id becomes part of the dynamic permission node. Keep ids lowercase and stable when players already have saved preferences, because the saved value points to the id.
display
display is the name shown in the selector menu. It supports the same text formatting style used by the rest of the module.
material
material is the Bukkit material used as the selector icon for that preset.
message
message is the chat line that is broadcast when the preset is selected and allowed. It can use module placeholders such as %player_name%, %player_displayname%, %player_world%, %device%, and %server_unique_joins%. PlaceholderAPI placeholders are also processed when PlaceholderAPI is available.
Runtime message overrides
The service also reads optional messages.* keys even though the default source config focuses on presets and first-join content. These optional keys let you override command feedback such as usage text, feature-disabled text, players-only text, no-permission text, selected-join text, selected-quit text, no-presets text, toggle usage, and toggle enabled or disabled messages.
Use these only when you want to customize command feedback. They do not replace presets.join, presets.quit, or first-join.
This page is source-backed and includes a short callout so the content reads like a guide instead of plain reference text.