Skip to content

Messages

File: config/frontier/messages.conf

All player-facing text in Frontier is configurable through this file. Messages use MiniMessage format for rich text styling.

The messages config is organized into four top-level sections:

chat {
prefix = "<gray>[<gradient:gold:yellow>Frontier</gradient><gray>]</gray>"
queue { ... }
match {
outcome { ... }
flow { ... }
}
challenge {
send { ... }
response { ... }
toggle { ... }
}
spectate { ... }
teamPreview { ... }
protection { ... }
admin { ... }
tournament { ... }
milestone { ... }
season { ... }
turnTimer { ... }
error { ... }
}
rdDescriptions { ... }
tierColors { ... }
tooltips { ... }
prefix = "<gray>[<gradient:gold:yellow>Frontier</gradient><gray>]</gray>"

The {prefix} placeholder is available in all chat messages and is automatically prepended.

queue {
joined = "{prefix} <green>You have joined the <white>{ladder}</white> queue."
left = "{prefix} <red>You have left the queue."
timeout = "{prefix} <gray>Your queue timed out after <white>{time}</white>. No match was found."
matchFound = "{prefix} <green><bold>Match found!</bold></green> Preparing battle against <yellow>{opponent}</yellow>..."
alreadyQueued = "{prefix} <red>You are already in a queue."
invalidTeam = "{prefix} <red>Your team does not meet the requirements for <white>{ladder}</white>. <gray>{reason}"
}
KeyPlaceholders
joined{ladder}
left
timeout{time}
matchFound{opponent}
alreadyQueued
invalidTeam{ladder}, {reason}

Match messages are split into two sub-sections: outcome for results and flow for match lifecycle events.

match {
outcome {
victory = "{prefix} <green><bold>Victory!</bold></green> You defeated <yellow>{opponent}</yellow>!"
victoryShort = "{prefix} <green><bold>Victory!</bold></green>"
defeat = "{prefix} <red><bold>Defeat.</bold></red> You lost to <yellow>{opponent}</yellow>."
defeatShort = "{prefix} <red><bold>Defeat.</bold></red>"
surrender = "{prefix} <yellow>{player}</yellow> has forfeited the match."
surrenderHint = "{prefix} <gray>Use <white>/forfeit</white> to surrender."
opponentDisconnected = "{prefix} <yellow>{opponent}</yellow> disconnected. You win by default!"
declinePenalty = "{prefix} <red>You declined the match. You are on cooldown for <white>{time}</white>."
ratingChangeWinner = "<green>+{ratingChange}</green> <gray>-></gray> <white>{newRating}</white>"
ratingChangeLoser = "<red>{ratingChange}</red> <gray>-></gray> <white>{newRating}</white>"
}
}
KeyPlaceholders
victory / defeat{opponent}, {ratingChange}, {newRating}
victoryShort / defeatShort
surrender{player}
surrenderHint
opponentDisconnected{opponent}
declinePenalty{time}
ratingChangeWinner / ratingChangeLoser{ratingChange}, {newRating}
match {
flow {
arenaQueueWaiting = "{prefix} <yellow>All arenas are in use. You've been queued."
matchFoundTeleporting = "{prefix} <green>Match found! Teleporting to arena..."
randomTeamFailed = "{prefix} <red>Random team generation failed."
teamBuildFailed = "{prefix} <red>Failed to build your team."
emptyTeam = "{prefix} <red>Your team is empty."
battleStartFailed = "{prefix} <red>Battle creation failed."
returnedAfterInterruption = "{prefix} <yellow>You've been returned after a match interruption."
previewTimeout = "{prefix} <red>Team preview timed out."
timeLimitDraw = "{prefix} <yellow>Match time limit reached. The match is a draw."
waitingForOpponent = "{prefix} <gray>Waiting for opponent..."
}
}

Challenge messages are split into three sub-sections: send, response, and toggle.

