From 06adea00986af3f97097ab9dffbffdb697b89a46 Mon Sep 17 00:00:00 2001 From: Taken Date: Fri, 29 Aug 2025 13:07:03 +0200 Subject: [PATCH] Made generic progress --- .../[ign]/_components/GenericProgress.tsx | 38 +++++++++++++++++++ .../[ign]/_stats/bedwars/components.tsx | 15 ++------ .../[ign]/_stats/skywars/components.tsx | 26 +++++++------ .../player/[ign]/_stats/skywars/skywars.tsx | 9 +++-- src/lib/schema/stats.ts | 3 +- 5 files changed, 63 insertions(+), 28 deletions(-) create mode 100644 src/app/(stats)/player/[ign]/_components/GenericProgress.tsx diff --git a/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx b/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx new file mode 100644 index 0000000..9b3f546 --- /dev/null +++ b/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx @@ -0,0 +1,38 @@ +import { cn } from "@/lib/utils" + +type GenericProgressProps = + & { + percent: number + } + & ({ + className: string + rainbow?: never + } | { + className?: never + rainbow: true + }) + +export default function GenericProgress({ percent, className, rainbow }: GenericProgressProps) { + if (rainbow) { + return ( + <> +
+
+
+ + ) + } + + return ( + <> +
+
+ + ) +} diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx index 27ef9d8..e6f525f 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx @@ -2,6 +2,7 @@ import { getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bed import { getBWLevelForExp } from "@/lib/hypixel/bedwarsLevel" import { bedwarsLevelColors } from "@/lib/hypixelFormatters" import { cn } from "@/lib/utils" +import GenericProgress from "../../_components/GenericProgress" import Multicolored from "../../_components/Multicolored" export function BedwarsLevel({ xp }: { xp: number }) { @@ -18,7 +19,6 @@ export function BedwarsProgress({ level, percent }: { level: number, percent: nu
-
) @@ -67,17 +67,8 @@ function LevelNumber({ level, className }: { level: number, className?: string } function Progress({ level, percent }: { level: number, percent: number }) { if (level >= 1000 && level < 1100) { - return ( -
-
- ) + return } - return
+ return } diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx index e833ea2..bb1c260 100644 --- a/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx +++ b/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx @@ -1,6 +1,18 @@ import { getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars" import { getSkywarsLevel } from "@/lib/hypixel/skyWarsLevel" import { cn } from "@/lib/utils" +import GenericProgress from "../../_components/GenericProgress" + +export function ShardProgress({ percent }: { percent: number }) { + return ( +
+

Shard Progress

+
+ +
+
+ ) +} export function SkywarsLevel({ xp, icon }: { xp: number, icon: string | undefined }) { const level = getSkywarsLevel(xp) @@ -56,7 +68,6 @@ export function SkywarsProgress({ level, percent }: { level: number, percent: nu
-
) @@ -83,19 +94,10 @@ function LevelNumber({ level, className }: { level: number, className?: string } function Progress({ level, percent }: { level: number, percent: number }) { if (level > 150 || level === 50) { - return ( -
-
- ) + return } - return
+ return } export function SkywarsPrestige({ level, icon }: { level: number, icon?: string }) { diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx index 8ca503d..b080153 100644 --- a/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx +++ b/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx @@ -10,7 +10,7 @@ import { NonNullStats } from "@/lib/schema/player" import { ChevronDown, ChevronUp } from "lucide-react" import { useEffect, useRef, useState } from "react" import CollapsedStats from "../../_components/CollapsedStats" -import { SkywarsLevel, SkywarsProgress } from "./components" +import { ShardProgress, SkywarsLevel, SkywarsProgress } from "./components" import SkyWarsGeneralStats from "./stats" import SkywarsStatTable from "./table" @@ -44,12 +44,14 @@ export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"] const kd = (stats.kills / stats.deaths).toFixed(2) const wl = (stats.wins / stats.losses).toFixed(2) - const percent = getProgress( + const levelProgress = getProgress( getSkywarsXpForLevel(Math.floor(level)), stats.skywars_experience, getSkywarsXpForLevel(Math.floor(level) + 1) ) + const shardProgress = getProgress(0, stats.shard, 20000) + return ( @@ -84,11 +86,12 @@ export default function SkyWarsStats({ stats }: { stats: NonNullStats["SkyWars"] - + + diff --git a/src/lib/schema/stats.ts b/src/lib/schema/stats.ts index 5556c46..76c38bc 100644 --- a/src/lib/schema/stats.ts +++ b/src/lib/schema/stats.ts @@ -246,5 +246,6 @@ export const skywarsStatsSchema = z.looseObject({ kills_ranked_normal: z.number().default(0), deaths_ranked_normal: z.number().default(0), wins_ranked_normal: z.number().default(0), - losses_ranked_normal: z.number().default(0) + losses_ranked_normal: z.number().default(0), + shard: z.number().default(0) })