ELO & Ranks

How ELO calculations function, details on the 34-tier rank progression tree, and rank customization guides.

How ELO Matchmaking Works

The ELO system measures a player's relative skill level. All players start at 1000 ELO. Following an eligible matchmaking duel, ratings are adjusted as follows:

Step-by-Step ELO Example Scenario

To see how ELO is calculated, let's look at a match between two players:

Step 1: Expected Score Calculation

First, the plugin calculates the Expected Score (win probability) for each player. Because WeThink has a higher rating, WeThink is expected to have a higher chance of winning:

Step 2: Calculate Rating Adjustments (Win / Loss Scenarios)

Ratings are computed using the default parameters: base-gain: 20, base-loss: 20, min-gain: 1, max-gain: 40, min-loss: 1, and max-loss: 40.

Scenario A: WeThink Wins (The expected outcome)
Scenario B: ErRoR25 Wins (The upset outcome)

ELO cannot drop below the configured min-elo (default 0). FFA matches and deaths do not affect ELO ratings.

How Min/Max Gain & Loss Work Together

The min-gain, max-gain, min-loss, and max-loss settings act as a safety range for ELO adjustments. They prevent extreme rating swings (such as losing hundreds of points in a single match) while ensuring there is always a meaningful rating change. For example, a win against a far stronger player is capped at max-gain (40 ELO) instead of awarding a massive rating boost, and a defeat by a far weaker player is capped at max-loss (40 ELO) to avoid excessive penalty. Conversely, the min-gain and min-loss floors guarantee that players always receive a token rating change (at least 1 ELO) even for completely expected matches.

Overall ELO vs. Per-Kit ELO

The plugin tracks two types of Elo metrics:

Custom Kits ELO Toggle

Per-kit ELO is tracked for all standard official kits. However, per-kit ELO gain for custom kits depends on the elo.custom-kits toggle in config.yml. If this option is set to false, per-kit ELO statistics for custom kits are not calculated and are hidden from the kit statistics menu.

ELO Settings in ranks.yml
Options: elo.enabled, elo.base-gain, elo.base-loss, elo.kill-gain, elo.custom-kits, elo.opponent-based, elo.min-elo, elo.min-gain, elo.max-gain, elo.min-loss, elo.max-loss, elo.starting-elo.

Default Ranks Database

If not customized inside the configuration files, the plugin loads these 34 default ranks defined in the source code:

Rank Tier ELO Range Loss Multiplier
Bronze V0 - 1990.40x
Bronze IV200 - 3990.45x
Bronze III400 - 5990.50x
Bronze II600 - 7990.55x
Bronze I800 - 9990.60x
Silver V1000 - 10990.70x
Silver IV1100 - 11990.75x
Silver III1200 - 12990.80x
Silver II1300 - 13990.85x
Silver I1400 - 14990.90x
Gold V1500 - 15991.00x
Gold IV1600 - 16991.05x
Gold III1700 - 17991.10x
Gold II1800 - 18991.15x
Gold I1900 - 19991.20x
Platinum V2000 - 20991.25x
Platinum IV2100 - 21991.30x
Platinum III2200 - 22991.35x
Platinum II2300 - 23991.40x
Platinum I2400 - 24991.45x
Diamond V2500 - 25991.50x
Diamond IV2600 - 26991.55x
Diamond III2700 - 27991.60x
Diamond II2800 - 28991.65x
Diamond I2900 - 29991.70x
Crown V3000 - 30991.75x
Crown IV3100 - 31991.80x
Crown III3200 - 32991.85x
Crown II3300 - 33991.90x
Crown I3400 - 34991.95x
Ace3500 - 39992.00x
Ace Master4000 - 44992.25x
Ace Dominator4500 - 49992.50x
Conqueror5000+3.00x

Customizing Ranks

Define custom ranks inside config.yml under the elo.ranks section. The plugin orders ranks based on their minimum ELO thresholds:

yamlelo:
  enabled: true
  base-gain: 25
  base-loss: 20
  kill-bonus: 5
  minimum: 0

  ranks:
    iron:
      name: "Iron"
      colored: "&7[Iron]"
      min-elo: 0
      max-elo: 499
      loss-multiplier: 0.5
    gold:
      name: "Gold"
      colored: "&6[Gold]"
      min-elo: 500
      max-elo: 999
      loss-multiplier: 1.0
    diamond:
      name: "Diamond"
      colored: "&b[Diamond]"
      min-elo: 1000
      max-elo: 9999
      loss-multiplier: 1.5

The colored property supports Kyori MiniMessage components.

Tracked Player Statistics

The plugin tracks various player stats, accessible via /stats or PlaceholderAPI:

Stat Key Description
KillsTotal player kills across duels and FFA modes.
DeathsTotal player deaths.
K/D RatioKills divided by deaths, formatted to two decimal positions.
WinsTotal match wins inside matchmaking duels.
LossesTotal match losses.
W/L RatioWins divided by losses, formatted to two decimal positions.
KillstreakCurrent consecutive kills (resets to 0 upon death).
Best KillstreakAll-time highest consecutive kill record.
WinstreakCurrent consecutive matchmaking duel wins (resets to 0 upon loss).
Best WinstreakAll-time highest consecutive matchmaking win record.
ELOCurrent matchmaking rating (defaults to 1000).
PlaytimeTotal time spent online on the server, formatted as Xh Xm Xs.