challenge {
send {
sent = "{prefix} <green>Challenge sent to <yellow>{player}</yellow>!"
cannotChallengeSelf = "{prefix} <red>You can't challenge yourself."
challengerBanned = "{prefix} <red>You are banned from ranked play."
targetBanned = "{prefix} <red>That player is banned from ranked play."
alreadyInMatch = "{prefix} <red>You are already in a match."
targetInMatch = "{prefix} <red>That player is already in a match."
targetHasPending = "{prefix} <red>That player already has a pending challenge."
disabled = "{prefix} <red>That player has challenges disabled."
unknownFormat = "{prefix} <red>Unknown format."
}
}
challenge {
response {
received = "{prefix} <yellow>{player}</yellow> has challenged you! ..."
noPending = "{prefix} <red>You have no pending challenges."
challengeExpired = "{prefix} <gray>The challenge has expired."
challengerOffline = "{prefix} <red>The challenger is no longer online."
acceptBanned = "{prefix} <red>You are banned from ranked play."
acceptChallengerBanned = "{prefix} <red>The challenger is banned from ranked play."
playerInMatch = "{prefix} <red>One of you is already in a match."
acceptedToChallenger = "{prefix} <green>{player} accepted your challenge!"
acceptedToTarget = "{prefix} <green>Challenge accepted! Preparing battle..."
declinedToTarget = "{prefix} <red>You declined the challenge."
declinedToChallenger = "{prefix} <red>{player} declined your challenge."
}
}

The received message includes clickable [Accept] and [Decline] buttons using MiniMessage’s click tag.

challenge {
toggle {
toggledOn = "{prefix} <green>Challenges enabled."
toggledOff = "{prefix} <red>Challenges disabled."
toggledOnShort = "<green>On"
toggledOffShort = "<red>Off"
}
}
spectate {
stopSpectating = "{prefix} <gray>You stopped spectating."
usage = "{prefix} <gray>Usage: /ranked spectate <player>"
cannotWhileInMatch = "{prefix} <red>You can't spectate while in a match."
targetNotInMatch = "{prefix} <red>That player is not in a match."
nowSpectating = "{prefix} <green>Now spectating <yellow>{player}</yellow>."
spectateFailed = "{prefix} <red>Failed to start spectating."
}
teamPreview {
selectMore = "{prefix} <yellow>Select more Pokemon."
ready = "{prefix} <green>You are ready!"
opponentReady = "{prefix} <gray>Your opponent is ready."
}
protection {
commandBlockedInMatch = "{prefix} <red>You can't use that command during a match."
commandBlockedInQueue = "{prefix} <red>You can't use that command while in queue."
pcBlockedInQueue = "{prefix} <red>You can't access PC while in queue."
tradeBlocked = "{prefix} <red>You can't trade during ranked play."
}
admin {
reloadSuccess = "{prefix} <green>Config reloaded successfully."
reloadFailed = "{prefix} <red>Config reload failed."
forceEndSuccess = "{prefix} <green>Match force-ended."
forceEndNotInMatch = "{prefix} <red>That player is not in a match."
setRatingSuccess = "{prefix} <green>Rating updated."
setRatingFailed = "{prefix} <red>Failed to update rating."
resetRatingSuccess = "{prefix} <green>Rating reset."
resetRatingFailed = "{prefix} <red>Failed to reset rating."
banSuccess = "{prefix} <green>Player banned."
banNotify = "{prefix} <red>You have been banned from ranked play."
unbanSuccess = "{prefix} <green>Player unbanned."
playerMustBeOnline = "{prefix} <red>Player must be online."
arena { ... }
importing { ... }
}

The arena sub-section contains all arena builder wizard messages (sessionExists, alreadyExists, builderStarted, positionSet, wrongStep, spectatorSet, spectatorNotReady, donePrompt, sessionNotFound, notReady, saved, cancelled, deleted, notFound, listEmpty, listHeader).

The importing sub-section contains Joagar import messages (dbNotFound, starting, complete, failed).

