From 8ceb9c71059131aea848c2cad20e596b64cd74e2 Mon Sep 17 00:00:00 2001 From: Taken Date: Sat, 30 Aug 2025 14:03:12 +0200 Subject: [PATCH] refactror --- .../player/[ign]/_components/Sidebar.tsx | 6 +- .../player/[ign]/_stats/bedwars/bedwars.tsx | 2 +- .../[ign]/_stats/bedwars/components.tsx | 5 +- .../player/[ign]/_stats/bedwars/stats.tsx | 2 +- .../player/[ign]/_stats/bedwars/table.tsx | 3 +- .../[ign]/_stats/skywars/components.tsx | 4 +- .../player/[ign]/_stats/skywars/skywars.tsx | 2 +- .../player/[ign]/_stats/skywars/table.tsx | 3 +- src/components/player/displayname.tsx | 2 +- src/components/search-bar.tsx | 4 +- src/{data => lib}/colors.ts | 0 src/lib/funcs.ts | 78 ------------------- .../hypixel/{validatePlayer.ts => actions.ts} | 0 src/lib/hypixel/{ => bedwars}/bedwars.ts | 69 +++++++++++++++- .../{bedwarsLevel.ts => bedwars/level.ts} | 0 src/lib/hypixel/formatters.ts | 9 --- src/lib/hypixel/general.ts | 21 +++++ src/lib/hypixel/{ => general}/level.ts | 0 src/lib/hypixel/{ => general}/stats.ts | 0 src/lib/hypixel/{ => guild}/guild.ts | 2 +- .../{skyWarsLevel.ts => skywars/level.ts} | 0 src/lib/hypixel/{ => skywars}/skywars.ts | 22 +++++- src/lib/hypixelFormatters.ts | 23 ------ 23 files changed, 124 insertions(+), 133 deletions(-) rename src/{data => lib}/colors.ts (100%) delete mode 100644 src/lib/funcs.ts rename src/lib/hypixel/{validatePlayer.ts => actions.ts} (100%) rename src/lib/hypixel/{ => bedwars}/bedwars.ts (76%) rename src/lib/hypixel/{bedwarsLevel.ts => bedwars/level.ts} (100%) delete mode 100644 src/lib/hypixel/formatters.ts rename src/lib/hypixel/{ => general}/level.ts (100%) rename src/lib/hypixel/{ => general}/stats.ts (100%) rename src/lib/hypixel/{ => guild}/guild.ts (95%) rename src/lib/hypixel/{skyWarsLevel.ts => skywars/level.ts} (100%) rename src/lib/hypixel/{ => skywars}/skywars.ts (89%) delete mode 100644 src/lib/hypixelFormatters.ts diff --git a/src/app/(stats)/player/[ign]/_components/Sidebar.tsx b/src/app/(stats)/player/[ign]/_components/Sidebar.tsx index f686bcb..5a7e555 100644 --- a/src/app/(stats)/player/[ign]/_components/Sidebar.tsx +++ b/src/app/(stats)/player/[ign]/_components/Sidebar.tsx @@ -1,9 +1,9 @@ import { Card, CardContent } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" -import { getColor } from "@/data/colors" +import { getColor } from "@/lib/colors" import { formatDate, formatNumber } from "@/lib/formatters" -import { getGuildMember, getGuildRankTag, getMemberGEXP, getMemberWeeklyGEXP } from "@/lib/hypixel/guild" -import { getCoinMultiplier, getTotalChallenges, getTotalCoins, getTotalQuests, rewardClaimed } from "@/lib/hypixel/stats" +import { getCoinMultiplier, getTotalChallenges, getTotalCoins, getTotalQuests, rewardClaimed } from "@/lib/hypixel/general/stats" +import { getGuildMember, getGuildRankTag, getMemberGEXP, getMemberWeeklyGEXP } from "@/lib/hypixel/guild/guild" import { Guild } from "@/lib/schema/guild" import { Player } from "@/lib/schema/player" import Link from "next/link" diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx index d0071e1..748ff3f 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/bedwars.tsx @@ -3,7 +3,7 @@ import { Card, CardContent } from "@/components/ui/card" import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible" import { Separator } from "@/components/ui/separator" -import { getBWLevelForExp, getTotalExpForLevel } from "@/lib/hypixel/bedwarsLevel" +import { getBWLevelForExp, getTotalExpForLevel } from "@/lib/hypixel/bedwars/level" import { getProgress } from "@/lib/hypixel/general" import { NonNullStats } from "@/lib/schema/player" import { ChevronDown, ChevronUp } from "lucide-react" diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx index e6f525f..8b41d36 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/components.tsx @@ -1,6 +1,5 @@ -import { getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bedwars" -import { getBWLevelForExp } from "@/lib/hypixel/bedwarsLevel" -import { bedwarsLevelColors } from "@/lib/hypixelFormatters" +import { bedwarsLevelColors, getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bedwars/bedwars" +import { getBWLevelForExp } from "@/lib/hypixel/bedwars/level" import { cn } from "@/lib/utils" import GenericProgress from "../../_components/GenericProgress" import Multicolored from "../../_components/Multicolored" diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/stats.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/stats.tsx index f18d5a6..b25c804 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/stats.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/stats.tsx @@ -1,5 +1,5 @@ import { formatNumber } from "@/lib/formatters" -import { getLatestRoom, getWalletMax } from "@/lib/hypixel/bedwars" +import { getLatestRoom, getWalletMax } from "@/lib/hypixel/bedwars/bedwars" import { NonNullStats } from "@/lib/schema/player" import { BasicStat, Stat } from "../../_components/Stats" import { BedWarsPrestige } from "./components" diff --git a/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx b/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx index 0696eea..9288fdc 100644 --- a/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx +++ b/src/app/(stats)/player/[ign]/_stats/bedwars/table.tsx @@ -1,7 +1,6 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { formatNumber } from "@/lib/formatters" -import { concatBedwarsStats } from "@/lib/funcs" -import { _BedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars" +import { _BedwarsStats, concatBedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars/bedwars" import { NonNullStats } from "@/lib/schema/player" import { cn } from "@/lib/utils" diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx index a37550d..5f240bb 100644 --- a/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx +++ b/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx @@ -1,6 +1,6 @@ import { formatNumber } from "@/lib/formatters" -import { getHeadsColor, getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars" -import { getSkywarsLevel } from "@/lib/hypixel/skyWarsLevel" +import { getSkywarsLevel } from "@/lib/hypixel/skywars/level" +import { getHeadsColor, getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars/skywars" import { cn } from "@/lib/utils" import GenericProgress from "../../_components/GenericProgress" diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx index d1c952e..76a4d71 100644 --- a/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx +++ b/src/app/(stats)/player/[ign]/_stats/skywars/skywars.tsx @@ -5,7 +5,7 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/component import { Separator } from "@/components/ui/separator" import { formatNumber } from "@/lib/formatters" import { getProgress } from "@/lib/hypixel/general" -import { getSkywarsLevel, getSkywarsXpForLevel } from "@/lib/hypixel/skyWarsLevel" +import { getSkywarsLevel, getSkywarsXpForLevel } from "@/lib/hypixel/skywars/level" import { NonNullStats } from "@/lib/schema/player" import { ChevronDown, ChevronUp } from "lucide-react" import { useEffect, useRef, useState } from "react" diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/table.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/table.tsx index 1b80a3f..2c65d12 100644 --- a/src/app/(stats)/player/[ign]/_stats/skywars/table.tsx +++ b/src/app/(stats)/player/[ign]/_stats/skywars/table.tsx @@ -1,7 +1,6 @@ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { formatNumber } from "@/lib/formatters" -import { concatSkywarsStats } from "@/lib/funcs" -import { _SkywarsStats, getBestMode, getSkywarsModeStats } from "@/lib/hypixel/skywars" +import { _SkywarsStats, concatSkywarsStats, getBestMode, getSkywarsModeStats } from "@/lib/hypixel/skywars/skywars" import { NonNullStats } from "@/lib/schema/player" import { cn } from "@/lib/utils" diff --git a/src/components/player/displayname.tsx b/src/components/player/displayname.tsx index d2aa938..c0375d2 100644 --- a/src/components/player/displayname.tsx +++ b/src/components/player/displayname.tsx @@ -1,4 +1,4 @@ -import { getColor } from "@/data/colors" +import { getColor } from "@/lib/colors" import { Player } from "@/lib/schema/player" type NewPackageRank = Player["player"]["newPackageRank"] diff --git a/src/components/search-bar.tsx b/src/components/search-bar.tsx index e2290c0..532312f 100644 --- a/src/components/search-bar.tsx +++ b/src/components/search-bar.tsx @@ -1,7 +1,7 @@ "use client" import { Input } from "@/components/ui/input" -import { validatePlayer } from "@/lib/hypixel/validatePlayer" +import { validatePlayer } from "@/lib/hypixel/actions" import { cn } from "@/lib/utils" import { Search } from "lucide-react" import { useRouter } from "next/navigation" @@ -41,7 +41,7 @@ export function SearchBar({ navbar }: { navbar?: boolean }) {
- + (["kills", "deaths", "wins", "losses"], ...stats) - - const ret = { - ...summed, - kd: devide(summed.kills, summed.deaths), - wl: devide(summed.wins, summed.losses) - } - - return [ - ret.kills, - ret.deaths, - ret.kd, - ret.wins, - ret.losses, - ret.wl - ] -} - -export function concatBedwarsStats(...stats: BedwarsModeStats[]) { - if (stats.length === 0) return [] - - const summed = concatStatsArray([ - "kills_bedwars", - "deaths_bedwars", - "final_kills_bedwars", - "final_deaths_bedwars", - "wins_bedwars", - "losses_bedwars", - "beds_broken_bedwars", - "beds_lost_bedwars" - ], ...stats) - - let winstreak = -1 - for (const s of stats) { - if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak) - } - - const ret = { - ...summed, - winstreak: winstreak < 0 ? "?" : winstreak, - kd: devide(summed.kills_bedwars, summed.deaths_bedwars), - fkd: devide(summed.final_kills_bedwars, summed.final_deaths_bedwars), - wl: devide(summed.wins_bedwars, summed.losses_bedwars), - bbl: devide(summed.beds_broken_bedwars, summed.beds_lost_bedwars) - } - - return [ - ret.kills_bedwars, - ret.deaths_bedwars, - ret.kd, - ret.final_kills_bedwars, - ret.final_deaths_bedwars, - ret.fkd, - ret.wins_bedwars, - ret.losses_bedwars, - ret.wl, - ret.winstreak, - ret.beds_broken_bedwars, - ret.beds_lost_bedwars, - ret.bbl - ] -} - -function concatStatsArray>(keys: (keyof T)[], ...stats: T[]) { - const base: Record = {} - for (const k of keys) base[k as string] = 0 - for (const s of stats) { - for (const k of keys) { - base[k as string] += s[k] ?? 0 - } - } - return base as T -} diff --git a/src/lib/hypixel/validatePlayer.ts b/src/lib/hypixel/actions.ts similarity index 100% rename from src/lib/hypixel/validatePlayer.ts rename to src/lib/hypixel/actions.ts diff --git a/src/lib/hypixel/bedwars.ts b/src/lib/hypixel/bedwars/bedwars.ts similarity index 76% rename from src/lib/hypixel/bedwars.ts rename to src/lib/hypixel/bedwars/bedwars.ts index 6ab8b1c..fb91319 100644 --- a/src/lib/hypixel/bedwars.ts +++ b/src/lib/hypixel/bedwars/bedwars.ts @@ -1,6 +1,6 @@ import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars" -import { floorLevel } from "./formatters" -import { devide } from "./general" +import { getColorFromCode } from "@/lib/colors" +import { concatStatsArray, devide, floorLevel } from "../general" export function getBedwarsStar(level: number) { if (level < 1100) { @@ -18,6 +18,51 @@ export function getBedwarsStar(level: number) { return PRESTIGE_ICONS[3].symbol } +export function concatBedwarsStats(...stats: BedwarsModeStats[]) { + if (stats.length === 0) return [] + + const summed = concatStatsArray([ + "kills_bedwars", + "deaths_bedwars", + "final_kills_bedwars", + "final_deaths_bedwars", + "wins_bedwars", + "losses_bedwars", + "beds_broken_bedwars", + "beds_lost_bedwars" + ], ...stats) + + let winstreak = -1 + for (const s of stats) { + if (s.winstreak !== -1) winstreak = Math.max(winstreak, s.winstreak) + } + + const ret = { + ...summed, + winstreak: winstreak < 0 ? "?" : winstreak, + kd: devide(summed.kills_bedwars, summed.deaths_bedwars), + fkd: devide(summed.final_kills_bedwars, summed.final_deaths_bedwars), + wl: devide(summed.wins_bedwars, summed.losses_bedwars), + bbl: devide(summed.beds_broken_bedwars, summed.beds_lost_bedwars) + } + + return [ + ret.kills_bedwars, + ret.deaths_bedwars, + ret.kd, + ret.final_kills_bedwars, + ret.final_deaths_bedwars, + ret.fkd, + ret.wins_bedwars, + ret.losses_bedwars, + ret.wl, + ret.winstreak, + ret.beds_broken_bedwars, + ret.beds_lost_bedwars, + ret.bbl + ] +} + export function getTextColor(level: number) { const floored = floorLevel(level, 100) @@ -28,6 +73,26 @@ export function getTextColor(level: number) { return PRESTIGES.find(l => l.level === floored)!.color } +export function bedwarsLevelColors(level: number) { + if (level < 0) return getColorFromCode() + + const floored = floorLevel(level, 100) + + if (floored < 1000) { + return getColorFromCode(PRESTIGES.find(v => v.level === floored)!.colormap) + } + + if (floored > 5000) { + return PRESTIGES[PRESTIGES.length - 1].colormap.split("").map(v => { + return getColorFromCode(v) + }) + } + + return PRESTIGES.find(v => v.level === floored)!.colormap.split("").map(v => { + return getColorFromCode(v) + }) +} + export function getPrestigeName(level: number) { const floored = floorLevel(level, 100) diff --git a/src/lib/hypixel/bedwarsLevel.ts b/src/lib/hypixel/bedwars/level.ts similarity index 100% rename from src/lib/hypixel/bedwarsLevel.ts rename to src/lib/hypixel/bedwars/level.ts diff --git a/src/lib/hypixel/formatters.ts b/src/lib/hypixel/formatters.ts deleted file mode 100644 index b80cc5b..0000000 --- a/src/lib/hypixel/formatters.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function floorLevel(level: number, base: number) { - const extra = level % base - - if (extra === 0) { - return level; - } - - return level - extra; -} \ No newline at end of file diff --git a/src/lib/hypixel/general.ts b/src/lib/hypixel/general.ts index ea897b4..2eae5b0 100644 --- a/src/lib/hypixel/general.ts +++ b/src/lib/hypixel/general.ts @@ -11,3 +11,24 @@ export function devide(num: number, num2: number) { return num / num2 } + +export function floorLevel(level: number, base: number) { + const extra = level % base + + if (extra === 0) { + return level + } + + return level - extra +} + +export function concatStatsArray>(keys: (keyof T)[], ...stats: T[]) { + const base: Record = {} + for (const k of keys) base[k as string] = 0 + for (const s of stats) { + for (const k of keys) { + base[k as string] += s[k] ?? 0 + } + } + return base as T +} diff --git a/src/lib/hypixel/level.ts b/src/lib/hypixel/general/level.ts similarity index 100% rename from src/lib/hypixel/level.ts rename to src/lib/hypixel/general/level.ts diff --git a/src/lib/hypixel/stats.ts b/src/lib/hypixel/general/stats.ts similarity index 100% rename from src/lib/hypixel/stats.ts rename to src/lib/hypixel/general/stats.ts diff --git a/src/lib/hypixel/guild.ts b/src/lib/hypixel/guild/guild.ts similarity index 95% rename from src/lib/hypixel/guild.ts rename to src/lib/hypixel/guild/guild.ts index 0d6a11d..c88a40c 100644 --- a/src/lib/hypixel/guild.ts +++ b/src/lib/hypixel/guild/guild.ts @@ -1,4 +1,4 @@ -import { Guild } from "../schema/guild" +import { Guild } from "@/lib/schema/guild" export function getGuildMember(guild: Guild["guild"], uuid: string) { return guild.members.find(m => m.uuid === uuid) diff --git a/src/lib/hypixel/skyWarsLevel.ts b/src/lib/hypixel/skywars/level.ts similarity index 100% rename from src/lib/hypixel/skyWarsLevel.ts rename to src/lib/hypixel/skywars/level.ts diff --git a/src/lib/hypixel/skywars.ts b/src/lib/hypixel/skywars/skywars.ts similarity index 89% rename from src/lib/hypixel/skywars.ts rename to src/lib/hypixel/skywars/skywars.ts index 96d31a8..038e889 100644 --- a/src/lib/hypixel/skywars.ts +++ b/src/lib/hypixel/skywars/skywars.ts @@ -1,6 +1,5 @@ import { HEADS, ICONS, PRESTIGES } from "@/data/hypixel/skywars" -import { floorLevel } from "./formatters" -import { devide } from "./general" +import { concatStatsArray, devide, floorLevel } from "../general" export function getHeadsColor(key: string) { const val = HEADS.find(v => v.id === key)?.color @@ -10,6 +9,25 @@ export function getHeadsColor(key: string) { return val } +export function concatSkywarsStats(...stats: SkywarsModeStats[]) { + const summed = concatStatsArray(["kills", "deaths", "wins", "losses"], ...stats) + + const ret = { + ...summed, + kd: devide(summed.kills, summed.deaths), + wl: devide(summed.wins, summed.losses) + } + + return [ + ret.kills, + ret.deaths, + ret.kd, + ret.wins, + ret.losses, + ret.wl + ] +} + export function getTextColor(level: number) { const floored = floorLevel(level, 5) diff --git a/src/lib/hypixelFormatters.ts b/src/lib/hypixelFormatters.ts deleted file mode 100644 index 73fd19d..0000000 --- a/src/lib/hypixelFormatters.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { getColorFromCode } from "@/data/colors" -import { PRESTIGES } from "@/data/hypixel/bedwars" -import { floorLevel } from "./hypixel/formatters" - -export function bedwarsLevelColors(level: number) { - if (level < 0) return getColorFromCode() - - const floored = floorLevel(level, 100) - - if (floored < 1000) { - return getColorFromCode(PRESTIGES.find(v => v.level === floored)!.colormap) - } - - if (floored > 5000) { - return PRESTIGES[PRESTIGES.length - 1].colormap.split("").map(v => { - return getColorFromCode(v) - }) - } - - return PRESTIGES.find(v => v.level === floored)!.colormap.split("").map(v => { - return getColorFromCode(v) - }) -}