Skip to content

Build Battle computed stats

Computed Build Battle statistics, derived from the parsed BuildBattleStats block. They are always present on an enriched player as player.stats.buildBattle.computed (when the raw buildBattle block exists), produced by computeBuildBattle(raw).

All ratios are rounded to 2 decimals. A ratio with a zero denominator yields the numerator (K/D convention). *Share and *Percent fields are percentages from 0 to 100 (0 when the whole is 0). progressToNextTitle is the additional score needed for the next title.

BuildBattleComputed

ts
export interface BuildBattleComputed {
  readonly winRate: number;
  readonly votesPerGame: number;
  readonly superVoteShare: number;
  readonly correctGuessesPerGame: number;
  readonly firstGuessShare: number;
  readonly scorePerWin: number;
  readonly scorePerGame: number;
  readonly seasonalWinShare: number;
  readonly modeWinShare: BuildBattleModeWinShare;
  readonly title: BuildBattleTitle;
  readonly progressToNextTitle: number;
  readonly titleProgressPercent: number;
  readonly monthlyTokens: number;
  readonly weeklyTokens: number;
  readonly mostVotedTheme: string | null;
  readonly mostWonBackdrop: string | null;
}
FieldFormulaMeaning
winRatewins / gamesPlayedFraction of games won (bare ratio, not a percent)
votesPerGametotalVotes / gamesPlayedAverage votes cast per game
superVoteShare100 * superVotes / totalVotesPercent (0-100) of votes that were super votes
correctGuessesPerGamecorrectGuesses / gamesPlayedAverage correct Guess The Build guesses per game
firstGuessShare100 * firstGuesses / correctGuessesPercent (0-100) of correct guesses that were the first correct guess
scorePerWinscore / winsAverage score earned per win (bare ratio)
scorePerGamescore / gamesPlayedAverage score earned per game
seasonalWinShare100 * seasonalWins / winsPercent (0-100) of wins from seasonal modes
modeWinSharesee BuildBattleModeWinSharePercent of wins per mode
titlehighest title whose score requirement is at or below raw.scoreCurrent Build Battle title
progressToNextTitlenextTitleRequirement - score; 0 at the top title (Ascended)Score still needed to reach the next title
titleProgressPercent100 * (score - currentRequirement) / (nextRequirement - currentRequirement); 100 at the top titlePercent (0-100) of the way from the current title to the next
monthlyTokensmonthlyValue(monthlyCoins.coinsA, monthlyCoins.coinsB, now)Tokens earned in the current monthly bucket
weeklyTokensweeklyValue(weeklyCoins.coinsA, weeklyCoins.coinsB, now)Tokens earned in the current weekly bucket
mostVotedThemetheme in raw.votesByTheme with the highest count, only counting themes with more than 0 votesMost-voted theme; null when no theme has votes
mostWonBackdropbackdrop in raw.backdropWins with the highest count, only counting backdrops with more than 0 winsMost-won backdrop; null when no backdrop has wins

BuildBattleModeWinShare

Each field is the percent (0-100) of total wins earned in that mode: 100 * modeWins / wins (0 when wins is 0).

ts
export interface BuildBattleModeWinShare {
  readonly soloNormal: number;
  readonly soloPro: number;
  readonly teamsNormal: number;
  readonly speedBuilders: number;
  readonly guessTheBuild: number;
  readonly halloween: number;
}
FieldFormulaMeaning
soloNormal100 * winsSoloNormal / winsPercent of wins from Solo Normal
soloPro100 * winsSoloPro / winsPercent of wins from Solo Pro
teamsNormal100 * winsTeamsNormal / winsPercent of wins from Teams Normal
speedBuilders100 * winsSpeedBuilders / winsPercent of wins from Speed Builders
guessTheBuild100 * winsGuessTheBuild / winsPercent of wins from Guess The Build
halloween100 * winsHalloween / winsPercent of wins from the Halloween mode

BuildBattleTitle

The union of all title names, in ascending order of score requirement.

ts
export type BuildBattleTitle =
  | "Rookie"
  | "Untrained"
  | "Amatuer"
  | "Prospect"
  | "Apprentice"
  | "Experienced"
  | "Seasoned"
  | "Trained"
  | "Skilled"
  | "Talented"
  | "Professional"
  | "Artisan"
  | "Expert"
  | "Master"
  | "Legend"
  | "Grandmaster"
  | "Celestial"
  | "Divine"
  | "Ascended";

Note: "Amatuer" is spelled exactly as in the source's title table; match that spelling when comparing against title.

Title requirements

TitleScore required
Rookie0
Untrained100
Amatuer250
Prospect550
Apprentice1000
Experienced2000
Seasoned3500
Trained5000
Skilled7500
Talented10000
Professional15000
Artisan20000
Expert30000
Master50000
Legend100000
Grandmaster200000
Celestial300000
Divine400000
Ascended500000

Weekly and monthly buckets

Hypixel stores rolling weekly and monthly stats in two alternating buckets (A and B). The monthly bucket is chosen by the parity of the current month (odd months read A, even months read B); the weekly bucket alternates by whole weeks elapsed since a fixed epoch. The computed values return the bucket that is currently accumulating, evaluated at compute time.

Released under the MIT License.