Main Config
File: config/frontier/config.conf
The main config controls queue behavior, match settings, anti-boost protection, replay recording, sound effects, and post-match teleportation. Here’s what the generated file looks like:
queue { defaultQueueTimeoutSeconds = 600 maxRatingExpansionCap = 500.0 maxRatingExpansionPerSecond = 10.0 tickInterval = 20 allowedCommands = ["ranked", "frontier", "frontiertest", "msg", "r", "reply", "tell", "whisper", "w", "party", "p"] announcementIntervalSeconds = 0 announcementMinPlayers = 1 announcePlayerJoin = false}
match { declineQueueCooldownSeconds = 30 maxMatchDurationTicks = 36000 teamPreviewSeconds = 30 turnTimerInitial = 150 turnTimerMax = 180 turnTimerRegenPerTurn = 10 turnTimerFloor = 30}
antiBoost { blockSameIp = false match1Multiplier = 1.0 match2Multiplier = 0.5 match3PlusMultiplier = 0.1 windowHours = 24}
replay { directory = replays enabled = true}
crossServer { enabled = false role = PARTICIPANT battleServer = "hub" channel = "frontier"}
arenaReturnToOrigin = truefallbackSpawn { world = "minecraft:overworld" x = 0.0 y = 64.0 z = 0.0}
debug = falseQueue Settings
Section titled “Queue Settings”Controls how the matchmaking queue processes and expands rating search ranges over time.
| Field | Type | Default | Description |
|---|---|---|---|
tickInterval | Int | 20 | How often (in ticks) the queue processes matchmaking. 20 = once per second. |
maxRatingExpansionPerSecond | Double | 10.0 | How many rating points the search range expands per second of waiting. |
maxRatingExpansionCap | Double | 500.0 | Maximum total rating range expansion. At cap, a 1500-rated player can match anyone from 1000-2000. |
defaultQueueTimeoutSeconds | Int | 600 | Seconds before a player is automatically removed from the queue. |
allowedCommands | List<String> | ["ranked", "frontier", ...] | Commands allowed while in queue (root command only, case-insensitive). All other commands are blocked and the player sees the protection.commandBlockedInQueue message. PC access is also blocked while in queue. |
announcementIntervalSeconds | Int | 0 | Interval between global queue-size announcements. 0 disables them. |
announcementMinPlayers | Int | 1 | Minimum players required in a queue before it is included in the queue-size announcement. |
announcePlayerJoin | Boolean | false | Broadcast a message whenever someone joins a queue. Players can opt out with /ranked announcements. |
Queue Announcements
Section titled “Queue Announcements”Frontier has two queue-announcement modes:
- Periodic queue-size announcements controlled by
announcementIntervalSecondsandannouncementMinPlayers - Per-player join broadcasts controlled by
announcePlayerJoin
Players can opt out of the join broadcasts for themselves with:
/ranked announcementsMatch Settings
Section titled “Match Settings”Controls the team preview timer, turn timer, and match duration limits.
| Field | Type | Default | Description |
|---|---|---|---|
teamPreviewSeconds | Int | 30 | Duration of the team preview phase before battle. |
turnTimerInitial | Int | 150 | Starting turn timer in seconds. |
turnTimerRegenPerTurn | Int | 10 | Seconds added back to the timer after each turn. |
turnTimerMax | Int | 180 | Maximum the turn timer can reach with regen. |
turnTimerFloor | Int | 30 | Minimum seconds a player always gets after regen. Prevents a death spiral where the timer keeps expiring at ~0s after a timeout penalty. |
declineQueueCooldownSeconds | Int | 30 | Cooldown applied when a player declines a found match. |
maxMatchDurationTicks | Long | 36000 | Maximum match duration in ticks (36000 = 30 minutes). 0 = no limit. |
Anti-Boost Settings
Section titled “Anti-Boost Settings”Prevents rating farming by punishing repeated matchups between the same players.
| Field | Type | Default | Description |
|---|---|---|---|
windowHours | Int | 24 | Time window for tracking repeated matchups. |
match1Multiplier | Double | 1.0 | Rating change multiplier for the first match against an opponent. |
match2Multiplier | Double | 0.5 | Multiplier for the second match in the window. |
match3PlusMultiplier | Double | 0.1 | Multiplier for the third+ match. |
blockSameIp | Boolean | false | Block matchmaking between players on the same IP address. |
Here’s how the multipliers work in practice: if a win would normally give +25 rating, the second match against the same opponent only gives +12.5, and the third gives +2.5. The window resets after windowHours.
Replay Settings
Section titled “Replay Settings”| Field | Type | Default | Description |
|---|---|---|---|
enabled | Boolean | true | Whether to record match replays. |
directory | String | "replays" | Directory to store replay files, relative to the server root. |
Cross-Server Settings
Section titled “Cross-Server Settings”Frontier’s cross-server queue and transfer flow live in the crossServer block:
crossServer { enabled = false role = PARTICIPANT battleServer = "hub" channel = "frontier"}| Field | Type | Default | Description |
|---|---|---|---|
enabled | Boolean | false | Enable cross-server matchmaking and queue forwarding. |
role | ORCHESTRATOR | PARTICIPANT | PARTICIPANT | Exactly one server should be the orchestrator. |
battleServer | String | "hub" | Proxy name of the battle server players should transfer to. |
channel | String | "frontier" | Plugin messaging transfer channel used by Ceremony. |
See Cross-Server Setup for the full topology and queue flow.
Arena Return
Section titled “Arena Return”Controls where players go after a match ends.
| Field | Type | Default | Description |
|---|---|---|---|
arenaReturnToOrigin | Boolean | true | Teleport players back to their original location after a match. |
fallbackSpawn.world | String | "minecraft:overworld" | Fallback world if the original location is unavailable. |
fallbackSpawn.x/y/z | Double | 0.0, 64.0, 0.0 | Fallback coordinates. |
Sounds
Section titled “Sounds”Sound effects for every event. Set any sound to an empty string ("") to disable it.
For a dedicated sound reference, see Sounds.
sounds { volume = 1 pitch = 1 queue { join = "minecraft:block.note_block.chime" leave = "minecraft:block.note_block.bass" } match { found = "minecraft:block.note_block.bell" battleStart = "minecraft:entity.ender_dragon.growl" victory = "minecraft:ui.toast.challenge_complete" defeat = "minecraft:entity.wither.death" arenaTeleport = "minecraft:entity.enderman.teleport" } preview { confirm = "minecraft:block.note_block.pling" select = "minecraft:ui.button.click" opponentReady = "minecraft:block.note_block.bit" } challenge { received = "minecraft:entity.experience_orb.pickup" accepted = "minecraft:block.note_block.chime" declined = "minecraft:block.note_block.bass" } misc { milestoneAchieved = "minecraft:entity.player.levelup" turnTimerWarning = "minecraft:block.note_block.hat" turnTimerExpired = "minecraft:entity.elder_guardian.curse" seasonEnd = "minecraft:ui.toast.challenge_complete" }}Global Settings
Section titled “Global Settings”| Field | Type | Default | Description |
|---|---|---|---|
volume | Float | 1.0 | Master volume multiplier for all sounds (0.0 = silent, 1.0 = full). |
pitch | Float | 1.0 | Pitch multiplier for all sounds (0.5 = lower, 2.0 = higher). |
Queue Sounds
Section titled “Queue Sounds”| Field | Default | Plays When |
|---|---|---|
join | minecraft:block.note_block.chime | Player joins the matchmaking queue. |
leave | minecraft:block.note_block.bass | Player leaves the queue. |
Match Sounds
Section titled “Match Sounds”| Field | Default | Plays When |
|---|---|---|
found | minecraft:block.note_block.bell | A match is found. |
battleStart | minecraft:entity.ender_dragon.growl | The battle begins. |
victory | minecraft:ui.toast.challenge_complete | Player wins a match. |
defeat | minecraft:entity.wither.death | Player loses a match. |
arenaTeleport | minecraft:entity.enderman.teleport | Player is teleported to the arena. |
Team Preview Sounds
Section titled “Team Preview Sounds”| Field | Default | Plays When |
|---|---|---|
confirm | minecraft:block.note_block.pling | Player confirms team selection. |
select | minecraft:ui.button.click | Player selects/deselects a Pokemon in preview. |
opponentReady | minecraft:block.note_block.bit | Opponent has confirmed their team. |
Challenge Sounds
Section titled “Challenge Sounds”| Field | Default | Plays When |
|---|---|---|
received | minecraft:entity.experience_orb.pickup | Player receives a challenge invitation. |
accepted | minecraft:block.note_block.chime | A challenge is accepted. |
declined | minecraft:block.note_block.bass | A challenge is declined. |
Miscellaneous Sounds
Section titled “Miscellaneous Sounds”| Field | Default | Plays When |
|---|---|---|
milestoneAchieved | minecraft:entity.player.levelup | Player reaches a season milestone. |
turnTimerWarning | minecraft:block.note_block.hat | Turn timer warning (60s, 30s, 10s). |
turnTimerExpired | minecraft:entity.elder_guardian.curse | Turn timer runs out. |
seasonEnd | minecraft:ui.toast.challenge_complete | A season ends (played to all online players). |
| Field | Type | Default | Description |
|---|---|---|---|
debug | Boolean | false | Verbose debug logging. Only useful for development or troubleshooting. |