aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormat <github@matdoes.dev>2022-03-04 23:05:09 -0600
committermat <github@matdoes.dev>2022-03-04 23:05:09 -0600
commite2506cac822f0b5ddbc285880c768eda9357e075 (patch)
tree0ca4f9dee04a0d51f6d3a939c9543fbf9e6d779c
parent453872fa0587040cf56f5ba72d92042542836afc (diff)
downloadskyblock-stats-e2506cac822f0b5ddbc285880c768eda9357e075.tar.gz
skyblock-stats-e2506cac822f0b5ddbc285880c768eda9357e075.tar.bz2
skyblock-stats-e2506cac822f0b5ddbc285880c768eda9357e075.zip
dynamic packs and bug fixes
-rw-r--r--.gitignore1
-rw-r--r--package.json2
-rw-r--r--src/lib/BackgroundImage.svelte26
-rw-r--r--src/lib/minecraft/Inventory.svelte3
-rw-r--r--src/lib/minecraft/Item.svelte5
-rw-r--r--src/lib/minecraft/inventory.ts25
-rw-r--r--src/lib/sections/Armor.svelte4
-rw-r--r--src/lib/sections/Collections.svelte8
-rw-r--r--src/lib/sections/Inventories.svelte47
-rw-r--r--src/routes/player/[player]/[profile].svelte57
-rw-r--r--src/routes/player/[player]/index.svelte19
-rw-r--r--svelte.config.js2
-rw-r--r--yarn.lock8
13 files changed, 143 insertions, 64 deletions
diff --git a/.gitignore b/.gitignore
index 4b9e838..91361e6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.DS_Store
node_modules
/build
+/dist
/.svelte-kit
/package
.env
diff --git a/package.json b/package.json
index 7c307d8..9d43bae 100644
--- a/package.json
+++ b/package.json
@@ -38,7 +38,7 @@
"@sveltejs/adapter-static": "^1.0.0-next.28",
"@sveltejs/adapter-vercel": "^1.0.0-next.43",
"cookie": "^0.4.1",
- "skyblock-assets": "^2.0.6"
+ "skyblock-assets": "^2.0.7"
},
"packageManager": "yarn@3.1.1"
}
diff --git a/src/lib/BackgroundImage.svelte b/src/lib/BackgroundImage.svelte
new file mode 100644
index 0000000..c059119
--- /dev/null
+++ b/src/lib/BackgroundImage.svelte
@@ -0,0 +1,26 @@
+<script lang="ts">
+ import { browser } from '$app/env'
+
+ import { onDestroy } from 'svelte'
+
+ export let url: string
+
+ // cursed svelte :D
+ $: bodyStyle =
+ '<sty' + 'le id="background-image-style">:root{--background:url(' + url + ')}</st' + 'yle>'
+
+ // get rid of the body style when we leave the page
+ // not doing this will sometimes cause the background to stay
+ onDestroy(() => {
+ bodyStyle = ''
+ // hack since sometimes the style is not removed
+ if (browser) {
+ let styleEl = document.getElementById('background-image-style')
+ if (styleEl) styleEl.remove()
+ }
+ })
+</script>
+
+<svelte:head>
+ {@html bodyStyle}
+</svelte:head>
diff --git a/src/lib/minecraft/Inventory.svelte b/src/lib/minecraft/Inventory.svelte
index 0a6a179..b3c464d 100644
--- a/src/lib/minecraft/Inventory.svelte
+++ b/src/lib/minecraft/Inventory.svelte
@@ -1,11 +1,12 @@
<script lang="ts">
import type { Inventory, Item as APIItem } from '$lib/APITypes'
+ import type { MatcherFile } from 'skyblock-assets'
import Item from './Item.svelte'
export let items: Inventory
export let name = ''
- export let pack = ''
+ export let pack: MatcherFile | undefined = undefined
export let groupLimit = 9
// each item group has 9 items
diff --git a/src/lib/minecraft/Item.svelte b/src/lib/minecraft/Item.svelte
index 13ca8c7..5553840 100644
--- a/src/lib/minecraft/Item.svelte
+++ b/src/lib/minecraft/Item.svelte
@@ -1,11 +1,12 @@
<script lang="ts">
- import MinecraftTooltip from './MinecraftTooltip.svelte'
import { formattingCodeToHtml, removeFormattingCode } from '$lib/utils'
+ import MinecraftTooltip from './MinecraftTooltip.svelte'
+ import type { MatcherFile } from 'skyblock-assets'
import { itemToUrl } from './inventory'
export let item: any | null
export let isslot = true
- export let pack = ''
+ export let pack: MatcherFile | undefined = undefined
let itemLoreHtml: string | null
let itemNameHtml: string | null
diff --git a/src/lib/minecraft/inventory.ts b/src/lib/minecraft/inventory.ts
index 72d72ee..e9d840c 100644
--- a/src/lib/minecraft/inventory.ts
+++ b/src/lib/minecraft/inventory.ts
@@ -1,7 +1,6 @@
import * as skyblockAssets from 'skyblock-assets'
import vanilla from 'skyblock-assets/matchers/vanilla.json'
-import packshq from 'skyblock-assets/matchers/vanilla.json'
-import furfsky_reborn from 'skyblock-assets/matchers/furfsky_reborn.json'
+
export interface Item {
id?: string
@@ -36,7 +35,7 @@ const INVENTORIES = {
export type Inventories = { [name in keyof typeof INVENTORIES]: Item[] }
-export function itemToUrl(item: Item, packName?: string): string {
+export function itemToUrl(item: Item, pack?: skyblockAssets.MatcherFile): string {
const itemNbt: skyblockAssets.NBT = {
display: {
Name: item.display?.name
@@ -46,20 +45,28 @@ export function itemToUrl(item: Item, packName?: string): string {
},
}
let textureUrl: string
- if (item.head_texture)
- textureUrl = `https://mc-heads.net/head/${item.head_texture}`
- else
+ if (item.head_texture) {
+ // if it's a head, try without vanilla and if it fails just use the mc-heads url
+ textureUrl = skyblockAssets.getTextureUrl({
+ id: item.vanillaId,
+ nbt: itemNbt,
+ packs: pack ? [pack] : [],
+ noNullTexture: true
+ })
+ if (textureUrl === null)
+ textureUrl = `https://mc-heads.net/head/${item.head_texture}`
+ } else
textureUrl = skyblockAssets.getTextureUrl({
id: item.vanillaId,
nbt: itemNbt,
- packs: [furfsky_reborn, vanilla]
+ packs: pack ? [pack, vanilla as skyblockAssets.MatcherFile] : [vanilla as skyblockAssets.MatcherFile],
})
return textureUrl
}
-export function skyblockItemToUrl(skyblockItem: string | Item) {
+export function skyblockItemToUrl(skyblockItem: string | Item, pack?: skyblockAssets.MatcherFile) {
const item: Item = typeof skyblockItem === 'string' ? skyblockItemNameToItem(skyblockItem) : skyblockItem
- const itemTextureUrl = itemToUrl(item, 'packshq')
+ const itemTextureUrl = itemToUrl(item, pack)
return itemTextureUrl
}
diff --git a/src/lib/sections/Armor.svelte b/src/lib/sections/Armor.svelte
index 655de31..285a898 100644
--- a/src/lib/sections/Armor.svelte
+++ b/src/lib/sections/Armor.svelte
@@ -1,8 +1,10 @@
<script lang="ts">
import type { CleanMemberProfile } from '$lib/APITypes'
import Inventory from '$lib/minecraft/Inventory.svelte'
+ import type { MatcherFile } from 'skyblock-assets'
+
export let data: CleanMemberProfile
- export let pack
+ export let pack: MatcherFile
</script>
{#if data.member.inventories}
diff --git a/src/lib/sections/Collections.svelte b/src/lib/sections/Collections.svelte
index 9624ec2..7ca1969 100644
--- a/src/lib/sections/Collections.svelte
+++ b/src/lib/sections/Collections.svelte
@@ -1,9 +1,10 @@
<script lang="ts">
+ import furfskyReborn from 'skyblock-assets/matchers/furfsky_reborn.json'
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'
+ import { cleanId } from '$lib/utils'
export let data: CleanMemberProfile
@@ -21,7 +22,10 @@
<h3>{cleanId(categoryName)}</h3>
<ul>
{#each collections as collection}
- <ListItemWithIcon url={skyblockItemToUrl(collection.name)} alt={cleanId(collection.name)}>
+ <ListItemWithIcon
+ url={skyblockItemToUrl(collection.name, furfskyReborn)}
+ alt={cleanId(collection.name)}
+ >
<Tooltip>
<span slot="tooltip">
Amount: {collection.xp.toLocaleString()}
diff --git a/src/lib/sections/Inventories.svelte b/src/lib/sections/Inventories.svelte
index 8be6853..9001430 100644
--- a/src/lib/sections/Inventories.svelte
+++ b/src/lib/sections/Inventories.svelte
@@ -1,11 +1,11 @@
<script lang="ts">
+ import { skyblockItemToUrl, type Item } from '$lib/minecraft/inventory'
import Inventory from '$lib/minecraft/Inventory.svelte'
- import { fade } from 'svelte/transition'
+ import type { MatcherFile } from 'skyblock-assets'
import { cleanId } from '$lib/utils'
- import { skyblockItemToUrl, type Item } from '$lib/minecraft/inventory'
export let data
- export let pack
+ export let pack: MatcherFile
let displayingInventories: string[] = []
for (const inventoryName in data.member.inventories)
@@ -19,11 +19,38 @@
vanillaId: 'nether_star',
display: { name: 'SkyBlock Menu' },
},
- ender_chest: 'ender_chest',
- potion_bag: 'potion',
- fishing_bag: 'fishing_rod',
- quiver: 'arrow',
- wardrobe: 'leather_chestplate',
+ ender_chest: {
+ vanillaId: 'ender_chest',
+ display: { name: '\\u00a7aEnder Chest' },
+ },
+ talisman_bag: {
+ vanillaId: 'skull:3',
+ display: { name: 'Accessory Bag' },
+ head_texture: '961a918c0c49ba8d053e522cb91abc74689367b4d8aa06bfc1ba9154730985ff',
+ },
+ potion_bag: {
+ vanillaId: 'skull:3',
+ display: { name: 'Potion Bag' },
+ head_texture: '9f8b82427b260d0a61e6483fc3b2c35a585851e08a9a9df372548b4168cc817c',
+ },
+ fishing_bag: {
+ vanillaId: 'skull:3',
+ display: { name: 'Fishing Bag' },
+ head_texture: 'eb8e297df6b8dffcf135dba84ec792d420ad8ecb458d144288572a84603b1631',
+ },
+ quiver: {
+ vanillaId: 'skull:3',
+ display: {
+ name: 'Quiver',
+ },
+ head_texture: '4cb3acdc11ca747bf710e59f4c8e9b3d949fdd364c6869831ca878f0763d1787',
+ },
+ wardrobe: {
+ vanillaId: 'leather_chestplate',
+ display: {
+ name: '\\u00a7aWardrobe',
+ },
+ },
}
</script>
@@ -38,7 +65,7 @@
<img
class="inventory-tab-icon"
loading="lazy"
- src={skyblockItemToUrl(inventoryIconMap[inventoryName])}
+ src={skyblockItemToUrl(inventoryIconMap[inventoryName], pack)}
alt={cleanId(inventoryName)}
/>
{/if}
@@ -68,7 +95,7 @@
color: var(--theme-main-text);
border: none;
border-radius: 0;
- /* padding: 0.8em; */
+ padding: 0 0.5em;
cursor: pointer;
transition-duration: 200ms;
height: 2.5em;
diff --git a/src/routes/player/[player]/[profile].svelte b/src/routes/player/[player]/[profile].svelte
index e8b601d..6cb5753 100644
--- a/src/routes/player/[player]/[profile].svelte
+++ b/src/routes/player/[player]/[profile].svelte
@@ -9,7 +9,40 @@
r.json()
)
- const pack = params.pack ?? data?.customization?.pack
+ const packName = params.pack ?? data?.customization?.pack
+
+ let pack: MatcherFile | undefined
+
+ switch (packName) {
+ case 'ectoplasm':
+ pack = (await import('skyblock-assets/matchers/ectoplasm.json')) as any
+ break
+ case 'furfsky':
+ pack = (await import('skyblock-assets/matchers/furfsky.json')) as any
+ break
+ case 'furfsky_reborn':
+ pack = (await import('skyblock-assets/matchers/furfsky_reborn.json')) as any
+ break
+ case 'hypixel+':
+ pack = (await import('skyblock-assets/matchers/hypixel+.json')) as any
+ break
+ case 'packshq':
+ pack = (await import('skyblock-assets/matchers/packshq.json')) as any
+ break
+ case 'rnbw':
+ pack = (await import('skyblock-assets/matchers/rnbw.json')) as any
+ break
+ case 'vanilla':
+ pack = (await import('skyblock-assets/matchers/vanilla.json')) as any
+ break
+ case 'worlds_and_beyond':
+ pack = (await import('skyblock-assets/matchers/worlds_and_beyond.json')) as any
+ break
+ default:
+ // packshq is the default pack
+ pack = (await import('skyblock-assets/matchers/furfsky_reborn.json')) as any
+ break
+ }
return {
props: {
@@ -24,9 +57,11 @@
import Leaderboards from '$lib/sections/Leaderboards.svelte'
import Inventories from '$lib/sections/Inventories.svelte'
import Collections from '$lib/sections/Collections.svelte'
+ import BackgroundImage from '$lib/BackgroundImage.svelte'
import Username from '$lib/minecraft/Username.svelte'
import StatList from '$lib/sections/StatList.svelte'
import Infobox from '$lib/sections/Infobox.svelte'
+ import type { MatcherFile } from 'skyblock-assets'
import Minions from '$lib/sections/Minions.svelte'
import Collapsible from '$lib/Collapsible.svelte'
import Skills from '$lib/sections/Skills.svelte'
@@ -40,10 +75,9 @@
import Toc from '$lib/Toc.svelte'
import type { CleanMemberProfile } from '$lib/APITypes'
- import { onDestroy } from 'svelte'
export let data: CleanMemberProfile
- export let pack: string
+ export let pack: MatcherFile
const categories = [
'deaths',
@@ -57,22 +91,11 @@
'collections',
'leaderboards',
]
-
- // cursed svelte :D
- $: bodyStyle = data.customization?.backgroundUrl
- ? `<style>:root{--background:url(${data.customization.backgroundUrl})}</style>`
- : ''
-
- // get rid of the body style when we leave the page
- // not doing this will sometimes cause the background to stay
- onDestroy(() => {
- bodyStyle = ''
- })
</script>
-<svelte:head>
- {@html bodyStyle}
-</svelte:head>
+{#if data.customization?.backgroundUrl}
+ <BackgroundImage url={data.customization.backgroundUrl} />
+{/if}
<Head
title="{data.member.username}'s SkyBlock profile ({data.member.profileName})"
diff --git a/src/routes/player/[player]/index.svelte b/src/routes/player/[player]/index.svelte
index b20802f..97b7d78 100644
--- a/src/routes/player/[player]/index.svelte
+++ b/src/routes/player/[player]/index.svelte
@@ -28,10 +28,10 @@
<script lang="ts">
import type { CleanProfile, CleanUser } from '$lib/APITypes'
+ import BackgroundImage from '$lib/BackgroundImage.svelte'
import Username from '$lib/minecraft/Username.svelte'
import Header from '$lib/Header.svelte'
import Head from '$lib/Head.svelte'
- import { onDestroy } from 'svelte'
export let data: CleanUser
@@ -53,22 +53,11 @@
isActiveProfileOnline = Date.now() / 1000 - 60 < activeProfileLastSave
}
-
- // cursed svelte :D
- $: bodyStyle = data.customization?.backgroundUrl
- ? `<style>:root{--background:url(${data.customization.backgroundUrl})}</style>`
- : ''
-
- // get rid of the body style when we leave the page
- // not doing this will sometimes cause the background to stay
- onDestroy(() => {
- bodyStyle = ''
- })
</script>
-<svelte:head>
- {@html bodyStyle}
-</svelte:head>
+{#if data.customization?.backgroundUrl}
+ <BackgroundImage url={data.customization.backgroundUrl} />
+{/if}
<Head title={data.player ? `${data.player.username}'s SkyBlock profiles` : 'Invalid player'} />
<Header />
diff --git a/svelte.config.js b/svelte.config.js
index 8d6fe72..52db23e 100644
--- a/svelte.config.js
+++ b/svelte.config.js
@@ -14,7 +14,6 @@ function fetch(url) {
})
res.on('end', () => {
- console.log(data)
resolve(data)
})
})
@@ -52,7 +51,6 @@ function shuffle(a) {
JSON.stringify(donators),
{ encoding: 'utf8' }
)
- console.log('wrote file!')
})()
/** @type {import('@sveltejs/kit').Config} */
diff --git a/yarn.lock b/yarn.lock
index d49f0b9..c89c017 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1573,10 +1573,10 @@ shebang-regex@^3.0.0:
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-skyblock-assets@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/skyblock-assets/-/skyblock-assets-2.0.6.tgz#5c12d1df5594f8e26905204c92fe7be659e47d22"
- integrity sha512-Urtw2iHLu/OnSfsfTGPFMsk7hiagUi47Xu4iplhKRNg1sxHzWS4SHvYumk6Kw8TL9nyMHCwbYj87vEIGrL3J5Q==
+skyblock-assets@^2.0.7:
+ version "2.0.7"
+ resolved "https://registry.yarnpkg.com/skyblock-assets/-/skyblock-assets-2.0.7.tgz#2be95641c611be949a34fb9cd17854ce18e6ade5"
+ integrity sha512-uoJ8oX1Ak7d7ti/7yHAgYg6uMxUdxAIv72tmr1zae/DJVZ9/mrdIsfVK9k3F3uKFQUFtIGPsUr40SSkevGcQ4g==
slash@^3.0.0:
version "3.0.0"