From 312500edd00c44c0d28c78042ffb08de33ba3c90 Mon Sep 17 00:00:00 2001 From: mat Date: Sat, 9 Apr 2022 15:08:37 -0500 Subject: Add coop section --- src/lib/APITypes.d.ts | 7 ++- src/lib/minecraft/Username.svelte | 21 +++----- src/lib/profile.ts | 9 +++- src/lib/sections/Coop.svelte | 83 +++++++++++++++++++++++++++++ src/lib/sections/Infobox.svelte | 16 ++---- src/routes/player/[player]/[profile].svelte | 18 +++++-- src/routes/player/[player]/index.svelte | 14 ++--- 7 files changed, 128 insertions(+), 40 deletions(-) create mode 100644 src/lib/sections/Coop.svelte (limited to 'src') diff --git a/src/lib/APITypes.d.ts b/src/lib/APITypes.d.ts index 2547669..bb0cd25 100644 --- a/src/lib/APITypes.d.ts +++ b/src/lib/APITypes.d.ts @@ -13,9 +13,7 @@ export interface CleanMemberProfilePlayer extends CleanPlayer { lastSave: number | null purse: number stats: StatItem[] - rawHypixelStats: { - [key: string]: number - } + rawHypixelStats: { [key: string]: number } minions: CleanMinion[] fairySouls: FairySouls inventories?: Inventories @@ -28,6 +26,7 @@ export interface CleanMemberProfilePlayer extends CleanPlayer { harp: HarpData coopInvitation: CoopInvitation | null farmingContests: FarmingContests + left: boolean } export interface CleanMember extends CleanBasicMember { @@ -343,7 +342,7 @@ export interface FarmingContests { export interface CoopInvitation { invitedTimestamp: number - invitedByUuid: string + invitedBy: CleanPlayer | null accepted: boolean acceptedTimestamp: number | null } diff --git a/src/lib/minecraft/Username.svelte b/src/lib/minecraft/Username.svelte index df9e093..6d45857 100644 --- a/src/lib/minecraft/Username.svelte +++ b/src/lib/minecraft/Username.svelte @@ -1,29 +1,24 @@ - - - + {#if headType == '3d'} {:else if headType == '2d'} diff --git a/src/lib/profile.ts b/src/lib/profile.ts index cba7923..ceeac77 100644 --- a/src/lib/profile.ts +++ b/src/lib/profile.ts @@ -14,9 +14,14 @@ export function prettyTimestamp(ms: number) { export function generateInfobox(data: CleanMemberProfile): string[] { const result: string[] = [] - result.push(`💾 Last save: ${prettyTimestamp(data.member.lastSave)}`) + if (data.member.left) + result.push(`🚪 Removed from profile`) - result.push(`🚶 Profile created: ${prettyTimestamp(data.member.firstJoin)}`) + if (data.member.lastSave) + result.push(`💾 Last save: ${prettyTimestamp(data.member.lastSave)}`) + + if (data.member.firstJoin) + result.push(`🚶 Profile created: ${prettyTimestamp(data.member.firstJoin)}`) result.push(`✨ Fairy souls: ${data.member.fairySouls.total}/${data.member.fairySouls.max}`) diff --git a/src/lib/sections/Coop.svelte b/src/lib/sections/Coop.svelte new file mode 100644 index 0000000..867d878 --- /dev/null +++ b/src/lib/sections/Coop.svelte @@ -0,0 +1,83 @@ + + +{#if data.member.coopInvitation} +
+ {#if isProfileCreator} +

Created co-op

+ {:else} +

+ Invited by {#if data.member.coopInvitation.invitedBy} + + {:else} + Unknown player + {/if} +

+ {/if} +

+ {isProfileCreator ? 'Began creation' : 'Invited'}: + + {millisecondsToTime(Date.now() - data.member.coopInvitation.invitedTimestamp)} ago + +

+ {#if data.member.coopInvitation.acceptedTimestamp} +

+ {isProfileCreator ? 'Finished creation' : 'Accepted invite'}: + + after + {millisecondsToTime( + data.member.coopInvitation.acceptedTimestamp - + data.member.coopInvitation.invitedTimestamp + )} + + +

+ {/if} +
+

Members

+ {#each data.profile.members.filter(m => !m.left) as player} + + + + {/each} + {#if data.profile.members.filter(m => m.left).length > 0} +

Previous members

+ {#each data.profile.members.filter(m => m.left) as player} + + + + {/each} + {/if} +{/if} + + diff --git a/src/lib/sections/Infobox.svelte b/src/lib/sections/Infobox.svelte index f454654..c524ca1 100644 --- a/src/lib/sections/Infobox.svelte +++ b/src/lib/sections/Infobox.svelte @@ -2,23 +2,17 @@ import { generateInfobox } from '$lib/profile' import Username from '$lib/minecraft/Username.svelte' import Emoji from '$lib/Emoji.svelte' - import { onMount } from 'svelte' export let data - - // onMount(() => { - // // reload the data every second so the infobox updates - // const interval = setInterval(() => { - // data = data - // }, 1000) - - // return () => clearInterval(interval) - // })
-

({data.member.profileName})

+

+ ({data.member.left + ? 'Removed' + : data.member.profileName}) +

{#each generateInfobox(data) as item}

{/each} diff --git a/src/routes/player/[player]/[profile].svelte b/src/routes/player/[player]/[profile].svelte index c55732c..1fee37c 100644 --- a/src/routes/player/[player]/[profile].svelte +++ b/src/routes/player/[player]/[profile].svelte @@ -52,6 +52,7 @@ import Claimed from '$lib/sections/Claimed.svelte' import Pets from '$lib/sections/Pets.svelte' import FarmingContests from '$lib/sections/FarmingContests.svelte' + import Coop from '$lib/sections/Coop.svelte' export let data: CleanMemberProfile export let pack: MatcherFile @@ -75,6 +76,7 @@ if (data.member.claimed && data.member.claimed.length > 0) categories.push('claimed') if (data.member.pets.list.length > 0) categories.push('pets') if (data.member.farmingContests.list.length > 0) categories.push('farming_contests') + if (data.member.coopInvitation) categories.push('co-op') categories.push('leaderboards') } @@ -82,6 +84,8 @@ $: backgroundUrl = data.customization?.backgroundUrl ?? chooseDefaultBackground(data.member.uuid) $: showingInventories = data.member.inventories?.inventory || data.member.inventories?.personal_vault + + $: profileName = data.member.left ? 'Removed' : data.member.profileName {#if backgroundUrl} @@ -89,10 +93,10 @@ {/if}
{/if} - ({data.member.profileName}) + ({profileName}) @@ -238,6 +242,14 @@ {/if} + {#if categories.includes('co-op')} +
+ +

Co-op

+ +
+
+ {/if}

Leaderboards

diff --git a/src/routes/player/[player]/index.svelte b/src/routes/player/[player]/index.svelte index eda1998..ad02380 100644 --- a/src/routes/player/[player]/index.svelte +++ b/src/routes/player/[player]/index.svelte @@ -30,14 +30,14 @@ @@ -76,7 +74,9 @@
-

's profiles

+

+ 's profiles +

    {#each data.profiles ?? [] as profile} @@ -109,7 +109,7 @@ -- cgit