diff --git a/src/app/(stats)/player/[ign]/_stats/duels/table.tsx b/src/app/(stats)/player/[ign]/_stats/duels/table.tsx
index fb5569e..9fe2133 100644
--- a/src/app/(stats)/player/[ign]/_stats/duels/table.tsx
+++ b/src/app/(stats)/player/[ign]/_stats/duels/table.tsx
@@ -1,6 +1,6 @@
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
import { formatNumber } from "@/lib/formatters"
-import { getDuelsModeStats, getModeTitle } from "@/lib/hypixel/duels/duels"
+import { getBestDuelsMode, getDuelsModeStats, getModeTitle } from "@/lib/hypixel/duels/duels"
import { NonNullStats } from "@/lib/schema/player"
export default function DuelsStatTable({ stats }: { stats: NonNullStats["Duels"] }) {
@@ -8,37 +8,37 @@ export default function DuelsStatTable({ stats }: { stats: NonNullStats["Duels"]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
)
@@ -72,529 +72,25 @@ function DuelsTableHeader() {
)
}
-function Bedwars1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
+function DuelsStat(
+ { modeId, stats }: { modeId: Parameters[0], stats: NonNullStats["Duels"] }
+) {
if (!stats) return null
- const modeStats = getDuelsModeStats("bedwars_two_one_duels", stats)
- const title = getModeTitle("bedwars_two_one_duels")
+ const modeStats = getDuelsModeStats(modeId, stats)
+ const title = getModeTitle(modeId)
+ const bestMode = getBestDuelsMode(stats) === modeId
+ const divisionLabel = "I"
return (
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bedwars1v1RushStats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bedwars_two_one_duels_rush", stats)
- const title = getModeTitle("bedwars_two_one_duels_rush")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function UHC1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("uhc_duel", stats)
- const title = getModeTitle("uhc_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function UHC2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("uhc_doubles", stats)
- const title = getModeTitle("uhc_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function UHC4v4Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("uhc_four", stats)
- const title = getModeTitle("uhc_four")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function UHCMeetupStats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("uhc_meetup", stats)
- const title = getModeTitle("uhc_meetup")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function OP1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("op_duel", stats)
- const title = getModeTitle("op_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function OP2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("op_doubles", stats)
- const title = getModeTitle("op_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function SkyWars1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("sw_duel", stats)
- const title = getModeTitle("sw_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function SkyWars2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("sw_doubles", stats)
- const title = getModeTitle("sw_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function MegaWalls1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("mw_duel", stats)
- const title = getModeTitle("mw_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function MegaWalls2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("mw_doubles", stats)
- const title = getModeTitle("mw_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bow1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bow_duel", stats)
- const title = getModeTitle("bow_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Blitz1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("blitz_duel", stats)
- const title = getModeTitle("blitz_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Sumo1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("sumo_duel", stats)
- const title = getModeTitle("sumo_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function BowSpleef1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bowspleef_duel", stats)
- const title = getModeTitle("bowspleef_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function ParkourFFAStats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("parkour_eight", stats)
- const title = getModeTitle("parkour_eight")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Boxing1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("boxing_duel", stats)
- const title = getModeTitle("boxing_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Classic1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("classic_duel", stats)
- const title = getModeTitle("classic_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Classic2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("classic_doubles", stats)
- const title = getModeTitle("classic_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Potion1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("potion_duel", stats)
- const title = getModeTitle("potion_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Combo1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("combo_duel", stats)
- const title = getModeTitle("combo_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_duel", stats)
- const title = getModeTitle("bridge_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_doubles", stats)
- const title = getModeTitle("bridge_doubles")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge3v3Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_threes", stats)
- const title = getModeTitle("bridge_threes")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge4v4Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_four", stats)
- const title = getModeTitle("bridge_four")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge2v2v2v2Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_2v2v2v2", stats)
- const title = getModeTitle("bridge_2v2v2v2")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Bridge3v3v3v3Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("bridge_3v3v3v3", stats)
- const title = getModeTitle("bridge_3v3v3v3")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function DuelArenaStats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("duel_arena", stats)
- const title = getModeTitle("duel_arena")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Quake1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("quake_duel", stats)
- const title = getModeTitle("quake_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
-
- )
-}
-
-function Spleef1v1Stats({ stats }: { stats: NonNullStats["Duels"] }) {
- if (!stats) return null
-
- const modeStats = getDuelsModeStats("spleef_duel", stats)
- const title = getModeTitle("spleef_duel")
-
- return (
-
- {title}
- I
- {modeStats.map((v, i) => {
- return {typeof v === "number" ? formatNumber(v) : v}
- })}
+ {title}
+ {divisionLabel}
+ {modeStats.map((v, i) => (
+
+ {typeof v === "number" ? formatNumber(v) : v}
+
+ ))}
)
}
diff --git a/src/lib/hypixel/duels/duels.ts b/src/lib/hypixel/duels/duels.ts
index 60028d6..1828c11 100644
--- a/src/lib/hypixel/duels/duels.ts
+++ b/src/lib/hypixel/duels/duels.ts
@@ -46,27 +46,19 @@ export function getMostPlayed(stats: NonNullable) {
type Mode = typeof MODES[number]["id"]
-// export function getBestMode(stats: NonNullable) {
-// const { wins_bedwars: solo } = getBedwarsModeStats("solo", stats, true)
-// const { wins_bedwars: doubles } = getBedwarsModeStats("doubles", stats, true)
-// const { wins_bedwars: threes } = getBedwarsModeStats("3s", stats, true)
-// const { wins_bedwars: fours } = getBedwarsModeStats("4s", stats, true)
-//
-// const max = Math.max(solo, doubles, threes, fours)
-//
-// switch (max) {
-// case solo:
-// return "solo"
-// case doubles:
-// return "doubles"
-// case threes:
-// return "3s"
-// case fours:
-// return "4s"
-// default:
-// return null
-// }
-// }
+export function getBestDuelsMode(stats: NonNullable) {
+ let best: typeof MODES[number] | null = null
+ let mostPlays = 0
+ for (const mode of MODES) {
+ const [, , , wins, losses] = getDuelsModeStats(mode.id, stats)
+ const plays = (wins as number || 0) + (losses as number || 0)
+ if (plays > mostPlays) {
+ mostPlays = plays
+ best = mode
+ }
+ }
+ return best === null ? null : best.id
+}
export function getDuelsModeStats(mode: Mode, stats: NonNullable) {
return duelsModeStats(mode, stats)