diff --git a/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx b/src/app/(stats)/player/[ign]/_stats/skywars/components.tsx
index ea03e2a..ccde119 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 { getSkywarsLevel } from "@/lib/hypixel/skywars/level"
-import { getPrestigeName, getSkyWarsIcon, getTextColor } from "@/lib/hypixel/skywars/skywars"
+import { getPrestige, getSkyWarsIcon } from "@/lib/hypixel/skywars/skywars"
import { cn } from "@/lib/utils"
import GenericProgress from "../../_components/GenericProgress"
import { HeadsBar, PresigeousHeads } from "./client"
@@ -95,14 +95,14 @@ export function ShardProgress({ percent, shards }: { percent: number, shards: nu
export function SkywarsLevel({ xp, icon }: { xp: number, icon: string | undefined }) {
const level = getSkywarsLevel(xp)
- const colors = getTextColor(Math.floor(level))
+ const pres = getPrestige(Math.floor(level))
const swIcon = getSkyWarsIcon(icon)
const val = `${Math.floor(level)}${swIcon}`
- if (level > 150) {
+ if (pres.name.startsWith("Mythic")) {
return (
-
- [
+
150 && "font-bold")}>
+ [
{`${val}`}
- ]
+ ]
)
}
- if (level === 50) {
-
- [
-
- {`${val}`}
-
- ]
-
+ function MapSkywarsPrestigeColors() {
+ if (typeof pres.colormap_2 === "string") {
+ return {val}
+ }
+
+ return (
+ <>
+ {val.split("").map((c, i) => {
+ if (level.toString().length === 2) {
+ return {c}
+ } else {
+ return {c}
+ }
+ })}
+ >
+ )
}
return (
- [
- {val}
- ]
+ [
+
+ ]
)
}
@@ -158,7 +160,8 @@ export function SkywarsProgress({ level, percent, currentXp, ceilingXp }: { leve
}
function LevelNumber({ level, className }: { level: number, className?: string }) {
- if (level > 150 || level === 50) {
+ const pres = getPrestige(level)
+ if (pres.name.startsWith("Mythic")) {
return (
150 ? "font-bold" : undefined, className)}
@@ -173,23 +176,31 @@ function LevelNumber({ level, className }: { level: number, className?: string }
)
}
- return
{level}
+ return
{level}
}
function Progress({ level, percent, tooltipId, tooltipContent }: { level: number, percent: number, tooltipId: string, tooltipContent: string }) {
- if (level > 150 || level === 50) {
+ const pres = getPrestige(level)
+ if (pres.name.startsWith("Mythic")) {
return
}
- return
+ return (
+
+ )
}
export function SkywarsPrestige({ level, icon }: { level: number, icon?: string }) {
const swIcon = getSkyWarsIcon(icon)
- const pres = getPrestigeName(level)
- const val = `${pres} ${swIcon}`
+ const pres = getPrestige(level)
+ const val = `${pres.name} ${swIcon}`
- if (level > 150 || level === 50) {
+ if (pres.name.startsWith("Mythic")) {
return (
+
{val}
)
diff --git a/src/data/hypixel/skywars.ts b/src/data/hypixel/skywars.ts
index 39a66b4..d3facd3 100644
--- a/src/data/hypixel/skywars.ts
+++ b/src/data/hypixel/skywars.ts
@@ -2,37 +2,204 @@ export const INITIAL_XP = [0, 20, 70, 150, 250, 500, 1000, 2000, 3500, 6000, 100
export const RECURRING_XP = 10000 as const
export const PRESTIGES = [
- { level: 0, color: "gray", b_color: "gray", name: "None" },
- { level: 5, color: "white", b_color: "white", name: "Iron" },
- { level: 10, color: "gold", b_color: "gold", name: "Gold" },
- { level: 15, color: "aqua", b_color: "aqua", name: "Diamond" },
- { level: 20, color: "dark-green", b_color: "dark-green", name: "Emerald" },
- { level: 25, color: "dark-aqua", b_color: "dark-aqua", name: "Sapphire" },
- { level: 30, color: "dark-red", b_color: "dark-red", name: "Ruby" },
- { level: 35, color: "light-purple", b_color: "light-purple", name: "Crystal" },
- { level: 40, color: "blue", b_color: "blue", name: "Opal" },
- { level: 45, color: "purple", b_color: "purple", name: "Amethyst" },
- { level: 50, color: "rainbow", b_color: "red", name: "Rainbow" },
- { level: 55, color: "white", b_color: "gray", name: "First Class" },
- { level: 60, color: "red", b_color: "dark-red", name: "Assassin" },
- { level: 65, color: "white", b_color: "red", name: "Veteran" },
- { level: 70, color: "gold", b_color: "yellow", name: "God Like" },
- { level: 75, color: "blue", b_color: "white", name: "Warrior" },
- { level: 80, color: "aqua", b_color: "white", name: "Captain" },
- { level: 85, color: "dark-aqua", b_color: "white", name: "Soldier" },
- { level: 90, color: "dark-aqua", b_color: "green", name: "Infantry" },
- { level: 95, color: "yellow", b_color: "red", name: "Sergeant" },
- { level: 100, color: "dark-blue", b_color: "blue", name: "Lieutenant" },
- { level: 105, color: "dark-red", b_color: "gold", name: "Admiral" },
- { level: 110, color: "aqua", b_color: "dark-blue", name: "General" },
- { level: 115, color: "gray", b_color: "dark-gray", name: "Villain" },
- { level: 120, color: "purple", b_color: "light-purple", name: "Skilled" },
- { level: 125, color: "yellow", b_color: "white", name: "Sneaky" },
- { level: 130, color: "yellow", b_color: "red", name: "Overlord" },
- { level: 135, color: "red", b_color: "gold", name: "War Chief" },
- { level: 140, color: "red", b_color: "green", name: "Warlock" },
- { level: 145, color: "aqua", b_color: "green", name: "Emperor" },
- { level: 150, color: "rainbow", b_color: "red", name: "Mythic" }
+ { name: "Stone", level: 0, leftBracket: "gray", rightBracket: "gray", colormap_2: "gray", colormap_3: "gray" },
+ { name: "Iron", level: 10, leftBracket: "white", rightBracket: "white", colormap_2: "white", colormap_3: "white" },
+ { name: "Gold", level: 20, leftBracket: "gold", rightBracket: "gold", colormap_2: "gold", colormap_3: "gold" },
+ { name: "Diamond", level: 30, leftBracket: "aqua", rightBracket: "aqua", colormap_2: "aqua", colormap_3: "aqua" },
+ { name: "Ruby", level: 40, leftBracket: "red", rightBracket: "red", colormap_2: "red", colormap_3: "red" },
+ { name: "Crystal", level: 50, leftBracket: "light-purple", rightBracket: "light-purple", colormap_2: "light-purple", colormap_3: "light-purple" },
+ { name: "Amethyst", level: 60, leftBracket: "dark-purple", rightBracket: "dark-purple", colormap_2: "dark-purple", colormap_3: "dark-purple" },
+ { name: "Opal", level: 70, leftBracket: "blue", rightBracket: "blue", colormap_2: "blue", colormap_3: "blue" },
+ { name: "Topaz", level: 80, leftBracket: "yellow", rightBracket: "yellow", colormap_2: "yellow", colormap_3: "yellow" },
+ { name: "Jade", level: 90, leftBracket: "green", rightBracket: "green", colormap_2: "green", colormap_3: "green" },
+ {
+ name: "Mythic I",
+ level: 100,
+ leftBracket: "red",
+ rightBracket: "light-purple",
+ colormap_2: ["yellow", "green", "aqua"],
+ colormap_3: ["gold", "yellow", "green", "aqua"]
+ },
+ { name: "Bloody", level: 110, leftBracket: "dark-red", rightBracket: "dark-red", colormap_2: "red", colormap_3: "red" },
+ { name: "Cobalt", level: 120, leftBracket: "dark-blue", rightBracket: "dark-blue", colormap_2: "dark-blue", colormap_3: "dark-blue" },
+ { name: "Content", level: 130, leftBracket: "red", rightBracket: "red", colormap_2: "white", colormap_3: "white" },
+ { name: "Crimson", level: 140, leftBracket: "dark-red", rightBracket: "dark-red", colormap_2: "dark-red", colormap_3: "dark-red" },
+ { name: "Firefly", level: 150, leftBracket: "gold", rightBracket: "gold", colormap_2: "yellow", colormap_3: "yellow" },
+ { name: "Emerald", level: 160, leftBracket: "dark-green", rightBracket: "dark-green", colormap_2: "dark-green", colormap_3: "dark-green" },
+ { name: "Abyss", level: 170, leftBracket: "dark-blue", rightBracket: "dark-blue", colormap_2: "blue", colormap_3: "blue" },
+ { name: "Sapphire", level: 180, leftBracket: "dark-aqua", rightBracket: "dark-aqua", colormap_2: "dark-aqua", colormap_3: "dark-aqua" },
+ { name: "Emergency", level: 190, leftBracket: "dark-red", rightBracket: "dark-red", colormap_2: "yellow", colormap_3: "yellow" },
+ {
+ name: "Mythic II",
+ level: 200,
+ leftBracket: "gold",
+ rightBracket: "red",
+ colormap_2: ["green", "aqua", "light-purple"],
+ colormap_3: ["yellow", "green", "light-purple", "aqua"]
+ },
+ { name: "Mulberry", level: 210, leftBracket: "dark-purple", rightBracket: "dark-purple", colormap_2: "light-purple", colormap_3: "light-purple" },
+ { name: "Slate", level: 220, leftBracket: "dark-gray", rightBracket: "dark-gray", colormap_2: "dark-gray", colormap_3: "dark-gray" },
+ { name: "Blood God", level: 230, leftBracket: "light-purple", rightBracket: "light-purple", colormap_2: "aqua", colormap_3: "aqua" },
+ { name: "Midnight", level: 240, leftBracket: "black", rightBracket: "black", colormap_2: "black", colormap_3: "black" },
+ {
+ name: "Sun",
+ level: 250,
+ leftBracket: "red",
+ rightBracket: "red",
+ colormap_2: ["yellow", "yellow", "gold"],
+ colormap_3: ["gold", "yellow", "yellow", "gold"]
+ },
+ {
+ name: "Bulb",
+ level: 260,
+ leftBracket: "black",
+ rightBracket: "black",
+ colormap_2: ["gold", "gold", "yellow"],
+ colormap_3: ["yellow", "gold", "gold", "yellow"]
+ },
+ { name: "Twilight", level: 270, leftBracket: "dark-blue", rightBracket: "dark-blue", colormap_2: "dark-aqua", colormap_3: "dark-aqua" },
+ {
+ name: "Natural",
+ level: 280,
+ leftBracket: "green",
+ rightBracket: "dark-green",
+ colormap_2: ["green", "yellow", "green"],
+ colormap_3: ["dark-green", "green", "yellow", "green"]
+ },
+ { name: "Icicle", level: 290, leftBracket: "blue", rightBracket: "blue", colormap_2: "aqua", colormap_3: "aqua" },
+ {
+ name: "Mythic III",
+ level: 300,
+ leftBracket: "yellow",
+ rightBracket: "gold",
+ colormap_2: ["aqua", "light-purple", "red"],
+ colormap_3: ["green", "aqua", "light-purple", "red"]
+ },
+ { name: "Graphite", level: 310, leftBracket: "dark-gray", rightBracket: "dark-gray", colormap_2: "gray", colormap_3: "gray" },
+ { name: "Punk", level: 320, leftBracket: "light-purple", rightBracket: "light-purple", colormap_2: "green", colormap_3: "green" },
+ { name: "Meltdown", level: 330, leftBracket: "yellow", rightBracket: "yellow", colormap_2: "red", colormap_3: "red" },
+ {
+ name: "Iridescent",
+ level: 340,
+ leftBracket: "aqua",
+ rightBracket: "green",
+ colormap_2: ["aqua", "light-purple", "green"],
+ colormap_3: ["green", "aqua", "light-purple", "green"]
+ },
+ {
+ name: "Marigold",
+ level: 350,
+ leftBracket: "white",
+ rightBracket: "gold",
+ colormap_2: ["yellow", "yellow", "gold"],
+ colormap_3: ["white", "yellow", "yellow", "gold"]
+ },
+ {
+ name: "Beach",
+ level: 360,
+ leftBracket: "blue",
+ rightBracket: "yellow",
+ colormap_2: ["aqua", "white", "yellow"],
+ colormap_3: ["dark-aqua", "aqua", "white", "yellow"]
+ },
+ {
+ name: "Spark",
+ level: 370,
+ leftBracket: "yellow",
+ rightBracket: "dark-gray",
+ colormap_2: ["white", "white", "dark-gray"],
+ colormap_3: ["yellow", "white", "white", "dark-gray"]
+ },
+ {
+ name: "Target",
+ level: 380,
+ leftBracket: "red",
+ rightBracket: "red",
+ colormap_2: ["red", "red", "white"],
+ colormap_3: ["white", "red", "red", "white"]
+ },
+ { name: "Limelight", level: 390, leftBracket: "dark-green", rightBracket: "dark-green", colormap_2: "green", colormap_3: "green" },
+ {
+ name: "Mythic IV",
+ level: 400,
+ leftBracket: "green",
+ rightBracket: "yellow",
+ colormap_2: ["light-purple", "red", "gold"],
+ colormap_3: ["aqua", "light-purple", "red", "gold"]
+ },
+ { name: "Cerulean", level: 410, leftBracket: "dark-aqua", rightBracket: "dark-aqua", colormap_2: "aqua", colormap_3: "aqua" },
+ {
+ name: "Magical",
+ level: 420,
+ leftBracket: "black",
+ rightBracket: "black",
+ colormap_2: ["dark-gray", "dark-gray", "dark-purple"],
+ colormap_3: ["dark-purple", "dark-gray", "dark-gray", "dark-purple"]
+ },
+ {
+ name: "Luminous",
+ level: 430,
+ leftBracket: "gold",
+ rightBracket: "dark-aqua",
+ colormap_2: ["white", "white", "aqua"],
+ colormap_3: ["gold", "white", "white", "aqua"]
+ },
+ {
+ name: "Synthesis",
+ level: 440,
+ leftBracket: "green",
+ rightBracket: "white",
+ colormap_2: ["green", "yellow", "white"],
+ colormap_3: ["dark-green", "green", "yellow", "white"]
+ },
+ {
+ name: "Burn",
+ level: 450,
+ leftBracket: "dark-red",
+ rightBracket: "white",
+ colormap_2: ["red", "gold", "yellow"],
+ colormap_3: ["dark-red", "red", "gold", "yellow"]
+ },
+ {
+ name: "Dramatic",
+ level: 460,
+ leftBracket: "blue",
+ rightBracket: "dark-red",
+ colormap_2: ["dark-aqua", "light-purple", "dark-purple"],
+ colormap_3: ["aqua", "dark-aqua", "light-purple", "dark-purple"]
+ },
+ {
+ name: "Radiant",
+ level: 470,
+ leftBracket: "black",
+ rightBracket: "dark-gray",
+ colormap_2: ["gray", "white", "gray"],
+ colormap_3: ["dark-gray", "gray", "white", "gray"]
+ },
+ {
+ name: "Tidal",
+ level: 480,
+ leftBracket: "dark-blue",
+ rightBracket: "white",
+ colormap_2: ["blue", "dark-aqua", "aqua"],
+ colormap_3: ["dark-blue", "blue", "dark-aqua", "aqua"]
+ },
+ {
+ name: "Firework",
+ level: 490,
+ leftBracket: "blue",
+ rightBracket: "dark-red",
+ colormap_2: ["white", "white", "red"],
+ colormap_3: ["aqua", "white", "white", "red"]
+ },
+ {
+ name: "Mythic V",
+ level: 500,
+ leftBracket: "aqua",
+ rightBracket: "green",
+ colormap_2: ["red", "gold", "yellow"],
+ colormap_3: ["light-purple", "red", "gold", "yellow"]
+ }
] as const
export const ICONS = {
@@ -106,3 +273,4 @@ export const HEADS = [
{ id: "divine", name: "Divine", color: "gold" },
{ id: "heavenly", name: "Heavenly", color: "dark-purple" }
] as const
+
diff --git a/src/lib/hypixel/skywars/skywars.ts b/src/lib/hypixel/skywars/skywars.ts
index 12a7c18..6390d25 100644
--- a/src/lib/hypixel/skywars/skywars.ts
+++ b/src/lib/hypixel/skywars/skywars.ts
@@ -32,22 +32,14 @@ export function concatSkywarsStats(...stats: SkywarsModeStats[]) {
]
}
-export function getTextColor(level: number) {
- const floored = floorLevel(level, 5)
+export function getPrestige(level: number) {
+ const floored = floorLevel(level, 10)
- if (level > 150) {
- return {
- text: PRESTIGES.at(-1)?.color ?? "gray",
- brackets: PRESTIGES.at(-1)?.b_color ?? "gray"
- }
+ if (level > PRESTIGES.at(-1)!.level) {
+ PRESTIGES.at(-1)!
}
- const pres = PRESTIGES.find(p => p.level === floored)
-
- return {
- text: pres?.color ?? "gray",
- brackets: pres?.b_color ?? "gray"
- }
+ return PRESTIGES.find(p => p.level === floored)!
}
export function getSkyWarsIcon(icon?: string) {
@@ -60,14 +52,6 @@ export function getSkyWarsIcon(icon?: string) {
return icons[icon] ?? ICONS.default
}
-export function getPrestigeName(level: number) {
- const floored = floorLevel(level, 5)
-
- if (level > 150) return PRESTIGES.at(-1)!.name
-
- return PRESTIGES.find(p => p.level === floored)!.name
-}
-
export type _SkywarsStats = Record
type Mode =
| "normal"
diff --git a/đ b/đ
new file mode 100644
index 0000000..01cde9d
--- /dev/null
+++ b/đ
@@ -0,0 +1,236 @@
+import { formatNumber } from "@/lib/formatters"
+import { getSkywarsLevel } from "@/lib/hypixel/skywars/level"
+import { getPrestige, getSkyWarsIcon } from "@/lib/hypixel/skywars/skywars"
+import { cn } from "@/lib/utils"
+import GenericProgress from "../../_components/GenericProgress"
+import { HeadsBar, PresigeousHeads } from "./client"
+
+type SkywarsHeadsProps = {
+ heads: number
+ heads_special: {
+ eww: number
+ yucky: number
+ meh: number
+ decent: number
+ salty: number
+ tasty: number
+ succulent: number
+ sweet: number
+ divine: number
+ heavenly: number
+ }
+ prestigeous: { username: string, timestamp: number, sacrifice: string }[]
+}
+
+export function SkywarsHeads({
+ heads,
+ heads_special,
+ prestigeous
+}: SkywarsHeadsProps) {
+ const total_special = Object.values(heads_special).reduce((a, b) => a + b)
+ const percentages = {
+ heavenly: heads_special.heavenly,
+ divine: heads_special.divine,
+ sweet: heads_special.sweet,
+ succulent: heads_special.succulent,
+ tasty: heads_special.tasty,
+ salty: heads_special.salty,
+ decent: heads_special.decent,
+ meh: heads_special.meh,
+ yucky: heads_special.yucky,
+ eww: heads_special.eww,
+ rest: (heads - total_special)
+ }
+
+ const headsArray = Object.entries(percentages)
+
+ return (
+
+
+ {"Total Heads Gathered: "}
+ {formatNumber(heads)}
+
+ {total_special > 0 ?
:
This person has no heads collected.
}
+
Prestigious Head Collection
+ {prestigeous.length > 0 ?
:
No prestigeous heads. Now what a skill issue.
}
+
+ )
+}
+
+export function AngelOfDeath(
+ { shards, lifetime_shards, opals, lifetime_opals }: { shards: number, lifetime_shards: number, opals: number, lifetime_opals: number }
+) {
+ return (
+
+
+ {"Shards: "}
+ {shards}
+
+
+ {"Opals: "}
+ {opals}
+
+
+ {"Lifetime Shards: "}
+ {formatNumber(lifetime_shards)}
+
+
+ {"Lifetime Opals: "}
+ {lifetime_opals}
+
+
+ )
+}
+
+export function ShardProgress({ percent, shards }: { percent: number, shards: number }) {
+ return (
+
+ )
+}
+
+export function SkywarsLevel({ xp, icon }: { xp: number, icon: string | undefined }) {
+ const level = getSkywarsLevel(xp)
+ const pres = getPrestige(Math.floor(level))
+ const swIcon = getSkyWarsIcon(icon)
+ const val = `${Math.floor(level)}${swIcon}`
+
+ // if (level > 150) {
+ // return (
+ //
+ // [
+ //
+ // {`${val}`}
+ //
+ // ]
+ //
+ // )
+ // }
+ //
+ // if (level === 50) {
+ //
+ // [
+ //
+ // {`${val}`}
+ //
+ // ]
+ //
+ // }
+
+ function MapSkywarsPrestigeColors() {
+ if (typeof pres.colormap_2 === "string") {
+ return {val}
+ }
+
+ return (
+ <>
+ {val.split("").map((c, i) => {
+ if (level.toString().length === 2) {
+ return {c}
+ } else {
+ }
+ })}
+ >
+ )
+ }
+
+ return (
+
+ [
+
+ ]
+
+ )
+}
+
+export function SkywarsProgress({ level, percent, currentXp, ceilingXp }: { level: number, percent: number, currentXp: number, ceilingXp: number }) {
+ return (
+
+ )
+}
+
+function LevelNumber({ level, className }: { level: number, className?: string }) {
+ if (level > 150 || level === 50) {
+ return (
+ 150 ? "font-bold" : undefined, className)}
+ style={{
+ backgroundImage: "linear-gradient(to left,#a0a,#f5f,#5ff,#5f5,#ff5,#fa0,#f55)",
+ WebkitBackgroundClip: "text",
+ color: "transparent"
+ }}
+ >
+ {level}
+
+ )
+ }
+
+ return {level}
+}
+
+function Progress({ level, percent, tooltipId, tooltipContent }: { level: number, percent: number, tooltipId: string, tooltipContent: string }) {
+ if (level > 150 || level === 50) {
+ return
+ }
+
+ return (
+
+ )
+}
+
+export function SkywarsPrestige({ level, icon }: { level: number, icon?: string }) {
+ const swIcon = getSkyWarsIcon(icon)
+ const pres = getPrestige(level)
+ const val = `${pres} ${swIcon}`
+
+ // if (level > 150 || level === 50) {
+ // return (
+ // 150 ? "font-bold" : undefined}
+ // >
+ // {val}
+ //
+ // )
+ // }
+
+ return (
+
+ {val}
+
+ )
+}