tournament {
registration {
registered = "..."
teamLocked = "..."
unregistered = "..."
teamInvalid = "..."
alreadyRegistered = "..."
notRegistered = "..."
registrationClosed = "..."
tournamentFull = "..."
waitlistPromoted = "..."
disqualified = "..."
}
match {
matchReady = "..."
waitingForOpponent = "..."
opponentNoShow = "..."
eliminated = "..."
tournamentWon = "..."
roundAdvance = "..."
paused = "..."
resumed = "..."
concluded = "..."
seriesUpdate = "..."
finalsAutoTeleport = "..."
}
action {
tournamentNotFound = "..."
lockedTeamsHidden = "..."
noLockedTeam = "..."
loadLockedTeamFailed = "..."
unregisterFailed = "..."
}
}
milestone {
achieved = "{prefix} <gold><bold>Milestone!</bold></gold> You've reached <yellow>{milestone}</yellow> wins on <white>{ladder}</white>! <green>Check /frontier rewards."
}
KeyPlaceholders
achieved{milestone}, {ladder}
season {
ending = "{prefix} <yellow><bold>Season Ending!</bold></yellow> <white>{season}</white> ends in <red>{time}</red>. Play your final matches!"
ended = "{prefix} <gold><bold>Season Complete!</bold></gold> <white>{season}</white> has ended. Final standings have been recorded."
}
KeyPlaceholders
ending{season}, {time}
ended{season}
turnTimer {
warning60 = "{prefix} <yellow>60 seconds remaining on your turn timer."
warning30 = "{prefix} <gold>30 seconds remaining!"
warning10 = "{prefix} <red><bold>10 seconds!</bold></red> Make your move!"
expired = "{prefix} <red>Turn timer expired. A random move has been selected."
}

No placeholders — these are static messages.

error {
notInMatch = "{prefix} <red>You are not currently in a match."
notInQueue = "{prefix} <red>You are not currently in a queue."
noArenas = "{prefix} <red>No arenas are available right now. Please try again later."
banned = "{prefix} <red>You are banned from ranked play. <gray>Reason: {reason}"
onCooldown = "{prefix} <red>You are on cooldown for <white>{reason}</white>. Please wait <white>{time}</white>."
unknownLadder = "{prefix} <red>Unknown ladder."
}
KeyPlaceholders
notInMatch
notInQueue
noArenas
banned{reason}
onCooldown{reason}, {time}
unknownLadder

MiniMessage color tags mapped to rank tier names. Used for coloring tier names throughout GUIs and messages.

tierColors {
Unranked = "<gray>"
"Poke Ball" = "<white>"
"Great Ball" = "<blue>"
"Ultra Ball" = "<yellow>"
"Master Ball" = "<light_purple>"
"Beast Ball" = "<gradient:red:gold>"
}

Labels shown in GUIs based on a player’s rating deviation (confidence level):

rdDescriptions {
stable = "<green>Stable"
uncertain = "<yellow>Uncertain"
volatile = "<red>Volatile"
}
KeyRD Range
stableRD 50 or below
uncertainRD 50-100
volatileRD above 100

The tooltips section contains all GUI item display text, organized by GUI screen. Each tooltip has a name and lore list using MiniMessage format.

Tooltip sections: hub, ladder, preview, leaderboard, challenge, rules, rewards, common.

The rewards section includes milestoneClaimed, milestoneUnclaimed (with progress), and seasonRewardItem keys. The challenge section includes title, formatSelector, battleTypeSelector, clauseEnabled, clauseDisabled, and sendChallenge keys. The rules section includes title, clauseItem, bannedSpeciesItem, bannedMoveItem, and formatInfo keys.

Here’s an example from the hub section:

tooltips {
hub {
ladderButton {
name = "<green><bold>Ranked Ladder</bold></green>"
lore = [
"<gray>Queue up for competitive"
"<gray>ranked battles."
""
"<dark_gray>Click to view ladders"
]
}
}
}

All tooltip text supports the same MiniMessage formatting as chat messages. Use <!italic> at the start of item names and lore to prevent Minecraft’s default italic styling.

Common tags used in Frontier messages:

TagPurpose
<gold>Color tag — gold text
<bold>Style tag — bold
<italic>Style tag — italic
<!italic>Anti-style — prevents default italic in lore
<gradient:gold:yellow>Smooth color transition
<click:run_command:'/cmd'>Runs a command on click
<hover:show_text:'tip'>Shows tooltip on hover

For the full MiniMessage spec, see the Adventure documentation.