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.
Structure
Section titled “Structure”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 { ... }Chat Messages
Section titled “Chat Messages”Prefix
Section titled “Prefix”prefix = "<gray>[<gradient:gold:yellow>Frontier</gradient><gray>]</gray>"The {prefix} placeholder is available in all chat messages and is automatically prepended.
Queue Messages
Section titled “Queue Messages”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}"}| Key | Placeholders |
|---|---|
joined | {ladder} |
left | — |
timeout | {time} |
matchFound | {opponent} |
alreadyQueued | — |
invalidTeam | {ladder}, {reason} |
Match Messages
Section titled “Match Messages”Match messages are split into two sub-sections: outcome for results and flow for match lifecycle events.
match.outcome
Section titled “match.outcome”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>" }}| Key | Placeholders |
|---|---|
victory / defeat | {opponent}, {ratingChange}, {newRating} |
victoryShort / defeatShort | — |
surrender | {player} |
surrenderHint | — |
opponentDisconnected | {opponent} |
declinePenalty | {time} |
ratingChangeWinner / ratingChangeLoser | {ratingChange}, {newRating} |
match.flow
Section titled “match.flow”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
Section titled “Challenge Messages”Challenge messages are split into three sub-sections: send, response, and toggle.
challenge.send
Section titled “challenge.send”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
Section titled “challenge.response”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
Section titled “challenge.toggle”challenge { toggle { toggledOn = "{prefix} <green>Challenges enabled." toggledOff = "{prefix} <red>Challenges disabled." toggledOnShort = "<green>On" toggledOffShort = "<red>Off" }}Spectate Messages
Section titled “Spectate Messages”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."}Team Preview Messages
Section titled “Team Preview Messages”teamPreview { selectMore = "{prefix} <yellow>Select more Pokemon." ready = "{prefix} <green>You are ready!" opponentReady = "{prefix} <gray>Your opponent is ready."}Protection Messages
Section titled “Protection Messages”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 Messages
Section titled “Admin Messages”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 Messages
Section titled “Tournament Messages”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 Messages
Section titled “Milestone Messages”milestone { achieved = "{prefix} <gold><bold>Milestone!</bold></gold> You've reached <yellow>{milestone}</yellow> wins on <white>{ladder}</white>! <green>Check /frontier rewards."}| Key | Placeholders |
|---|---|
achieved | {milestone}, {ladder} |
Season Messages
Section titled “Season Messages”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."}| Key | Placeholders |
|---|---|
ending | {season}, {time} |
ended | {season} |
Turn Timer Messages
Section titled “Turn Timer Messages”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 Messages
Section titled “Error 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."}| Key | Placeholders |
|---|---|
notInMatch | — |
notInQueue | — |
noArenas | — |
banned | {reason} |
onCooldown | {reason}, {time} |
unknownLadder | — |
Tier Colors
Section titled “Tier Colors”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>"}RD Descriptions
Section titled “RD Descriptions”Labels shown in GUIs based on a player’s rating deviation (confidence level):
rdDescriptions { stable = "<green>Stable" uncertain = "<yellow>Uncertain" volatile = "<red>Volatile"}| Key | RD Range |
|---|---|
stable | RD 50 or below |
uncertain | RD 50-100 |
volatile | RD above 100 |
Tooltips
Section titled “Tooltips”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.
MiniMessage Reference
Section titled “MiniMessage Reference”Common tags used in Frontier messages:
| Tag | Purpose |
|---|---|
<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.