Skip to content

Messages

You can change almost every message in Plex. This page shows the messages.yml file. The file is at /plugins/Plex/messages.yml.

Below is the default messages.yml file.

/plugins/Plex/messages.yml
# Plex Messages File
# This file uses the MiniMessage system.
# Documentation available at https://docs.papermc.io/adventure/minimessage/format/
# Messages in here will be placed in for certain commands, actions, etc.
# Warning: not all commands have customizable messages
# Dynamic values use native MiniMessage tags such as <player> and <count>.
# Available tags are documented above each message. Tags are optional and may be repeated.
# <view_notes> adds the notes command click action to the text inside it.
# Existing message files must be updated to this syntax; brace placeholders are not supported.
# <appeal_url> - Appeal URL
# <reason> - Reason
# <expires_in> - Expiry
# <punisher> - Punisher
banMessage: "<red>You have been banned! You may appeal at <gold><appeal_url>.\n<red>Reason: <gold><reason>\n<red>Expires in <gold><expires_in>\n<red>Banned by: <gold><punisher>"
# <reason> - Reason
# <expires_in> - Expiry
banStatus: "<red>Banned <dark_gray>• <gold><reason> <dark_gray>• <yellow>Expires in <expires_in>"
# <appeal_url> - Appeal URL
# <reason> - Reason
# <expires_in> - Expiry
# <punisher> - Punisher
banCapacityMessage: "<red>You are banned and all spectator slots are occupied. You may appeal at <gold><appeal_url>.\n<red>Reason: <gold><reason>\n<red>Expires in <gold><expires_in>\n<red>Banned by: <gold><punisher>"
bannedPriorityKick: "<red>A regular player needed your spectator slot. Reconnect when space is available."
# <reason> - Reason
# <punisher> - Punisher
kickMessage: "<red>You have been kicked! \n<red>Reason: <gold><reason>\n<red>Kicked by: <gold><punisher>"
# <type> - The type of indefinite ban
# <appeal_url> - Appeal URL
indefBanMessage: "<red>Your <type> is indefinitely banned! You may appeal at <gold><appeal_url>."
# <type> - The type of indefinite ban
# <appeal_url> - Appeal URL
# <reason> - The reason
indefBanMessageReason: "<red>Your <type> is indefinitely banned! You may appeal at <gold><appeal_url>.\n<red>Reason: <gold><reason>"
playerNotFound: "<red>Player not found!"
specifyPlayer: "<red>You must specify a player!"
worldNotFound: "<red>World not found!"
correctUsagePrefix: "<yellow>Correct Usage: "
# This will always be used for punishments where the sanctioning administrator has not provided a reason. Will ignore MiniMessage tags.
noReasonProvided: "No reason provided."
# <world> - The world you have been teleported to
playerWorldTeleport: "<aqua>You have been teleported to <world>."
# <sender> - The person who is freezing
# <player> - The person who has been frozen
frozePlayer: "<red><sender> - Froze <player>"
# <sender> - The person who is unfreezing
# <player> - The person who has been unfrozen
unfrozePlayer: "<aqua><sender> - Unfroze <player>"
# <sender> - The command sender
# <player> - The person who has been muted
mutedPlayer: "<red><sender> - Muted <player>"
# <sender> - The command sender
# <player> - The person who has been unmuted
unmutedPlayer: "<aqua><sender> - Unmuted <player>"
invalidTimeFormat: "<red>Invalid time format. Use s, m, h, d, w, mo, or y (e.g., 1h30m)."
timeMustBeFuture: "<red>The specified time must be in the future."
# <sender> - The command sender
# <player> - The person who has been muted
# <duration> - The time that the person is muted for
tempMutedPlayer: "<red><sender> - Muted <player> for <duration>"
maxTimeExceeded: "<red>The specified time must be under a week."
# <sender> - The person who is locking up
# <player> - The person who has been locked up
lockedUpPlayer: "<aqua><sender> - Locking up <player>"
# <sender> - The person who is unlocking
# <player> - The person who has been unlocked
unlockedPlayer: "<aqua><sender> - Unlocking <player>"
# <permission> - The permission node required to use the command
noPermissionNode: "<red>You must have the permission: <permission> <red>to use this command!"
noPermissionInGame: "<red>You must be in console to use this command!"
noPermissionConsole: "<red>You must be in-game to use this command!"
spectatorTeleportDenied: "<red>You do not have permission to teleport while spectating."
gameModeCommandBlocked: "<red>The vanilla gamemode command is disabled. Use the Essentials gamemode command or the gamemode switcher instead."
consoleMustDefinePlayer: "<red>You must define a player since you are running this command from console."
# <world> - The world name
teleportedToWorld: "<aqua>You have been teleported to the <world>."
higherRankThanYou: "<red>This player is an admin or a higher rank than you."
consoleOnly: "<red>This command can only be executed by the console."
# <sender> - The command sender
# <player> - The player
banningPlayer: "<red><sender> - Banning <player>"
# <sender> - The command sender
# <username> - The username
banningName: "<red><sender> - Banning username <username>"
# <sender> - The command sender
# <ip> - The IP address
banningIp: "<red><sender> - Banning IP <ip>"
invalidUsername: "<red>That is not a valid Minecraft username."
invalidIpOrPlayer: "<red>Specify a valid IP address or a player with a known IP address."
nameAlreadyBanned: "<red>That username is already banned."
ipAlreadyBanned: "<red>That IP address is already banned."
# <sender> - The command sender
# <player> - The player
unbanningPlayer: "<aqua><sender> - Unbanning <player>"
playerNotBanned: "<red>That player is not banned!"
playerNotFrozen: "<red>That player is not frozen!"
playerNotMuted: "<red>That player is not muted!"
playerBanned: "<red>That player is already banned!"
playerFrozen: "<red>That player is already frozen!"
playerMuted: "<red>That player is already muted!"
muted: "<red>You are currently muted - STFU!"
pvpDisabled: "<red>PVP has been disabled!"
chatIsOff: "<red>Chat is currently toggled off!"
# <sender> - The command sender
# <state> - The set value of the chat toggle
chatToggled: "<red><sender> - Toggled chat <state>"
# <sender> - The command sender
# <player> - The player
kickedPlayer: "<red><sender> - Kicking <player>"
teleportedToWorldSpawn: "<aqua>Teleporting to the local spawn"
toggleCommandSpy: "<gray>CommandSpy has been"
enabled: "<gray>enabled."
disabled: "<gray>disabled."
# <sender> - The player
# <command> - The command
commandSpyFormat: "<gray><sender>: <command>"
# <sender> - The admin / staff member
# <prefix> - The player's group's prefix if any
# <message> - The message
adminChatFormat: '<dark_gray>[<blue>AdminChat<dark_gray>] <dark_red><sender> <prefix> <gray>» <gold><message>'
# <state> - Whether it was toggled on or off
adminChatToggled: '<gray>AdminChat was toggled <state>'
stateEnabled: "<green>enabled"
stateDisabled: "<red>disabled"
stateEnabledUnsafe: "<red>enabled"
stateDisabledSafe: "<green>disabled"
stateOn: "<green>on"
stateOff: "<red>off"
# <max_length> - Maximum length, configured in config.yml
maximumPrefixLength: "<red>The maximum length for a tag may only be <max_length>."
prefixCleared: "<aqua>Your prefix has been cleared."
# <player> - The player name
otherPrefixCleared: "<aqua>You have cleared <player>'s prefix."
# <prefix> - The new prefix
prefixSetTo: "<aqua>Your prefix has been set to <prefix>"
# <action> - The action (blocked / unblocked)
# <count> - The amount of players
blockeditSize: "<gray><action> all block modification abilities for <count> players."
blockeditListEntry: "<gray>- <player>"
blockeditListNone: "<gray>- none"
blockeditAllPlayers: "all players"
blockeditAllNonAdmins: "all non-admins"
blockeditBlockedAction: "Blocked"
blockeditUnblockedAction: "Unblocked"
blockeditBlockedState: "blocked"
blockeditUnblockedState: "unblocked"
# The action (blocked or restored)
editsModified: "<gray>Your block modification abilities have been <state>."
listOfPlayersBlocked: "<gray>The following have block modification abilities restricted:"
# <player> - The player name
editsBlocked: "<gray>Blocked block modification abilities for <player>"
# <sender> - The command sender
# <players> - The player name
blockingEdits: "<red><sender> - Blocking block modification abilities for <players>"
# <sender> - The command sender
# <players> - The player
unblockingEdits: "<aqua><sender> - Unblocking block modification abilities for <players>"
# <player> - The player name
editsUnblocked: "<gray>Unblocked block modification abilities for <player>"
# <sender> - The command sender
# <count> - Number of entities removed
removedEntities: "<red><sender> - Removed <count> entities"
# <sender> - The command sender
# <count> - Number of entities removed
# <types> - Entity type(s) removed
removedEntitiesOfTypes: "<red><sender> - Removed <count> entities of type(s) <types>"
# <entity_type> - Entity type that is invalid
invalidEntityType: "<gray>Notice: Entity type <entity_type> is invalid!"
noRemovedEntities: "<gray>No entities were removed."
# <count> - Number of mobs removed
# <mobs> - Type of mob removed
amountOfMobsRemoved: "<gray><count> <mobs> removed."
mobSingular: "mob"
mobPlural: "mobs"
notAValidMob: "<red>That is not a valid mob."
notAValidMobButValidEntity: "<red>That is a valid entity, but is not a valid mob."
# <sender> - The command sender
# <count> - Number of mobs removed
removedMobs: "<red><sender> - Removed <count> mobs"
# <state> - The boolean for whether the limit is enabled or disabled
mobLimitToggle: "<gray>The mob limit has been <state>"
# <limit> - The amount that the mob limit has been set to
mobLimitSet: "<gray>The mob limit has been set to: <em><white><limit>"
# <status> - The boolean for whether the limit is enabled or disabled
# <count> - The current amount of mobs in the world
# <limit> - The current set mob limit
# <chunk_x> - Chunk x value
# <chunk_z> - Chunk z value
mobLimitStatus: "<gray>(<status><gray>) <em><white><count> <reset><gray>/ <em><white><limit> <reset><gray>per chunk (<em><white>Chunk<gray>: <reset><chunk_x>, <chunk_z><gray>)"
mobLimitCeiling: "<gray>The limit you have entered is too high. Defaulting to the ceiling value from config"
mobLimitEnabled: "<green>Enabled"
mobLimitDisabled: "<red>Disabled"
# <sender> - The command sender
# <message> - The message being said
sayMessage: "<blue>[Server: <sender>] <message>"
# <sender> - The command sender
# <message> - The message being said
consoleSayMessage: "<gray>[Console: <sender>] <white><message>"
# <input> - The number attempted to be parsed
unableToParseNumber: "<red>Unable to parse <input> as a number!"
noNotes: "<red>This player has no notes!"
noteAdded: "<green>Note added."
noteNotFound: "<red>A note with this ID could not be found."
# <id> - The ID of the note removed
removedNote: "<green>Removed note with ID: <id>"
# <count> - The number of notes cleared
clearedNotes: "<green>Cleared <count> notes."
invalidToggle: "<red>That is not a valid toggle."
toggleAvailable: "<gray>Available toggles:"
# <toggle> - The toggle name
# <status> - The toggle status
toggleListItem: "<gray> - <toggle><gray> (<status><gray>)"
# <toggle> - The toggle name
# <status> - The toggle status
toggleCommandResult: "<gray>Toggled <toggle><gray> (<status><gray>)"
# <toggle> - The toggle name
toggleToggled: "<gray>Toggled <toggle>."
toggleMenuTitle: "<green><bold>Toggles"
toggleExplosions: "Explosions"
toggleExplosionsLower: "explosions"
toggleFluidSpread: "Fluid spread"
toggleFluidSpreadLower: "fluid spread"
toggleDrops: "Player drops"
toggleDropsLower: "player drops"
toggleRedstone: "Redstone"
toggleRedstoneLower: "redstone"
togglePvp: "PVP"
togglePvpLower: "PVP"
toggleChat: "Chat"
toggleChatLower: "chat"
specifyLoginMessage: "<red>Please specify a login message."
# <message> - The login message
setOwnLoginMessage: "<gray>Your login message is now:<newline><gray>> <reset><message>"
# <player> - The player
# <message> - The login message
setOtherPlayersLoginMessage: "<gray><player>'s login message is now:<newline><gray>> <reset><message>"
removedOwnLoginMessage: "<gray>Your login message has been removed."
# <player> - The player
removedOtherLoginMessage: "<gray>You removed <player>'s login message."
nameRequired: "<red>Policy requires that you must state your player name in your login message. You can either do this by inserting your name or \\<player>."
groupRequired: "<red>Policy requires that you must state your group in your login message. You can either do this by inserting your configured group title or \\<group>."
groupNotConfigured: "<red>Your primary group does not have a title configured, so it cannot be used in a login message."
# <material> - The material name
# <players> - The players who have the material in their inventory
playersWithMaterial: "<gray>Players with <material> in their inventory: <players>"
# <material> - The material name
# <players> - The players who have the material in their inventory
playersMaterialCleared: "<gray><material> has been removed from the following players: <players>"
nobodyHasThatMaterial: "<gray>No one online has that in their inventory."
# <material> - The attempted material name
materialNotFound: "<red><material> is not a valid item/block name."
# <input> - The string that wasn't a valid integer
notANumber: "<red><input> is not a valid number!"
# <online_count> - Players currently online
# <total_count> - Max players
listHeader: "<gray>There is currently <yellow><online_count><gray> player online out of <yellow><total_count><gray> players."
# <online_count> - Players currently online
# <total_count> - Max players
listHeaderPlural: "<gray>There are currently <yellow><online_count><gray> players online out of <yellow><total_count><gray> players."
# <player> - Player who is having their notes fetched
notesHeader: "Player notes for: <green><player>"
# <id> - Note ID
# <author> - Author of the note
# <date> - Timestamp
notePrefix: "<gold><!italic><id> - Written by: <author> on <date>"
# <content> - The content of the note
noteLine: "<newline><yellow># <content>"
# <player> - The player
# <count> - The number of notes logged for said player
playerNoteAlert: "<gold><player> has <count> note. <view_notes><underlined>Click here to view their note."
# <player> - The player
# <count> - The number of notes logged for said player
playerNoteAlertPlural: "<gold><player> has <count> notes. <view_notes><underlined>Click here to view their notes."
smiteTitleHeader: "<red>You've been smitten."
smiteTitleMessage: "<yellow>Be sure to follow the rules!"
# <player> - The player
# <reason> - The reason for the smite. Will default to noReasonProvided if no reason is specified.
# <sender> - The admin / staff member
smiteBroadcast: "<red><player> has been a naughty, naughty boy.<newline><red> - Reason: <yellow><reason><newline><red> - Smitten by: <yellow><sender>"
# <player> - The player
smittenQuietly: "<gray>Smitten <player> quietly."
# <reason> - The reason for being smitten
smitten: "<red>You've been smitten. Reason: <yellow><reason>"
nukerKickMessage: "Please turn off your nuker!"
nukerTempbanReason: "You are temporarily banned for five minutes for using a Nuker."
antiSpamMessage: "<gray>Please refrain from spamming messages."
# <player> - The player
banExpiredBroadcast: "Plex - Automatically unbanning <player>"
# <player> - The player
redisResetSuccessful: "<yellow>Successfuly reset <player>'s Redis punishments!"
redisResetPlayerNotFound: "Couldn't find player in Redis punishments."
reappliedGamerules: "<aqua>All game rules have been re-applied!"
commandNotFound: "<red>That command could not be found!"
# <command> - The command
# <aliases> - A list of aliases found
commandAliases: "<aqua>Aliases for <command> are: <aliases>"
# <count> - Number of activities found to rollback
rollbackMessage: "<gray>Rolled back <count> activities"
# <error> - Rollback error message
rollbackError: "<red>Rollback failed: <error>"
rollbackNoResult: "<gray>No activities have been rolled back"
punishmentMenuTitle: "<aqua><bold>Punishments"
# <player> - The player
punishedPlayerMenuTitle: "<red><bold>Punishments - <player>"
punishmentPlayerNotFound: '<red>This player does not exist. Try doing /punishments \<player> instead.'
# <count> - The amount of active bans
# <players> - The active ban list
activeBansList: "<gold>Active Bans (<count>): <yellow><players>"
# <count> - The amount of players unbanned
unbannedPlayers: "<gold>Unbanned <count> players."
updateUpToDate: "<green>Plex is up to date on the <channel> channel."
# <version> - The version
# <channel> - The channel
updateAvailable: "<red>Plex <version> is available on the <channel> channel."
updateRunCommand: "<red>Run: /plex update"
# <file> - The file name
updateDownloading: "<green>Downloading latest JAR file: <file>"
updateDownloaded: "<green>New JAR file downloaded and verified successfully."
# <directory> - The directory path
updateDirectoryFailed: "<red>Unable to create update directory: <directory>"
# <artifact> - The artifact name
updateDownloadFailed: "<red>Something went wrong while downloading <artifact>. Please check the log for more information."
# <channel> - The channel
updateMetadataNotFound: "<red>No compatible update is available on the <channel> channel."
# <version> - The Plex version
# <channel> - The channel
# <supported_versions> - The supported Minecraft versions
# <running_version> - The running Minecraft version
updateRequiresMinecraftVersion: "<yellow>No Plex build exists for Minecraft <running_version>. Plex <version> on the <channel> channel supports Minecraft: <supported_versions>."
# <version> - The Plex version
# <channel> - The channel
# <oldest_supported_version> - The oldest supported Minecraft version
# <running_version> - The running Minecraft version
# <supported_versions> - The supported Minecraft versions
updateRequiresNewerMinecraft: "<yellow>Your server is running Minecraft <running_version>, which is older than any version supported by Plex <version> on the <channel> channel (oldest supported: <oldest_supported_version>). Supported versions: <supported_versions>."
# <version> - The Plex version
# <channel> - The channel
# <newest_supported_version> - The newest supported Minecraft version
# <running_version> - The running Minecraft version
# <supported_versions> - The supported Minecraft versions
updateUnsupportedNewerMinecraft: "<yellow>No Plex build exists yet for Minecraft <running_version>. Plex <version> on the <channel> channel supports up to Minecraft <newest_supported_version>. Supported versions: <supported_versions>."
# <error> - The error message
updateMetadataError: "<red>There was an error checking update metadata: <error>"
moduleUpdateDisabled: "<yellow>Skipping <module>; module updates are disabled."
# <updated_count> - The number of modules updated
# <skipped_count> - The number of modules skipped
# <failed_count> - The number of modules that failed to update
moduleUpdateSummary: "<green>Module updates finished: <yellow><updated_count> updated<gray>, <yellow><skipped_count> skipped<gray>, <red><failed_count> failed<gray>. Modules were reloaded after all update attempts completed."
moduleRestartRequired: "<yellow>Module changes applied. Restart the server if module commands do not appear or disappear."
# WorldGuard protection command
protectRegionCreated: "<green>Created WorldGuard region <yellow><region></yellow> with the <yellow><preset></yellow> preset in <yellow><world></yellow>."
protectPresetApplied: "<green>Applied the <yellow><preset></yellow> preset to region <yellow><region></yellow>."
protectRegionRemoved: "<green>Removed region <yellow><region></yellow> from <yellow><world></yellow>."
protectReloaded: "<green>Reloaded protection.yml and synchronized <yellow><count></yellow> managed regions."
protectSelectionIncomplete: "<red>Make a complete WorldEdit selection first, or provide a radius."
protectRegionExists: "<red>A region named <region> already exists or is already managed by Plex."
protectRegionNotFound: "<red>No WorldGuard region named <region> exists in this world."
protectPresetNotFound: "<red>No protection preset named <preset> exists."
protectInvalidRegionId: "<red><region> is not a valid WorldGuard region name."
protectManagerUnavailable: "<red>WorldGuard region support is unavailable for world <world>."
protectInvalidPreset: "<red>The protection configuration is invalid: <error>"
protectInvalidRadius: "<red>The protection radius must be at least 1 block."
protectPlayerOnly: "<red>This protection operation must be run by a player."
protectUnsupportedRegion: "<red>Region <region> is not a cuboid. Plex only manages cuboid regions."
protectManagedOtherWorld: "<red>A Plex-managed region with that name already exists in world <world>."
protectNoRegions: "<gray>Plex is not managing any WorldGuard regions."
protectRegionListHeader: "<gold>Managed protection regions (<count>):"
protectRegionListEntry: "<gray>- <yellow><region></yellow> in <world> (preset: <preset>)"
protectNoPresets: "<gray>No protection presets are configured."
protectPresetListHeader: "<gold>Protection presets (<count>):"
protectPresetListEntry: "<gray>- <yellow><preset></yellow>: <description>"

