Renamed files
This commit is contained in:
21
src/app/(stats)/player/[ign]/_components/badge.tsx
Normal file
21
src/app/(stats)/player/[ign]/_components/badge.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
"use client"
|
||||
|
||||
import { DEVUUIDS } from "@/data/general"
|
||||
import { Tooltip } from "react-tooltip"
|
||||
import DeveloperBadge from "../../../../../components/svgs/developer-badge"
|
||||
|
||||
export function DevBadge({ uuid, size }: { uuid: string, size?: number }) {
|
||||
if (!DEVUUIDS.includes(uuid)) return null
|
||||
|
||||
return (
|
||||
<>
|
||||
<DeveloperBadge
|
||||
data-id="dev-badge"
|
||||
data-tooltip-id="dev-badge"
|
||||
data-tooltip-content="Developer"
|
||||
size={size}
|
||||
/>
|
||||
<Tooltip id="dev-badge" />
|
||||
</>
|
||||
)
|
||||
}
|
||||
197
src/app/(stats)/player/[ign]/_components/displayname.tsx
Normal file
197
src/app/(stats)/player/[ign]/_components/displayname.tsx
Normal file
@@ -0,0 +1,197 @@
|
||||
import { getColor } from "@/lib/colors"
|
||||
import { head } from "@/lib/hypixel/general"
|
||||
import { Player } from "@/lib/schema/player"
|
||||
import Image from "next/image"
|
||||
import Link from "next/link"
|
||||
import { DevBadge } from "./badge"
|
||||
import { OnlineStatus } from "./online-status"
|
||||
|
||||
type NewPackageRank = Player["player"]["newPackageRank"]
|
||||
type MonthlyPackageRank = Player["player"]["monthlyPackageRank"]
|
||||
type RankColor = Player["player"]["monthlyRankColor"]
|
||||
|
||||
export default function DisplayName(
|
||||
{ ign, uuid, rank, monthly, rankColor, plusColor, guildTag, tagColor, specialRank, lastLogin, lastLogout, prefix }: {
|
||||
ign: string
|
||||
uuid: string
|
||||
rank: NewPackageRank
|
||||
monthly: MonthlyPackageRank
|
||||
rankColor: RankColor
|
||||
plusColor: string | undefined
|
||||
guildTag: string | undefined
|
||||
tagColor: string | undefined
|
||||
specialRank: string | undefined
|
||||
lastLogin: number | undefined
|
||||
lastLogout: number | undefined
|
||||
prefix: string | undefined
|
||||
}
|
||||
) {
|
||||
return (
|
||||
<div className="flex gap-2 items-center">
|
||||
<DevBadge uuid={uuid} size={40} />
|
||||
<Link href={`https://namemc.com/profile/${uuid}`}>
|
||||
<Image
|
||||
src={head(uuid, 40)}
|
||||
width={40}
|
||||
height={40}
|
||||
alt={ign}
|
||||
unoptimized
|
||||
className="shadow-2xl"
|
||||
/>
|
||||
</Link>
|
||||
<h1 className="font-bold sm:text-xl md:text-3xl text-md text-stroke text-stroke-foreground dark:text-stroke-transparent">
|
||||
<PlayerRank rank={rank} monthly={monthly} plusColor={plusColor} rankColor={rankColor} specialRank={specialRank} prefix={prefix} />
|
||||
{" "}
|
||||
<PlayerIGN ign={ign} rank={rank} monthly={monthly} rankColor={rankColor} specialRank={specialRank} prefix={prefix} />{" "}
|
||||
<GuildTag tag={guildTag} tagColor={tagColor} ign={ign} />
|
||||
</h1>
|
||||
<OnlineStatus lastLogin={lastLogin} lastLogout={lastLogout} />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
function PlayerIGN(
|
||||
{ ign, rank, monthly, rankColor, specialRank, prefix }: {
|
||||
ign: string
|
||||
rank: NewPackageRank
|
||||
monthly: MonthlyPackageRank
|
||||
rankColor: RankColor
|
||||
specialRank: string | undefined
|
||||
prefix: string | undefined
|
||||
}
|
||||
) {
|
||||
if (prefix === "[PIG+++]") {
|
||||
return <span className="text-mc-light-purple">{ign}</span>
|
||||
}
|
||||
|
||||
if (specialRank) {
|
||||
if (specialRank === "YOUTUBER") {
|
||||
return <span className="text-mc-red">{ign}</span>
|
||||
}
|
||||
|
||||
if (specialRank === "STAFF") {
|
||||
return <span className="text-mc-red">{ign}</span>
|
||||
}
|
||||
}
|
||||
|
||||
if (monthly === "SUPERSTAR") {
|
||||
if (rankColor === "GOLD") {
|
||||
return <span className="text-mc-gold">{ign}</span>
|
||||
} else {
|
||||
return <span className="text-mc-aqua">{ign}</span>
|
||||
}
|
||||
}
|
||||
|
||||
switch (rank) {
|
||||
case "VIP":
|
||||
return <span className="text-mc-green">{ign}</span>
|
||||
case "VIP_PLUS":
|
||||
return <span className="text-mc-green">{ign}</span>
|
||||
case "MVP":
|
||||
return <span className="text-mc-aqua">{ign}</span>
|
||||
case "MVP_PLUS":
|
||||
return <span className="text-mc-aqua">{ign}</span>
|
||||
default:
|
||||
return <span className="text-mc-gray">{ign}</span>
|
||||
}
|
||||
}
|
||||
|
||||
function PlayerRank(
|
||||
{ rank, monthly, plusColor, rankColor, specialRank, prefix }: {
|
||||
rank: NewPackageRank
|
||||
monthly: MonthlyPackageRank
|
||||
plusColor?: string
|
||||
rankColor: RankColor
|
||||
specialRank: string | undefined
|
||||
prefix: string | undefined
|
||||
}
|
||||
) {
|
||||
if (prefix === "[PIG+++]") {
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-light-purple">[PIG</span>
|
||||
<span className="text-mc-aqua">+++</span>
|
||||
<span className="text-mc-light-purple">]</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
if (specialRank) {
|
||||
if (specialRank === "YOUTUBER") {
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-red">[</span>
|
||||
<span className="text-mc-white">YOUTUBE</span>
|
||||
<span className="text-mc-red">]</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
if (specialRank === "STAFF") {
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-red">[</span>
|
||||
<span className="text-mc-gold">ዞ</span>
|
||||
<span className="text-mc-red">]</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (monthly === "SUPERSTAR") {
|
||||
if (rankColor === "GOLD") {
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-gold">[MVP</span>
|
||||
<span className={getColor(plusColor)}>++</span>
|
||||
<span className="text-mc-gold">]</span>
|
||||
</>
|
||||
)
|
||||
} else {
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-aqua">[MVP</span>
|
||||
<span className={getColor(plusColor)}>++</span>
|
||||
<span className="text-mc-aqua">]</span>
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
switch (rank) {
|
||||
case "VIP":
|
||||
return <span className="text-mc-green">[VIP]</span>
|
||||
case "VIP_PLUS":
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-green">[VIP</span>
|
||||
<span className="text-mc-gold">+</span>
|
||||
<span className="text-mc-green">]</span>
|
||||
</>
|
||||
)
|
||||
case "MVP":
|
||||
return <span className="text-mc-aqua">[MVP]</span>
|
||||
case "MVP_PLUS":
|
||||
return (
|
||||
<>
|
||||
<span className="text-mc-aqua">[MVP</span>
|
||||
<span className={getColor(plusColor)}>+</span>
|
||||
<span className="text-mc-aqua">]</span>
|
||||
</>
|
||||
)
|
||||
default:
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function GuildTag({ tag, tagColor, ign }: { tag?: string, tagColor?: string, ign: string }) {
|
||||
if (!tag) return null
|
||||
|
||||
const color = getColor(tagColor, "text", "gray")
|
||||
|
||||
return (
|
||||
<Link href={`/guild/${ign}`}>
|
||||
<span className={color}>[{tag}]</span>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
77
src/app/(stats)/player/[ign]/_components/online-status.tsx
Normal file
77
src/app/(stats)/player/[ign]/_components/online-status.tsx
Normal file
@@ -0,0 +1,77 @@
|
||||
"use client"
|
||||
|
||||
import { formatRelativeTime } from "@/lib/formatters"
|
||||
import { Wifi, WifiOff } from "lucide-react"
|
||||
import { useEffect, useState } from "react"
|
||||
import { Tooltip } from "react-tooltip"
|
||||
|
||||
export function OnlineStatus({ lastLogin, lastLogout }: { lastLogin: number | undefined, lastLogout: number | undefined }) {
|
||||
const [pos, setPos] = useState({ x: 0, y: 0 })
|
||||
const size = 36
|
||||
|
||||
useEffect(() => {
|
||||
const controller = new AbortController()
|
||||
|
||||
window.addEventListener("mousemove", (e) => {
|
||||
if (!(e.target instanceof SVGElement)) return
|
||||
if (e.target.dataset.id !== "online-status") return
|
||||
|
||||
setPos({ x: e.clientX, y: e.clientY - 10 })
|
||||
}, { signal: controller.signal })
|
||||
|
||||
return () => {
|
||||
controller.abort()
|
||||
}
|
||||
})
|
||||
return (
|
||||
<>
|
||||
<OnlineIcon lastLogout={lastLogout} lastLogin={lastLogin} size={size} />
|
||||
<Tooltip id="online-status" position={pos} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
function OnlineIcon({ lastLogout, lastLogin, size }: { lastLogout?: number, lastLogin?: number, size: number }) {
|
||||
if (!lastLogout || !lastLogin) {
|
||||
return (
|
||||
<>
|
||||
<WifiOff
|
||||
data-id="online-status"
|
||||
data-tooltip-id="online-status"
|
||||
data-tooltip-content="Offline. Player is most likely in status offline or a staff with api off."
|
||||
suppressHydrationWarning
|
||||
className="text-mc-gray"
|
||||
size={size}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
if (lastLogout > lastLogin) {
|
||||
return (
|
||||
<>
|
||||
<WifiOff
|
||||
data-id="online-status"
|
||||
data-tooltip-id="online-status"
|
||||
data-tooltip-content={`Offline. Last seen online ${formatRelativeTime(lastLogout, "past")}`}
|
||||
suppressHydrationWarning
|
||||
className="text-mc-gray"
|
||||
size={size}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<Wifi
|
||||
data-id="online-status"
|
||||
data-tooltip-id="online-status"
|
||||
data-tooltip-content={`Online. Online for ${formatRelativeTime(lastLogin, "future")}`}
|
||||
suppressHydrationWarning
|
||||
className="text-mc-green"
|
||||
size={size}
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
@@ -10,7 +10,7 @@ import { Guild } from "@/lib/schema/guild"
|
||||
import { Player } from "@/lib/schema/player"
|
||||
import { Session } from "@/lib/schema/status"
|
||||
import Link from "next/link"
|
||||
import SocialIcons from "./SocialIcons"
|
||||
import SocialIcons from "./social-icons"
|
||||
|
||||
type SidebarProps = {
|
||||
level: number
|
||||
@@ -2,7 +2,7 @@ import { Separator } from "@/components/ui/separator"
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getArcadeTotalWins } from "@/lib/hypixel/arcade/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
import { EmptyStats, GeneralStats } from "../stats-components"
|
||||
import ArcadeOtherStats from "./other"
|
||||
import { ArcadeMiniWallsStats, ArcadePixelPartyStats, ArcadeZombieStats } from "./stats"
|
||||
|
||||
@@ -3,7 +3,7 @@ import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { capitalizeFirstLetter } from "@/lib/utils"
|
||||
import { ReactNode } from "react"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function ArcadeOtherStats({ stats }: { stats: NonNullable<NonNullStats["Arcade"]> }) {
|
||||
return (
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { capitalizeFirstLetter } from "@/lib/utils"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
import { ArcadePixelPartyStatsTable, ArcadeZombieStatsTable, ArcadeZombieTypesTable } from "./table"
|
||||
|
||||
export function ArcadeZombieStats({ stats }: { stats: NonNullable<NonNullStats["Arcade"]> }) {
|
||||
|
||||
@@ -2,8 +2,8 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { getBedwarsPrestige, getBedwarsStar } from "@/lib/hypixel/bedwars/general"
|
||||
import { getBedwarsLevelForExp } from "@/lib/hypixel/bedwars/level"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import Multicolored from "../../_components/Multicolored"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
import Multicolored from "../../_components/multicolored"
|
||||
|
||||
export function BedwarsLevel({ xp }: { xp: number }) {
|
||||
const level = getBedwarsLevelForExp(xp)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getBedwarsLatestRoom, getBedwarsWalletMax } from "@/lib/hypixel/bedwars/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat, Stat } from "../../_components/Stats"
|
||||
import { BasicStat, Stat } from "../../_components/stats"
|
||||
import { BedWarsPrestige } from "./components"
|
||||
|
||||
export default function BedwarsGeneralStats(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function BlitzGeneralStats({ stats }: { stats: NonNullable<NonNullStats["Blitz"]> }) {
|
||||
const wins = stats.wins_solo_normal + stats.wins_teams_normal
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { getBuildBattleRank, getBuildBattleRankNext } from "@/lib/hypixel/build-battle/general"
|
||||
import { getProgress } from "@/lib/hypixel/general"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
|
||||
export default function BuildBattleTitleProgress({ score }: { score: number }) {
|
||||
const current = getBuildBattleRank(score)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { getBuildBattleRank } from "@/lib/hypixel/build-battle/general"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function BuildBattleGeneralStats({ stats }: { stats: NonNullable<NonNullStats["BuildBattle"]> }) {
|
||||
const rank = getBuildBattleRank(stats.score)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export function ArenaBrawlGeneralStats({ coins, keys, ws }: { coins: number, keys: number, ws: number }) {
|
||||
return (
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function CopsAndCrimsGeneralStats(
|
||||
{ stats, kills, assits, deaths, wins }: {
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
} from "@/lib/hypixel/copsandcrims/general"
|
||||
import { romanize } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { GenericProgressNoTooltip } from "../../_components/GenericProgress"
|
||||
import { GenericProgressNoTooltip } from "../../_components/generic-progress"
|
||||
|
||||
export default function CopsAndCrimsWeaponStats({ stats }: { stats: NonNullable<NonNullStats["CopsAndCrims"]> }) {
|
||||
return (
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Div } from "@/lib/hypixel/duels/general"
|
||||
import { romanize } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function DuelsGeneralStats(
|
||||
{ stats, div, kd, wl }: { stats: NonNullable<NonNullStats["Duels"]>, div: Div | null, kd: string, wl: string }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function MegaWallsGeneralStats({ stats }: { stats: NonNullable<NonNullStats["MegaWalls"]> }) {
|
||||
const wl = formatNumber(devide(stats.wins, stats.losses))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function MurderMysteryInfectionStats({ stats }: { stats: NonNullable<NonNullStats["MurderMystery"]> }) {
|
||||
return (
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { getMurderMysteryKnifeName } from "@/lib/hypixel/murder-mystery/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function MurderMysteryGeneralStats({ stats }: { stats: NonNullable<NonNullStats["MurderMystery"]> }) {
|
||||
const kd = formatNumber(devide(stats.kills, stats.deaths))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getProgress } from "@/lib/hypixel/general"
|
||||
import { getPitPrestigeColor, getPitXpForPrestige } from "@/lib/hypixel/pit/general"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
|
||||
export default function PitProgress({ prestige, xp }: { prestige: number, xp: number }) {
|
||||
const presColor = getPitPrestigeColor(prestige)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { devide, romanize } from "@/lib/hypixel/general"
|
||||
import { getPitLevelColor, getPitPrestige, getPitPrestigeColor } from "@/lib/hypixel/pit/general"
|
||||
import { getPitLevel } from "@/lib/hypixel/pit/level"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function PitGeneralStats({ stats }: { stats: NonNullable<NonNullStats["Pit"]> }) {
|
||||
const prestige = getPitPrestige(stats)
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { getSkyWarsIcon, getSkywarsPrestige } from "@/lib/hypixel/skywars/general"
|
||||
import { getSkywarsLevel } from "@/lib/hypixel/skywars/level"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
import { SkywarsHeadsBar, SkywarsPresigeousHeads } from "./client"
|
||||
|
||||
type SkywarsHeadsProps = {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat, Stat } from "../../_components/Stats"
|
||||
import { BasicStat, Stat } from "../../_components/stats"
|
||||
import { SkywarsPrestige } from "./components"
|
||||
|
||||
export default function SkyWarsGeneralStats({ stats, level }: { stats: NonNullable<NonNullStats["SkyWars"]>, level: number }) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function SmashHerosGeneralStats({ stats }: { stats: NonNullable<NonNullStats["SmashHeros"]> }) {
|
||||
const kd = formatNumber(devide(stats.kills, stats.deaths))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { getProgress } from "@/lib/hypixel/general"
|
||||
import { getSpeedUHCScore, getSpeedUHCTitle } from "@/lib/hypixel/speeduhc/general"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
|
||||
export default function SpeedUHCProgress({ level, score }: { level: number, score: number }) {
|
||||
const nextScore = getSpeedUHCScore(level + 1)
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { getSpeedUHCStar, getSpeedUHCTitle } from "@/lib/hypixel/speeduhc/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function SpeedUHCGeneralStats({ stats, uhcCoins }: { stats: NonNullable<NonNullStats["SpeedUHC"]>, uhcCoins: number | undefined }) {
|
||||
const star = getSpeedUHCStar(stats.score)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Card, CardContent } from "@/components/ui/card"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { CircleSlash } from "lucide-react"
|
||||
import { ReactNode } from "react"
|
||||
import CollapsedStats from "../_components/CollapsedStats"
|
||||
import CollapsedStats from "../_components/collapsed-stats"
|
||||
|
||||
export function GeneralStats(
|
||||
{ id, title, children, collapsedStats, className }: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function TNTGamesGeneralStats({ stats }: { stats: NonNullable<NonNullStats["TNTGames"]> }) {
|
||||
return (
|
||||
|
||||
@@ -3,8 +3,8 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide, romanize } from "@/lib/hypixel/general"
|
||||
import { getTNTGameMode, getTNTModeStats } from "@/lib/hypixel/tnt-games/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { GenericProgressNoTooltip } from "../../_components/GenericProgress"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { GenericProgressNoTooltip } from "../../_components/generic-progress"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function TNTGamesWizardsStats({ stats }: { stats: NonNullable<NonNullStats["TNTGames"]> }) {
|
||||
return (
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getProgress } from "@/lib/hypixel/general"
|
||||
import { getUhcStar, getUhcStarNext } from "@/lib/hypixel/uhc/level"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
|
||||
export default function UHCProgress({ score }: { score: number }) {
|
||||
const current = getUhcStar(score)
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { getUhcStar } from "@/lib/hypixel/uhc/level"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function UHCGeneralStats(
|
||||
{ stats, kills, deaths, wins, heads }: { stats: NonNullable<NonNullStats["UHC"]>, kills: number, deaths: number, wins: number, heads: number }
|
||||
|
||||
@@ -2,7 +2,7 @@ import { formatNumber } from "@/lib/formatters"
|
||||
import { devide } from "@/lib/hypixel/general"
|
||||
import { getWarlordsLosses } from "@/lib/hypixel/warlords/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export default function WarlordsGeneralStats({ stats }: { stats: NonNullable<NonNullStats["Warlords"]> }) {
|
||||
const losses = getWarlordsLosses(stats)
|
||||
|
||||
@@ -3,7 +3,7 @@ import { devide } from "@/lib/hypixel/general"
|
||||
import { getWoolGamesWoolWarsClass, getWoolGamesWoolWarsClassColor } from "@/lib/hypixel/woolgames/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { BasicStat } from "../../_components/Stats"
|
||||
import { BasicStat } from "../../_components/stats"
|
||||
|
||||
export function WoolGamesCaptureTheWool({ ctw }: { ctw: NonNullable<NonNullStats["WoolGames"]>["capture_the_wool"] }) {
|
||||
if (!ctw) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getWoolGamesPrestige, getWoolGamesXPForLevel } from "@/lib/hypixel/woolgames/general"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { GenericProgress } from "../../_components/GenericProgress"
|
||||
import { GenericProgress } from "../../_components/generic-progress"
|
||||
|
||||
export default function WoolGamesProgress({ xp, level }: { xp: number, level: number }) {
|
||||
const pres = getWoolGamesPrestige(Math.floor(level))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { formatNumber, formatSecondsToTime } from "@/lib/formatters"
|
||||
import { getWoolGamesPrestige } from "@/lib/hypixel/woolgames/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import { BasicStat, Stat } from "../../_components/Stats"
|
||||
import { BasicStat, Stat } from "../../_components/stats"
|
||||
|
||||
export default function WoolGamesGeneralStats(
|
||||
{ stats, level, kills, wins }: { stats: NonNullable<NonNullStats["WoolGames"]>, level: number, kills: number, wins: number }
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Separator } from "@/components/ui/separator"
|
||||
import { formatNumber } from "@/lib/formatters"
|
||||
import { getWoolGamesLevel, getWoolGamesPrestige, getWoolGamesPretigeIcon } from "@/lib/hypixel/woolgames/general"
|
||||
import { NonNullStats } from "@/lib/schema/player"
|
||||
import Multicolored from "../../_components/Multicolored"
|
||||
import Multicolored from "../../_components/multicolored"
|
||||
import { EmptyStats, GeneralStats } from "../stats-components"
|
||||
import { WoolGamesCaptureTheWool, WoolGamesSheepWars, WoolGamesWoolWars } from "./modes"
|
||||
import WoolGamesProgress from "./progress"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import DisplayName from "@/components/player/displayname"
|
||||
import DisplayName from "@/app/(stats)/player/[ign]/_components/displayname"
|
||||
import { Card, CardContent } from "@/components/ui/card"
|
||||
import { COOKIE_VALUES } from "@/data/general"
|
||||
import { env } from "@/lib/env/server"
|
||||
@@ -13,7 +13,7 @@ import { cookies } from "next/headers"
|
||||
import { Suspense } from "react"
|
||||
import z from "zod"
|
||||
import { PlayerPageLoadText, PlayerStats } from "./_client"
|
||||
import Sidebar from "./_components/Sidebar"
|
||||
import Sidebar from "./_components/sidebar"
|
||||
|
||||
export async function generateMetadata({ params }: { params: Promise<{ ign: string }> }): Promise<Metadata> {
|
||||
const { ign } = await params
|
||||
|
||||
Reference in New Issue
Block a user