Updated layout and added suspense

This commit is contained in:
2025-08-22 11:24:31 +02:00
parent b9959e86b7
commit a7c8b1cef4
7 changed files with 234 additions and 203 deletions

View File

@@ -4,19 +4,21 @@ import { Settings } from "lucide-react"
import Link from "next/link" import Link from "next/link"
import { ReactNode } from "react" import { ReactNode } from "react"
export default function RootLayout({ children }: Readonly<{ children: ReactNode }>) { export default function StatsLayout({ children }: Readonly<{ children: ReactNode }>) {
return ( return (
<> <>
<nav className="flex items-center justify-between px-6 py-4 border-b"> <header className="fixed w-screen bg-background/50 backdrop-blur-sm">
<nav className="flex justify-between items-center px-6 border-b h-header">
<Link href="/"> <Link href="/">
<span className="font-semibold text-lg">Hypixel Stats</span> <span className="text-lg font-semibold">Hypixel Stats</span>
</Link> </Link>
<SearchBar navbar /> <SearchBar navbar />
<Button variant="ghost" size="icon" aria-label="Settings"> <Button variant="ghost" size="icon" aria-label="Settings">
<Settings className="h-5 w-5" /> <Settings className="w-5 h-5" />
</Button> </Button>
</nav> </nav>
<div> </header>
<div className="pt-header">
{children} {children}
</div> </div>
</> </>

View File

@@ -1,11 +1,11 @@
import { Card, CardContent } from "@/components/ui/card" import { Card, CardContent } from "@/components/ui/card"
import { Separator } from "@/components/ui/separator"
import { getColor } from "@/data/colors" import { getColor } from "@/data/colors"
import { formatDate, formatNumber } from "@/lib/formatters" import { formatDate, formatNumber } from "@/lib/formatters"
import { getGuildMember, getGuildRankTag, getMemberGEXP, getMemberWeeklyGEXP } from "@/lib/hypixel/guild" 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/stats"
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 { Separator } from "@radix-ui/react-separator"
import Link from "next/link" import Link from "next/link"
import SocialIcons from "./SocialIcons" import SocialIcons from "./SocialIcons"
@@ -18,7 +18,7 @@ type SidebarProps = {
export default function Sidebar({ level, ign, player, guild }: SidebarProps) { export default function Sidebar({ level, ign, player, guild }: SidebarProps) {
return ( return (
<Card className="w-1/4"> <Card className="overflow-hidden w-1/4 max-h-fit">
<CardContent> <CardContent>
<div className="flex justify-between px-8"> <div className="flex justify-between px-8">
<div className="text-center"> <div className="text-center">

View File

@@ -2,10 +2,10 @@
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 { getBWLevelForExp, getTotalExpForLevel } from "@/lib/hypixel/bedwarsLevel" import { getBWLevelForExp, getTotalExpForLevel } from "@/lib/hypixel/bedwarsLevel"
import { getProgress } from "@/lib/hypixel/general" import { getProgress } from "@/lib/hypixel/general"
import { Player } from "@/lib/schema/player" import { Player } from "@/lib/schema/player"
import { Separator } from "@radix-ui/react-separator"
import { ChevronDown, ChevronUp, Menu } from "lucide-react" import { ChevronDown, ChevronUp, Menu } from "lucide-react"
import { useEffect, useRef, useState } from "react" import { useEffect, useRef, useState } from "react"
import CollapsedStats from "../../_components/CollapsedStats" import CollapsedStats from "../../_components/CollapsedStats"

View File

@@ -3,6 +3,8 @@ import { getGuild } from "@/lib/hypixel/api/guild"
import { getUuid } from "@/lib/hypixel/api/mojang" import { getUuid } from "@/lib/hypixel/api/mojang"
import { getPlayer } from "@/lib/hypixel/api/player" import { getPlayer } from "@/lib/hypixel/api/player"
import { getExactLevel } from "@/lib/hypixel/level" import { getExactLevel } from "@/lib/hypixel/level"
import { Loader2Icon } from "lucide-react"
import { Suspense } from "react"
import Sidebar from "./_components/Sidebar" import Sidebar from "./_components/Sidebar"
import BedwarsStats from "./_stats/bedwars/bedwars" import BedwarsStats from "./_stats/bedwars/bedwars"
@@ -11,8 +13,23 @@ export default async function PlayerPage({
}: { }: {
params: Promise<{ ign: string }> params: Promise<{ ign: string }>
}) { }) {
const { ign: pign } = await params const { ign } = await params
return (
<Suspense
fallback={
<div className="flex flex-col justify-center items-center h-screen">
<Loader2Icon className="animate-spin size-30" />
<p>{`Loading stats for ${ign}`}</p>
</div>
}
>
<SuspendedPage ign={ign} />
</Suspense>
)
}
async function SuspendedPage({ ign: pign }: { ign: string }) {
const uuid = await getUuid(pign) const uuid = await getUuid(pign)
if (!uuid) { if (!uuid) {
return ( return (

View File

@@ -22,6 +22,11 @@
--color-mc-white: #FFFFFF; --color-mc-white: #FFFFFF;
} }
@theme inline {
--spacing-header: 3.75rem;
--spacing-content: calc(100vh - var(--spacing-header));
}
@theme inline { @theme inline {
--radius-sm: calc(var(--radius) - 4px); --radius-sm: calc(var(--radius) - 4px);
--radius-md: calc(var(--radius) - 2px); --radius-md: calc(var(--radius) - 2px);

View File

@@ -1,4 +1,5 @@
import z from "zod" import z from "zod"
import { bedwarsStatsSchema, skywarsStatsSchema } from "./stats"
export const playerSchema = z.looseObject({ export const playerSchema = z.looseObject({
player: z.looseObject({ player: z.looseObject({
@@ -12,194 +13,8 @@ export const playerSchema = z.looseObject({
karma: z.number().default(0), karma: z.number().default(0),
achievementPoints: z.number().default(0), achievementPoints: z.number().default(0),
stats: z.looseObject({ stats: z.looseObject({
Bedwars: z.looseObject({ Bedwars: bedwarsStatsSchema.optional(),
Experience: z.number().default(0), SkyWars: skywarsStatsSchema.optional()
coins: z.number().default(0),
winstreak: z.number().optional(),
kills_bedwars: z.number().default(0),
deaths_bedwars: z.number().default(0),
final_kills_bedwars: z.number().default(0),
final_deaths_bedwars: z.number().default(0),
wins_bedwars: z.number().default(0),
losses_bedwars: z.number().default(0),
beds_broken_bedwars: z.number().default(0),
beds_lost_bedwars: z.number().default(0),
total_challenges_completed: z.number().default(0),
iron_resources_collected_bedwars: z.number().default(0),
gold_resources_collected_bedwars: z.number().default(0),
diamond_resources_collected_bedwars: z.number().default(0),
emerald_resources_collected_bedwars: z.number().default(0),
_items_purchased_bedwars: z.number().default(0),
slumber: z.looseObject({
tickets: z.number().default(0),
bag_type: z.string(),
total_tickets_earned: z.number(),
doublers: z.number(),
room: z.record(z.string(), z.boolean())
}).optional(),
eight_one_winstreak: z.number().optional(),
eight_one_kills_bedwars: z.number().default(0),
eight_one_deaths_bedwars: z.number().default(0),
eight_one_final_kills_bedwars: z.number().default(0),
eight_one_final_deaths_bedwars: z.number().default(0),
eight_one_wins_bedwars: z.number().default(0),
eight_one_losses_bedwars: z.number().default(0),
eight_one_beds_broken_bedwars: z.number().default(0),
eight_one_beds_lost_bedwars: z.number().default(0),
eight_two_winstreak: z.number().optional(),
eight_two_kills_bedwars: z.number().default(0),
eight_two_deaths_bedwars: z.number().default(0),
eight_two_final_kills_bedwars: z.number().default(0),
eight_two_final_deaths_bedwars: z.number().default(0),
eight_two_wins_bedwars: z.number().default(0),
eight_two_losses_bedwars: z.number().default(0),
eight_two_beds_broken_bedwars: z.number().default(0),
eight_two_beds_lost_bedwars: z.number().default(0),
four_three_winstreak: z.number().optional(),
four_three_kills_bedwars: z.number().default(0),
four_three_deaths_bedwars: z.number().default(0),
four_three_final_kills_bedwars: z.number().default(0),
four_three_final_deaths_bedwars: z.number().default(0),
four_three_wins_bedwars: z.number().default(0),
four_three_losses_bedwars: z.number().default(0),
four_three_beds_broken_bedwars: z.number().default(0),
four_three_beds_lost_bedwars: z.number().default(0),
four_four_winstreak: z.number().optional(),
four_four_kills_bedwars: z.number().default(0),
four_four_deaths_bedwars: z.number().default(0),
four_four_final_kills_bedwars: z.number().default(0),
four_four_final_deaths_bedwars: z.number().default(0),
four_four_wins_bedwars: z.number().default(0),
four_four_losses_bedwars: z.number().default(0),
four_four_beds_broken_bedwars: z.number().default(0),
four_four_beds_lost_bedwars: z.number().default(0),
two_four_winstreak: z.number().optional(),
two_four_kills_bedwars: z.number().default(0),
two_four_deaths_bedwars: z.number().default(0),
two_four_final_kills_bedwars: z.number().default(0),
two_four_final_deaths_bedwars: z.number().default(0),
two_four_wins_bedwars: z.number().default(0),
two_four_losses_bedwars: z.number().default(0),
two_four_beds_broken_bedwars: z.number().default(0),
two_four_beds_lost_bedwars: z.number().default(0),
eight_two_rush_winstreak: z.number().optional(),
eight_two_rush_kills_bedwars: z.number().default(0),
eight_two_rush_deaths_bedwars: z.number().default(0),
eight_two_rush_final_kills_bedwars: z.number().default(0),
eight_two_rush_final_deaths_bedwars: z.number().default(0),
eight_two_rush_wins_bedwars: z.number().default(0),
eight_two_rush_losses_bedwars: z.number().default(0),
eight_two_rush_beds_broken_bedwars: z.number().default(0),
eight_two_rush_beds_lost_bedwars: z.number().default(0),
four_four_rush_winstreak: z.number().optional(),
four_four_rush_kills_bedwars: z.number().default(0),
four_four_rush_deaths_bedwars: z.number().default(0),
four_four_rush_final_kills_bedwars: z.number().default(0),
four_four_rush_final_deaths_bedwars: z.number().default(0),
four_four_rush_wins_bedwars: z.number().default(0),
four_four_rush_losses_bedwars: z.number().default(0),
four_four_rush_beds_broken_bedwars: z.number().default(0),
four_four_rush_beds_lost_bedwars: z.number().default(0),
eight_two_ultimate_winstreak: z.number().optional(),
eight_two_ultimate_kills_bedwars: z.number().default(0),
eight_two_ultimate_deaths_bedwars: z.number().default(0),
eight_two_ultimate_final_kills_bedwars: z.number().default(0),
eight_two_ultimate_final_deaths_bedwars: z.number().default(0),
eight_two_ultimate_wins_bedwars: z.number().default(0),
eight_two_ultimate_losses_bedwars: z.number().default(0),
eight_two_ultimate_beds_broken_bedwars: z.number().default(0),
eight_two_ultimate_beds_lost_bedwars: z.number().default(0),
four_four_ultimate_winstreak: z.number().optional(),
four_four_ultimate_kills_bedwars: z.number().default(0),
four_four_ultimate_deaths_bedwars: z.number().default(0),
four_four_ultimate_final_kills_bedwars: z.number().default(0),
four_four_ultimate_final_deaths_bedwars: z.number().default(0),
four_four_ultimate_wins_bedwars: z.number().default(0),
four_four_ultimate_losses_bedwars: z.number().default(0),
four_four_ultimate_beds_broken_bedwars: z.number().default(0),
four_four_ultimate_beds_lost_bedwars: z.number().default(0),
eight_two_lucky_winstreak: z.number().optional(),
eight_two_lucky_kills_bedwars: z.number().default(0),
eight_two_lucky_deaths_bedwars: z.number().default(0),
eight_two_lucky_final_kills_bedwars: z.number().default(0),
eight_two_lucky_final_deaths_bedwars: z.number().default(0),
eight_two_lucky_wins_bedwars: z.number().default(0),
eight_two_lucky_losses_bedwars: z.number().default(0),
eight_two_lucky_beds_broken_bedwars: z.number().default(0),
eight_two_lucky_beds_lost_bedwars: z.number().default(0),
four_four_lucky_winstreak: z.number().optional(),
four_four_lucky_kills_bedwars: z.number().default(0),
four_four_lucky_deaths_bedwars: z.number().default(0),
four_four_lucky_final_kills_bedwars: z.number().default(0),
four_four_lucky_final_deaths_bedwars: z.number().default(0),
four_four_lucky_wins_bedwars: z.number().default(0),
four_four_lucky_losses_bedwars: z.number().default(0),
four_four_lucky_beds_broken_bedwars: z.number().default(0),
four_four_lucky_beds_lost_bedwars: z.number().default(0),
eight_two_voidless_winstreak: z.number().optional(),
eight_two_voidless_kills_bedwars: z.number().default(0),
eight_two_voidless_deaths_bedwars: z.number().default(0),
eight_two_voidless_final_kills_bedwars: z.number().default(0),
eight_two_voidless_final_deaths_bedwars: z.number().default(0),
eight_two_voidless_wins_bedwars: z.number().default(0),
eight_two_voidless_losses_bedwars: z.number().default(0),
eight_two_voidless_beds_broken_bedwars: z.number().default(0),
eight_two_voidless_beds_lost_bedwars: z.number().default(0),
four_four_voidless_winstreak: z.number().optional(),
four_four_voidless_kills_bedwars: z.number().default(0),
four_four_voidless_deaths_bedwars: z.number().default(0),
four_four_voidless_final_kills_bedwars: z.number().default(0),
four_four_voidless_final_deaths_bedwars: z.number().default(0),
four_four_voidless_wins_bedwars: z.number().default(0),
four_four_voidless_losses_bedwars: z.number().default(0),
four_four_voidless_beds_broken_bedwars: z.number().default(0),
four_four_voidless_beds_lost_bedwars: z.number().default(0),
eight_two_armed_winstreak: z.number().optional(),
eight_two_armed_kills_bedwars: z.number().default(0),
eight_two_armed_deaths_bedwars: z.number().default(0),
eight_two_armed_final_kills_bedwars: z.number().default(0),
eight_two_armed_final_deaths_bedwars: z.number().default(0),
eight_two_armed_wins_bedwars: z.number().default(0),
eight_two_armed_losses_bedwars: z.number().default(0),
eight_two_armed_beds_broken_bedwars: z.number().default(0),
eight_two_armed_beds_lost_bedwars: z.number().default(0),
four_four_armed_winstreak: z.number().optional(),
four_four_armed_kills_bedwars: z.number().default(0),
four_four_armed_deaths_bedwars: z.number().default(0),
four_four_armed_final_kills_bedwars: z.number().default(0),
four_four_armed_final_deaths_bedwars: z.number().default(0),
four_four_armed_wins_bedwars: z.number().default(0),
four_four_armed_losses_bedwars: z.number().default(0),
four_four_armed_beds_broken_bedwars: z.number().default(0),
four_four_armed_beds_lost_bedwars: z.number().default(0),
four_four_swap_winstreak: z.number().optional(),
four_four_swap_kills_bedwars: z.number().default(0),
four_four_swap_deaths_bedwars: z.number().default(0),
four_four_swap_final_kills_bedwars: z.number().default(0),
four_four_swap_final_deaths_bedwars: z.number().default(0),
four_four_swap_wins_bedwars: z.number().default(0),
four_four_swap_losses_bedwars: z.number().default(0),
four_four_swap_beds_broken_bedwars: z.number().default(0),
four_four_swap_beds_lost_bedwars: z.number().default(0),
four_four_underworld_winstreak: z.number().optional(),
four_four_underworld_kills_bedwars: z.number().default(0),
four_four_underworld_deaths_bedwars: z.number().default(0),
four_four_underworld_final_kills_bedwars: z.number().default(0),
four_four_underworld_final_deaths_bedwars: z.number().default(0),
four_four_underworld_wins_bedwars: z.number().default(0),
four_four_underworld_losses_bedwars: z.number().default(0),
four_four_underworld_beds_broken_bedwars: z.number().default(0),
four_four_underworld_beds_lost_bedwars: z.number().default(0),
castle_winstreak: z.number().optional(),
castle_kills_bedwars: z.number().default(0),
castle_deaths_bedwars: z.number().default(0),
castle_final_kills_bedwars: z.number().default(0),
castle_final_deaths_bedwars: z.number().default(0),
castle_wins_bedwars: z.number().default(0),
castle_losses_bedwars: z.number().default(0),
castle_beds_broken_bedwars: z.number().default(0),
castle_beds_lost_bedwars: z.number().default(0)
}).optional()
}), }),
quests: z.record( quests: z.record(
z.string(), z.string(),

192
src/lib/schema/stats.ts Normal file
View File

@@ -0,0 +1,192 @@
import z from "zod"
export const bedwarsStatsSchema = z.looseObject({
Experience: z.number().default(0),
coins: z.number().default(0),
winstreak: z.number().optional(),
kills_bedwars: z.number().default(0),
deaths_bedwars: z.number().default(0),
final_kills_bedwars: z.number().default(0),
final_deaths_bedwars: z.number().default(0),
wins_bedwars: z.number().default(0),
losses_bedwars: z.number().default(0),
beds_broken_bedwars: z.number().default(0),
beds_lost_bedwars: z.number().default(0),
total_challenges_completed: z.number().default(0),
iron_resources_collected_bedwars: z.number().default(0),
gold_resources_collected_bedwars: z.number().default(0),
diamond_resources_collected_bedwars: z.number().default(0),
emerald_resources_collected_bedwars: z.number().default(0),
_items_purchased_bedwars: z.number().default(0),
slumber: z.looseObject({
tickets: z.number().default(0),
bag_type: z.string(),
total_tickets_earned: z.number(),
doublers: z.number(),
room: z.record(z.string(), z.boolean())
}).optional(),
eight_one_winstreak: z.number().optional(),
eight_one_kills_bedwars: z.number().default(0),
eight_one_deaths_bedwars: z.number().default(0),
eight_one_final_kills_bedwars: z.number().default(0),
eight_one_final_deaths_bedwars: z.number().default(0),
eight_one_wins_bedwars: z.number().default(0),
eight_one_losses_bedwars: z.number().default(0),
eight_one_beds_broken_bedwars: z.number().default(0),
eight_one_beds_lost_bedwars: z.number().default(0),
eight_two_winstreak: z.number().optional(),
eight_two_kills_bedwars: z.number().default(0),
eight_two_deaths_bedwars: z.number().default(0),
eight_two_final_kills_bedwars: z.number().default(0),
eight_two_final_deaths_bedwars: z.number().default(0),
eight_two_wins_bedwars: z.number().default(0),
eight_two_losses_bedwars: z.number().default(0),
eight_two_beds_broken_bedwars: z.number().default(0),
eight_two_beds_lost_bedwars: z.number().default(0),
four_three_winstreak: z.number().optional(),
four_three_kills_bedwars: z.number().default(0),
four_three_deaths_bedwars: z.number().default(0),
four_three_final_kills_bedwars: z.number().default(0),
four_three_final_deaths_bedwars: z.number().default(0),
four_three_wins_bedwars: z.number().default(0),
four_three_losses_bedwars: z.number().default(0),
four_three_beds_broken_bedwars: z.number().default(0),
four_three_beds_lost_bedwars: z.number().default(0),
four_four_winstreak: z.number().optional(),
four_four_kills_bedwars: z.number().default(0),
four_four_deaths_bedwars: z.number().default(0),
four_four_final_kills_bedwars: z.number().default(0),
four_four_final_deaths_bedwars: z.number().default(0),
four_four_wins_bedwars: z.number().default(0),
four_four_losses_bedwars: z.number().default(0),
four_four_beds_broken_bedwars: z.number().default(0),
four_four_beds_lost_bedwars: z.number().default(0),
two_four_winstreak: z.number().optional(),
two_four_kills_bedwars: z.number().default(0),
two_four_deaths_bedwars: z.number().default(0),
two_four_final_kills_bedwars: z.number().default(0),
two_four_final_deaths_bedwars: z.number().default(0),
two_four_wins_bedwars: z.number().default(0),
two_four_losses_bedwars: z.number().default(0),
two_four_beds_broken_bedwars: z.number().default(0),
two_four_beds_lost_bedwars: z.number().default(0),
eight_two_rush_winstreak: z.number().optional(),
eight_two_rush_kills_bedwars: z.number().default(0),
eight_two_rush_deaths_bedwars: z.number().default(0),
eight_two_rush_final_kills_bedwars: z.number().default(0),
eight_two_rush_final_deaths_bedwars: z.number().default(0),
eight_two_rush_wins_bedwars: z.number().default(0),
eight_two_rush_losses_bedwars: z.number().default(0),
eight_two_rush_beds_broken_bedwars: z.number().default(0),
eight_two_rush_beds_lost_bedwars: z.number().default(0),
four_four_rush_winstreak: z.number().optional(),
four_four_rush_kills_bedwars: z.number().default(0),
four_four_rush_deaths_bedwars: z.number().default(0),
four_four_rush_final_kills_bedwars: z.number().default(0),
four_four_rush_final_deaths_bedwars: z.number().default(0),
four_four_rush_wins_bedwars: z.number().default(0),
four_four_rush_losses_bedwars: z.number().default(0),
four_four_rush_beds_broken_bedwars: z.number().default(0),
four_four_rush_beds_lost_bedwars: z.number().default(0),
eight_two_ultimate_winstreak: z.number().optional(),
eight_two_ultimate_kills_bedwars: z.number().default(0),
eight_two_ultimate_deaths_bedwars: z.number().default(0),
eight_two_ultimate_final_kills_bedwars: z.number().default(0),
eight_two_ultimate_final_deaths_bedwars: z.number().default(0),
eight_two_ultimate_wins_bedwars: z.number().default(0),
eight_two_ultimate_losses_bedwars: z.number().default(0),
eight_two_ultimate_beds_broken_bedwars: z.number().default(0),
eight_two_ultimate_beds_lost_bedwars: z.number().default(0),
four_four_ultimate_winstreak: z.number().optional(),
four_four_ultimate_kills_bedwars: z.number().default(0),
four_four_ultimate_deaths_bedwars: z.number().default(0),
four_four_ultimate_final_kills_bedwars: z.number().default(0),
four_four_ultimate_final_deaths_bedwars: z.number().default(0),
four_four_ultimate_wins_bedwars: z.number().default(0),
four_four_ultimate_losses_bedwars: z.number().default(0),
four_four_ultimate_beds_broken_bedwars: z.number().default(0),
four_four_ultimate_beds_lost_bedwars: z.number().default(0),
eight_two_lucky_winstreak: z.number().optional(),
eight_two_lucky_kills_bedwars: z.number().default(0),
eight_two_lucky_deaths_bedwars: z.number().default(0),
eight_two_lucky_final_kills_bedwars: z.number().default(0),
eight_two_lucky_final_deaths_bedwars: z.number().default(0),
eight_two_lucky_wins_bedwars: z.number().default(0),
eight_two_lucky_losses_bedwars: z.number().default(0),
eight_two_lucky_beds_broken_bedwars: z.number().default(0),
eight_two_lucky_beds_lost_bedwars: z.number().default(0),
four_four_lucky_winstreak: z.number().optional(),
four_four_lucky_kills_bedwars: z.number().default(0),
four_four_lucky_deaths_bedwars: z.number().default(0),
four_four_lucky_final_kills_bedwars: z.number().default(0),
four_four_lucky_final_deaths_bedwars: z.number().default(0),
four_four_lucky_wins_bedwars: z.number().default(0),
four_four_lucky_losses_bedwars: z.number().default(0),
four_four_lucky_beds_broken_bedwars: z.number().default(0),
four_four_lucky_beds_lost_bedwars: z.number().default(0),
eight_two_voidless_winstreak: z.number().optional(),
eight_two_voidless_kills_bedwars: z.number().default(0),
eight_two_voidless_deaths_bedwars: z.number().default(0),
eight_two_voidless_final_kills_bedwars: z.number().default(0),
eight_two_voidless_final_deaths_bedwars: z.number().default(0),
eight_two_voidless_wins_bedwars: z.number().default(0),
eight_two_voidless_losses_bedwars: z.number().default(0),
eight_two_voidless_beds_broken_bedwars: z.number().default(0),
eight_two_voidless_beds_lost_bedwars: z.number().default(0),
four_four_voidless_winstreak: z.number().optional(),
four_four_voidless_kills_bedwars: z.number().default(0),
four_four_voidless_deaths_bedwars: z.number().default(0),
four_four_voidless_final_kills_bedwars: z.number().default(0),
four_four_voidless_final_deaths_bedwars: z.number().default(0),
four_four_voidless_wins_bedwars: z.number().default(0),
four_four_voidless_losses_bedwars: z.number().default(0),
four_four_voidless_beds_broken_bedwars: z.number().default(0),
four_four_voidless_beds_lost_bedwars: z.number().default(0),
eight_two_armed_winstreak: z.number().optional(),
eight_two_armed_kills_bedwars: z.number().default(0),
eight_two_armed_deaths_bedwars: z.number().default(0),
eight_two_armed_final_kills_bedwars: z.number().default(0),
eight_two_armed_final_deaths_bedwars: z.number().default(0),
eight_two_armed_wins_bedwars: z.number().default(0),
eight_two_armed_losses_bedwars: z.number().default(0),
eight_two_armed_beds_broken_bedwars: z.number().default(0),
eight_two_armed_beds_lost_bedwars: z.number().default(0),
four_four_armed_winstreak: z.number().optional(),
four_four_armed_kills_bedwars: z.number().default(0),
four_four_armed_deaths_bedwars: z.number().default(0),
four_four_armed_final_kills_bedwars: z.number().default(0),
four_four_armed_final_deaths_bedwars: z.number().default(0),
four_four_armed_wins_bedwars: z.number().default(0),
four_four_armed_losses_bedwars: z.number().default(0),
four_four_armed_beds_broken_bedwars: z.number().default(0),
four_four_armed_beds_lost_bedwars: z.number().default(0),
four_four_swap_winstreak: z.number().optional(),
four_four_swap_kills_bedwars: z.number().default(0),
four_four_swap_deaths_bedwars: z.number().default(0),
four_four_swap_final_kills_bedwars: z.number().default(0),
four_four_swap_final_deaths_bedwars: z.number().default(0),
four_four_swap_wins_bedwars: z.number().default(0),
four_four_swap_losses_bedwars: z.number().default(0),
four_four_swap_beds_broken_bedwars: z.number().default(0),
four_four_swap_beds_lost_bedwars: z.number().default(0),
four_four_underworld_winstreak: z.number().optional(),
four_four_underworld_kills_bedwars: z.number().default(0),
four_four_underworld_deaths_bedwars: z.number().default(0),
four_four_underworld_final_kills_bedwars: z.number().default(0),
four_four_underworld_final_deaths_bedwars: z.number().default(0),
four_four_underworld_wins_bedwars: z.number().default(0),
four_four_underworld_losses_bedwars: z.number().default(0),
four_four_underworld_beds_broken_bedwars: z.number().default(0),
four_four_underworld_beds_lost_bedwars: z.number().default(0),
castle_winstreak: z.number().optional(),
castle_kills_bedwars: z.number().default(0),
castle_deaths_bedwars: z.number().default(0),
castle_final_kills_bedwars: z.number().default(0),
castle_final_deaths_bedwars: z.number().default(0),
castle_wins_bedwars: z.number().default(0),
castle_losses_bedwars: z.number().default(0),
castle_beds_broken_bedwars: z.number().default(0),
castle_beds_lost_bedwars: z.number().default(0)
})
export const skywarsStatsSchema = z.looseObject({})