refactror
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
import { Card, CardContent } from "@/components/ui/card"
|
import { Card, CardContent } from "@/components/ui/card"
|
||||||
import { Separator } from "@/components/ui/separator"
|
import { Separator } from "@/components/ui/separator"
|
||||||
import { getColor } from "@/data/colors"
|
import { getColor } from "@/lib/colors"
|
||||||
import { formatDate, formatNumber } from "@/lib/formatters"
|
import { formatDate, formatNumber } from "@/lib/formatters"
|
||||||
import { getGuildMember, getGuildRankTag, getMemberGEXP, getMemberWeeklyGEXP } from "@/lib/hypixel/guild"
|
import { getCoinMultiplier, getTotalChallenges, getTotalCoins, getTotalQuests, rewardClaimed } from "@/lib/hypixel/general/stats"
|
||||||
import { getCoinMultiplier, getTotalChallenges, getTotalCoins, getTotalQuests, rewardClaimed } from "@/lib/hypixel/stats"
|
import { getGuildMember, getGuildRankTag, getMemberGEXP, getMemberWeeklyGEXP } from "@/lib/hypixel/guild/guild"
|
||||||
import { Guild } from "@/lib/schema/guild"
|
import { Guild } from "@/lib/schema/guild"
|
||||||
import { Player } from "@/lib/schema/player"
|
import { Player } from "@/lib/schema/player"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { Card, CardContent } from "@/components/ui/card"
|
import { Card, CardContent } from "@/components/ui/card"
|
||||||
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/components/ui/collapsible"
|
||||||
import { Separator } from "@/components/ui/separator"
|
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 { getProgress } from "@/lib/hypixel/general"
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
import { ChevronDown, ChevronUp } from "lucide-react"
|
import { ChevronDown, ChevronUp } from "lucide-react"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bedwars"
|
import { bedwarsLevelColors, getBedwarsStar, getPrestigeName, getTextColor } from "@/lib/hypixel/bedwars/bedwars"
|
||||||
import { getBWLevelForExp } from "@/lib/hypixel/bedwarsLevel"
|
import { getBWLevelForExp } from "@/lib/hypixel/bedwars/level"
|
||||||
import { bedwarsLevelColors } from "@/lib/hypixelFormatters"
|
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
import GenericProgress from "../../_components/GenericProgress"
|
import GenericProgress from "../../_components/GenericProgress"
|
||||||
import Multicolored from "../../_components/Multicolored"
|
import Multicolored from "../../_components/Multicolored"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { formatNumber } from "@/lib/formatters"
|
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 { NonNullStats } from "@/lib/schema/player"
|
||||||
import { BasicStat, Stat } from "../../_components/Stats"
|
import { BasicStat, Stat } from "../../_components/Stats"
|
||||||
import { BedWarsPrestige } from "./components"
|
import { BedWarsPrestige } from "./components"
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||||
import { formatNumber } from "@/lib/formatters"
|
import { formatNumber } from "@/lib/formatters"
|
||||||
import { concatBedwarsStats } from "@/lib/funcs"
|
import { _BedwarsStats, concatBedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars/bedwars"
|
||||||
import { _BedwarsStats, getBedwarsModeStats, getBestMode } from "@/lib/hypixel/bedwars"
|
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { formatNumber } from "@/lib/formatters"
|
import { formatNumber } from "@/lib/formatters"
|
||||||
import { getHeadsColor, getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars"
|
import { getSkywarsLevel } from "@/lib/hypixel/skywars/level"
|
||||||
import { getSkywarsLevel } from "@/lib/hypixel/skyWarsLevel"
|
import { getHeadsColor, getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars/skywars"
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
import GenericProgress from "../../_components/GenericProgress"
|
import GenericProgress from "../../_components/GenericProgress"
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/component
|
|||||||
import { Separator } from "@/components/ui/separator"
|
import { Separator } from "@/components/ui/separator"
|
||||||
import { formatNumber } from "@/lib/formatters"
|
import { formatNumber } from "@/lib/formatters"
|
||||||
import { getProgress } from "@/lib/hypixel/general"
|
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 { NonNullStats } from "@/lib/schema/player"
|
||||||
import { ChevronDown, ChevronUp } from "lucide-react"
|
import { ChevronDown, ChevronUp } from "lucide-react"
|
||||||
import { useEffect, useRef, useState } from "react"
|
import { useEffect, useRef, useState } from "react"
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"
|
||||||
import { formatNumber } from "@/lib/formatters"
|
import { formatNumber } from "@/lib/formatters"
|
||||||
import { concatSkywarsStats } from "@/lib/funcs"
|
import { _SkywarsStats, concatSkywarsStats, getBestMode, getSkywarsModeStats } from "@/lib/hypixel/skywars/skywars"
|
||||||
import { _SkywarsStats, getBestMode, getSkywarsModeStats } from "@/lib/hypixel/skywars"
|
|
||||||
import { NonNullStats } from "@/lib/schema/player"
|
import { NonNullStats } from "@/lib/schema/player"
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { getColor } from "@/data/colors"
|
import { getColor } from "@/lib/colors"
|
||||||
import { Player } from "@/lib/schema/player"
|
import { Player } from "@/lib/schema/player"
|
||||||
|
|
||||||
type NewPackageRank = Player["player"]["newPackageRank"]
|
type NewPackageRank = Player["player"]["newPackageRank"]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import { Input } from "@/components/ui/input"
|
import { Input } from "@/components/ui/input"
|
||||||
import { validatePlayer } from "@/lib/hypixel/validatePlayer"
|
import { validatePlayer } from "@/lib/hypixel/actions"
|
||||||
import { cn } from "@/lib/utils"
|
import { cn } from "@/lib/utils"
|
||||||
import { Search } from "lucide-react"
|
import { Search } from "lucide-react"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
@@ -41,7 +41,7 @@ export function SearchBar({ navbar }: { navbar?: boolean }) {
|
|||||||
<div className={cn("w-full max-w-4xl px-4", !navbar && "mt-8")}>
|
<div className={cn("w-full max-w-4xl px-4", !navbar && "mt-8")}>
|
||||||
<form onSubmit={handleSearch}>
|
<form onSubmit={handleSearch}>
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4" />
|
<Search className="absolute left-3 top-1/2 w-4 h-4 transform -translate-y-1/2 text-muted-foreground" />
|
||||||
<Input
|
<Input
|
||||||
type="text"
|
type="text"
|
||||||
placeholder={!navbar ? "Search for a player..." : ""}
|
placeholder={!navbar ? "Search for a player..." : ""}
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
import { BedwarsModeStats } from "./hypixel/bedwars"
|
|
||||||
import { devide } from "./hypixel/general"
|
|
||||||
import { SkywarsModeStats } from "./hypixel/skywars"
|
|
||||||
|
|
||||||
export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
|
|
||||||
const summed = concatStatsArray<SkywarsModeStats>(["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<BedwarsModeStats>([
|
|
||||||
"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<T extends Record<string, number>>(keys: (keyof T)[], ...stats: T[]) {
|
|
||||||
const base: Record<string, number> = {}
|
|
||||||
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
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
|
import { PRESTIGE_ICONS, PRESTIGES, SLUMBER_ROOMS, SLUMBER_WALLETS } from "@/data/hypixel/bedwars"
|
||||||
import { floorLevel } from "./formatters"
|
import { getColorFromCode } from "@/lib/colors"
|
||||||
import { devide } from "./general"
|
import { concatStatsArray, devide, floorLevel } from "../general"
|
||||||
|
|
||||||
export function getBedwarsStar(level: number) {
|
export function getBedwarsStar(level: number) {
|
||||||
if (level < 1100) {
|
if (level < 1100) {
|
||||||
@@ -18,6 +18,51 @@ export function getBedwarsStar(level: number) {
|
|||||||
return PRESTIGE_ICONS[3].symbol
|
return PRESTIGE_ICONS[3].symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function concatBedwarsStats(...stats: BedwarsModeStats[]) {
|
||||||
|
if (stats.length === 0) return []
|
||||||
|
|
||||||
|
const summed = concatStatsArray<BedwarsModeStats>([
|
||||||
|
"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) {
|
export function getTextColor(level: number) {
|
||||||
const floored = floorLevel(level, 100)
|
const floored = floorLevel(level, 100)
|
||||||
|
|
||||||
@@ -28,6 +73,26 @@ export function getTextColor(level: number) {
|
|||||||
return PRESTIGES.find(l => l.level === floored)!.color
|
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) {
|
export function getPrestigeName(level: number) {
|
||||||
const floored = floorLevel(level, 100)
|
const floored = floorLevel(level, 100)
|
||||||
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
export function floorLevel(level: number, base: number) {
|
|
||||||
const extra = level % base
|
|
||||||
|
|
||||||
if (extra === 0) {
|
|
||||||
return level;
|
|
||||||
}
|
|
||||||
|
|
||||||
return level - extra;
|
|
||||||
}
|
|
||||||
@@ -11,3 +11,24 @@ export function devide(num: number, num2: number) {
|
|||||||
|
|
||||||
return num / num2
|
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<T extends Record<string, number>>(keys: (keyof T)[], ...stats: T[]) {
|
||||||
|
const base: Record<string, number> = {}
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { Guild } from "../schema/guild"
|
import { Guild } from "@/lib/schema/guild"
|
||||||
|
|
||||||
export function getGuildMember(guild: Guild["guild"], uuid: string) {
|
export function getGuildMember(guild: Guild["guild"], uuid: string) {
|
||||||
return guild.members.find(m => m.uuid === uuid)
|
return guild.members.find(m => m.uuid === uuid)
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import { HEADS, ICONS, PRESTIGES } from "@/data/hypixel/skywars"
|
import { HEADS, ICONS, PRESTIGES } from "@/data/hypixel/skywars"
|
||||||
import { floorLevel } from "./formatters"
|
import { concatStatsArray, devide, floorLevel } from "../general"
|
||||||
import { devide } from "./general"
|
|
||||||
|
|
||||||
export function getHeadsColor(key: string) {
|
export function getHeadsColor(key: string) {
|
||||||
const val = HEADS.find(v => v.id === key)?.color
|
const val = HEADS.find(v => v.id === key)?.color
|
||||||
@@ -10,6 +9,25 @@ export function getHeadsColor(key: string) {
|
|||||||
return val
|
return val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
|
||||||
|
const summed = concatStatsArray<SkywarsModeStats>(["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) {
|
export function getTextColor(level: number) {
|
||||||
const floored = floorLevel(level, 5)
|
const floored = floorLevel(level, 5)
|
||||||
|
|
||||||
@@ -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)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user