A banned player may still join in spectator mode when a spectator slot is free. Plex kicks that player with bannedPriorityKick when a regular player needs the slot. Plex shows banCapacityMessage when every spectator slot is already taken.

Plex replaces the player’s own name with <player> and their group title with <group> when they set a login message. The nameRequired and groupRequired messages tell a player to add those values.

Plex uses Oasis for a rollback. If Oasis is not installed, Plex uses CoreProtect. Without either plugin, no rollback runs.

The messages.yml file uses MiniMessage for colors. For example, <aqua> colors the text aqua. This is not like HTML, so you do not close the tag with </aqua>. MiniMessage also has special tags, such as <rainbow>. The default color is gray. For the full MiniMessage guide, see https://docs.advntr.dev/minimessage/format.html.

Values in angle brackets, such as <player> and <count>, are replacement values. Plex fills each one with a value, such as a player name or a number. The comment above each message lists the values for that message. A value is optional, and you can repeat it. Older message files that use {0} and {1} no longer work. Rewrite those messages with the names.

Modules can ship their own message files. A module reads its own messages.yml first, then falls back to the Plex messages for any key that it does not define.

If a command shows No message., your messages.yml file may be missing a key. Plex adds missing keys to your file when it starts, so a restart usually fixes this. You can also compare your file with the default file on GitHub.