From 68342109998c4f6632341f0a57d2357b9be505f0 Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 31 Aug 2025 20:50:31 +0200 Subject: [PATCH] Updated bedwars progress --- .../[ign]/_components/GenericProgress.tsx | 67 ++++++++++++++++--- .../player/[ign]/_stats/bedwars/bedwars.tsx | 13 ++-- .../[ign]/_stats/bedwars/components.tsx | 22 +++--- 3 files changed, 79 insertions(+), 23 deletions(-) diff --git a/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx b/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx index 9b3f546..72fa544 100644 --- a/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx +++ b/src/app/(stats)/player/[ign]/_components/GenericProgress.tsx @@ -1,8 +1,12 @@ import { cn } from "@/lib/utils" +import { useEffect, useState } from "react" +import { Tooltip } from "react-tooltip" type GenericProgressProps = & { percent: number + tooltipId: string + tooltipContent: string } & ({ className: string @@ -12,27 +16,72 @@ type GenericProgressProps = rainbow: true }) -export default function GenericProgress({ percent, className, rainbow }: GenericProgressProps) { +export default function GenericProgress({ percent, tooltipId, tooltipContent, className, rainbow }: GenericProgressProps) { + const [pos, setPos] = useState({ x: 0, y: 0 }) + + useEffect(() => { + const controller = new AbortController() + + window.addEventListener("mousemove", (e) => { + if (!(e.target instanceof HTMLDivElement)) return + if (e.target.dataset.id !== tooltipId) return + + setPos({ x: e.clientX, y: e.clientY - 10 }) + }, { signal: controller.signal }) + + return () => { + controller.abort() + } + }) + if (rainbow) { return ( <>
+
+
+
+
-
+ ) } return ( <> -
-
+
+
+
+
+
+
+ ) } diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx index 748ff3f..59e907a 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx @@ -45,11 +45,12 @@ export default function BedwarsStats({ stats }: { stats: NonNullStats["Bedwars"] const bbl = (stats.beds_broken_bedwars / stats.beds_lost_bedwars).toFixed(2) const level = getBWLevelForExp(stats.Experience) - const percent = getProgress( - getTotalExpForLevel(level), - stats.Experience, - getTotalExpForLevel(level + 1) - ) + const current = getTotalExpForLevel(level) + const next = getTotalExpForLevel(level + 1) + const percent = getProgress(current, stats.Experience, next) + + const xpProgress = stats.Experience - current + const ceilingXp = next - current return ( @@ -93,7 +94,7 @@ export default function BedwarsStats({ stats }: { stats: NonNullStats["Bedwars"] - + diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx index 8b41d36..f9b9521 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx @@ -1,3 +1,4 @@ +import { formatNumber } from "@/lib/formatters" import { bedwarsLevelColors, getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bedwars/bedwars" import { getBWLevelForExp } from "@/lib/hypixel/bedwars/level" import { cn } from "@/lib/utils" @@ -13,11 +14,16 @@ export function BedwarsLevel({ xp }: { xp: number }) { return } -export function BedwarsProgress({ level, percent }: { level: number, percent: number }) { +export function BedwarsProgress({ level, percent, currentXp, ceilingXp }: { level: number, percent: number, currentXp: number, ceilingXp: number }) { return (
- +
) @@ -48,7 +54,7 @@ export function BedWarsPrestige({ level }: { level: number }) { function LevelNumber({ level, className }: { level: number, className?: string }) { if (level >= 1000 && level < 1100) { return ( -
{level} -
+

) } - return
{level}
+ return

{level}

} -function Progress({ level, percent }: { level: number, percent: number }) { +function Progress({ level, percent, tooltipId, tooltipContent }: { level: number, percent: number, tooltipId: string, tooltipContent: string }) { if (level >= 1000 && level < 1100) { - return + return } - return + return }