diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/APITypes.d.ts | 16 | ||||
-rw-r--r-- | src/lib/layout/Loader.svelte | 5 | ||||
-rw-r--r-- | src/lib/minecraft/inventory.ts | 5 | ||||
-rw-r--r-- | src/lib/sections/Collections.svelte | 56 | ||||
-rw-r--r-- | src/lib/sections/Minions.svelte | 12 | ||||
-rw-r--r-- | src/lib/sections/Zones.svelte | 38 |
6 files changed, 116 insertions, 16 deletions
diff --git a/src/lib/APITypes.d.ts b/src/lib/APITypes.d.ts index 2f1c9ff..119e5b6 100644 --- a/src/lib/APITypes.d.ts +++ b/src/lib/APITypes.d.ts @@ -122,3 +122,19 @@ export interface CleanFullProfileBasicMembers extends CleanProfile { minion_count: number maxUniqueMinions: number } + +declare const COLLECTIONS: { + readonly farming: readonly ["wheat", "carrot", "potato", "pumpkin", "melon_slice", "wheat_seeds", "red_mushroom", "cocoa_beans", "cactus", "sugar_cane", "feather", "leather", "porkchop", "chicken", "mutton", "rabbit", "nether_wart"] + readonly mining: readonly ["cobblestone", "coal", "iron_ingot", "gold_ingot", "diamond", "lapis_lazuli", "emerald", "redstone", "quartz", "obsidian", "glowstone_dust", "gravel", "ice", "netherrack", "sand", "end_stone", "mithril_ore", "gemstone", "hard_stone"] + readonly combat: readonly ["rotten_flesh", "bone", "string", "spider_eye", "gunpowder", "ender_pearl", "ghast_tear", "slime_ball", "blaze_rod", "magma_cream"] + readonly foraging: readonly ["oak_log", "spruce_log", "birch_log", "jungle_log", "acacia_log", "dark_oak_log"] + readonly fishing: readonly ["cod", "salmon", "tropical_fish", "pufferfish", "prismarine_shard", "prismarine_crystals", "clay_ball", "lily_pad", "ink_sac", "sponge"] + readonly unknown: readonly [] +} +declare type CollectionCategory = keyof typeof COLLECTIONS +export interface Collection { + name: string + xp: number + level: number + category: CollectionCategory +} diff --git a/src/lib/layout/Loader.svelte b/src/lib/layout/Loader.svelte index 8347e16..524d975 100644 --- a/src/lib/layout/Loader.svelte +++ b/src/lib/layout/Loader.svelte @@ -41,9 +41,10 @@ left: 0px; top: 0px; transition: width 1s cubic-bezier(0.4, 0, 0.2, 1), opacity 100ms linear; - height: 8px; + height: 6px; z-index: 20; /* add a faint glow effect */ - background: -moz-linear-gradient(top, #16e 0%, #16e 50%, #16e5 50%, #16e0 100%); + /* background: -moz-linear-gradient(top, #16e 0%, #16e 50%, #16e5 50%, #16e0 100%); */ + background: linear-gradient(to bottom, #16e 0%, #16e 50%, #16e5 50%, #16e0 100%); } </style> diff --git a/src/lib/minecraft/inventory.ts b/src/lib/minecraft/inventory.ts index faaea85..7b35f0e 100644 --- a/src/lib/minecraft/inventory.ts +++ b/src/lib/minecraft/inventory.ts @@ -58,9 +58,10 @@ export function itemToUrl(item: Item, packName?: string): string { return textureUrl } -export async function skyblockItemToUrl(skyblockItemName: string) { +export function skyblockItemToUrl(skyblockItemName: string) { const item = skyblockItemNameToItem(skyblockItemName) - const itemTextureUrl = await itemToUrl(item, 'packshq') + console.log(skyblockItemName, item) + const itemTextureUrl = itemToUrl(item, 'packshq') return itemTextureUrl } diff --git a/src/lib/sections/Collections.svelte b/src/lib/sections/Collections.svelte new file mode 100644 index 0000000..2e03d3f --- /dev/null +++ b/src/lib/sections/Collections.svelte @@ -0,0 +1,56 @@ +<script lang="ts"> + import type { CleanMemberProfile, Collection } from '$lib/APITypes' + import { skyblockItemToUrl } from '$lib/minecraft/inventory' + import ListItemWithIcon from '$lib/ListItemWithIcon.svelte' + import { cleanId } from '$lib/utils' + import Tooltip from '$lib/Tooltip.svelte' + + export let data: CleanMemberProfile + + const categories: Record<string, Collection[]> = {} + if (data.member.collections) + for (const collection of data.member.collections) { + if (!categories[collection.category]) categories[collection.category] = [] + categories[collection.category].push(collection) + } +</script> + +{#if data.member.collections} + {#each Object.keys(categories).sort() as categoryName} + {@const collections = categories[categoryName]} + <h3>{cleanId(categoryName)}</h3> + <ul> + {#each collections as collection} + <ListItemWithIcon url={skyblockItemToUrl(collection.name)}> + <Tooltip> + <span slot="tooltip"> + Amount: {collection.xp.toLocaleString()} + </span> + {cleanId(collection.name)} + <span class="coll-level">{collection.level}</span> + </Tooltip> + </ListItemWithIcon> + {/each} + </ul> + {/each} +{/if} + +<style> + ul { + margin: 0; + display: grid; + grid-template-columns: repeat(2, 1fr); + grid-column-gap: 0; + width: fit-content; + } + + ul > :global(li) { + width: 12em; + height: 1.5em; + text-overflow: ellipsis; + } + + h3 { + margin: 0.5em 0 0.5em 0.5em; + } +</style> diff --git a/src/lib/sections/Minions.svelte b/src/lib/sections/Minions.svelte index 2e4483c..63dda51 100644 --- a/src/lib/sections/Minions.svelte +++ b/src/lib/sections/Minions.svelte @@ -24,18 +24,6 @@ {/each} </table> -<!-- -<p class="darker-text">Unique minions: <span class="main-text"><b>{{ data.profile.minion_count }}</b>/{{ getConstants().max_minions }}</span></p> -<table> -{%- for minion in data.profile.minions -%} - <tr> - <th>{{ minion.name|clean }}</th> - {%- for unlocked in minion.levels -%} - <td class="minions-table-{% if unlocked %}unlocked{% else %}locked{% endif %}">{{ loop.index|romanNumerals }}</td> - {%- endfor -%} - </tr> -{%- endfor -%} -</table> --> <style> .unique-minions-text { color: var(--theme-darker-text); diff --git a/src/lib/sections/Zones.svelte b/src/lib/sections/Zones.svelte new file mode 100644 index 0000000..428ab79 --- /dev/null +++ b/src/lib/sections/Zones.svelte @@ -0,0 +1,38 @@ +<script lang="ts"> + import type { CleanMemberProfile } from '$lib/APITypes' + import { cleanId, toRomanNumerals } from '$lib/utils' + + export let data: CleanMemberProfile + + let zonesVisitedCount = data.member.visited_zones + ? data.member.visited_zones?.filter(z => z.visited).length + : 0 +</script> + +{#if data.member.visited_zones} + <p class="zones-visited-text"> + <span class="zones-visited-number"> + <b>{zonesVisitedCount}</b>/{data.member.visited_zones.length} zones visited + </span> + </p> + <ul> + {#each data.member.visited_zones.filter(z => z.visited) as zone} + <li>{cleanId(zone.name)}</li> + {/each} + {#each data.member.visited_zones.filter(z => !z.visited) as zone} + <li class="unvisited-zone">{cleanId(zone.name)}</li> + {/each} + </ul> +{/if} + +<style> + .zones-visited-text { + color: var(--theme-darker-text); + } + .zones-visited-number { + color: var(--theme-main-text); + } + .unvisited-zone { + opacity: 0.5; + } +</style> |