diff options
author | mat <github@matdoes.dev> | 2022-02-20 02:16:09 -0600 |
---|---|---|
committer | mat <github@matdoes.dev> | 2022-02-20 02:16:09 -0600 |
commit | 582409e7cb1598b65bee6d1023b77620bb3791af (patch) | |
tree | 522b3cb23451c01d097386014e9b2632aab5bfbe /src/lib/minecraft | |
parent | 2c09443ba23b8bfbac2eb667a036e7a7fa97b3fe (diff) | |
download | skyblock-stats-582409e7cb1598b65bee6d1023b77620bb3791af.tar.gz skyblock-stats-582409e7cb1598b65bee6d1023b77620bb3791af.tar.bz2 skyblock-stats-582409e7cb1598b65bee6d1023b77620bb3791af.zip |
add inventories
Diffstat (limited to 'src/lib/minecraft')
-rw-r--r-- | src/lib/minecraft/Inventory.svelte | 22 | ||||
-rw-r--r-- | src/lib/minecraft/Item.svelte | 21 | ||||
-rw-r--r-- | src/lib/minecraft/inventory.ts | 54 |
3 files changed, 28 insertions, 69 deletions
diff --git a/src/lib/minecraft/Inventory.svelte b/src/lib/minecraft/Inventory.svelte index 3d3b9c0..d29b1e0 100644 --- a/src/lib/minecraft/Inventory.svelte +++ b/src/lib/minecraft/Inventory.svelte @@ -4,6 +4,7 @@ export let items export let name = '' export let pack = '' + export let groupLimit = 9 if (name === 'inventory') // in the inventory, the first 9 items are the hotbar and should be at the end @@ -13,14 +14,14 @@ let itemGroups = [] $: { itemGroups = [] - for (let i = 0; i < items.length; i += 9) { - itemGroups.push(items.slice(i, i + 9)) + for (let i = 0; i < items.length; i += groupLimit) { + itemGroups.push(items.slice(i, i + groupLimit)) } } </script> <div class:inventory-container-{name}={name !== ''}> - {#each itemGroups as itemGroup, groupIndex} + {#each itemGroups as itemGroup} <div> {#each itemGroup as item} <Item {item} {pack} isslot /> @@ -28,18 +29,3 @@ </div> {/each} </div> - -<!-- {%- macro inventory(items, name='', pack='') -%} - <div{% if name %} class="inventory-container-{{ name }}"{% endif %}> - {%- if name == 'inventory' -%} - {%- set items = items|slice(9)|append(items|slice(0, 9)) -%} - {%- endif -%} - - {%- for itemData in items -%} - {%- if loop.index0 > 0 and loop.index0 % 9 == 0 %}</div>{%- endif -%} - {%- if loop.index0 % 9 == 0 %}<div>{%- endif -%} - {{- item(itemData, slot=true, pack=pack) -}} - {%- endfor -%} - </div> - </div> -{%- endmacro -%} --> diff --git a/src/lib/minecraft/Item.svelte b/src/lib/minecraft/Item.svelte index 8ddc4a8..c944f1b 100644 --- a/src/lib/minecraft/Item.svelte +++ b/src/lib/minecraft/Item.svelte @@ -1,22 +1,26 @@ <script lang="ts"> import MinecraftTooltip from './MinecraftTooltip.svelte' import { formattingCodeToHtml, removeFormattingCode } from '$lib/utils' - import { itemToUrlCached } from './inventory' + import { itemToUrl } from './inventory' export let item: any | null export let isslot = true export let pack = '' - $: itemLoreHtml = item.display.lore.map(l => formattingCodeToHtml(l)).join('<br>') - $: itemNameHtml = formattingCodeToHtml(item.display.name) + let itemLoreHtml: string | null + let itemNameHtml: string | null + let imageUrl: string | null - $: imageUrl = itemToUrlCached(item, pack) + $: itemLoreHtml = item ? item.display.lore.map(l => formattingCodeToHtml(l)).join('<br>') : null + $: itemNameHtml = item ? formattingCodeToHtml(item.display.name) : null + + $: imageUrl = item ? itemToUrl(item, pack) : null </script> <MinecraftTooltip> <span slot="name">{@html itemNameHtml}</span> <span slot="lore">{@html itemLoreHtml}</span> - <span class="item item-slot" class:item-slot={isslot}> + <span class="item" class:item-slot={isslot}> <!-- we have an if here because the item might be air --> {#if item} {#if imageUrl} @@ -60,6 +64,13 @@ image-rendering: pixelated; } + img.item-custom-head { + width: 0.75em; + height: 0.75em; + margin-top: 0.1875em; + margin-left: 0.1875em; + } + .item-slot { margin: 0.05em; } diff --git a/src/lib/minecraft/inventory.ts b/src/lib/minecraft/inventory.ts index fa75887..cb926b4 100644 --- a/src/lib/minecraft/inventory.ts +++ b/src/lib/minecraft/inventory.ts @@ -1,7 +1,7 @@ -import vanillaDamages from 'skyblock-assets/data/vanilla_damages.json' import * as skyblockAssets from 'skyblock-assets' +import vanilla from 'skyblock-assets/matchers/vanilla.json' +import packshq from 'skyblock-assets/matchers/vanilla.json' -const itemToUrlCache: Record<string, string> = {} interface Item { id?: string @@ -36,10 +36,7 @@ const INVENTORIES = { export type Inventories = { [name in keyof typeof INVENTORIES]: Item[] } -export async function itemToUrl(item: Item, packName?: string): Promise<string> { - const stringifiedItem = (packName ?? 'packshq') + JSON.stringify(item) - if (stringifiedItem in itemToUrlCache) - return itemToUrlCache[stringifiedItem] +export function itemToUrl(item: Item, packName?: string): string { const itemNbt: skyblockAssets.NBT = { display: { Name: item.display?.name @@ -52,21 +49,22 @@ export async function itemToUrl(item: Item, packName?: string): Promise<string> if (item.head_texture) textureUrl = `https://mc-heads.net/head/${item.head_texture}` else - textureUrl = await skyblockAssets.getTextureUrl({ + textureUrl = skyblockAssets.getTextureUrl({ id: item.vanillaId, nbt: itemNbt, - pack: packName ?? 'packshq' + packs: [packshq, vanilla] }) if (!textureUrl) console.log('no texture', item) - itemToUrlCache[stringifiedItem] = textureUrl return textureUrl } + export async function skyblockItemToUrl(skyblockItemName: string) { const item = skyblockItemNameToItem(skyblockItemName) const itemTextureUrl = await itemToUrl(item, 'packshq') return itemTextureUrl } + export function skyblockItemNameToItem(skyblockItemName: string): Item { let item: Item if (Object.keys(skyblockItems).includes(skyblockItemName)) { @@ -78,6 +76,7 @@ export function skyblockItemNameToItem(skyblockItemName: string): Item { } return item } + const skyblockItems: { [itemName: string]: Item } = { ink_sac: { vanillaId: 'minecraft:dye' }, cocoa_beans: { vanillaId: 'minecraft:dye:3' }, @@ -102,41 +101,4 @@ const skyblockItems: { [itemName: string]: Item } = { head_texture: '39b6e047d3b2bca85e8cc49e5480f9774d8a0eafe6dfa9559530590283715142' }, hard_stone: { vanillaId: 'minecraft:stone' }, -} - -export function itemToUrlCached(item: Item, packName?: string): string { - if (!item) return null - if (typeof item === 'string') { - let itemId: string = vanillaDamages[item] ?? item - let damage: number = null - // remove the minecraft: namespace since we already know it's all vanilla - if (itemId.startsWith('minecraft:')) itemId = itemId.slice('minecraft:'.length) - // split the damage into its own variable - if (itemId.includes(':')) { - damage = parseInt(itemId.split(':')[1]) - itemId = itemId.split(':')[0] - } - item = { - count: 1, - display: { - glint: false, - lore: null, - name: null - }, - id: null, - // vanillaId: damage === null ? `minecraft:${itemId}` : `minecraft:${itemId}:${damage}` - vanillaId: `minecraft:${itemId}` - } - } - const stringifiedItem = (packName ?? 'packshq') + JSON.stringify(item) - return itemToUrlCache[stringifiedItem] -} -/** Get all the items in an inventories object to cache them */ -export async function cacheInventories(inventories: Inventories, packName?: string) { - const promises: Promise<any>[] = [] - for (const inventoryItems of Object.values(inventories ?? {})) - for (const inventoryItem of inventoryItems) - if (inventoryItem) - promises.push(itemToUrl(inventoryItem, packName)) - await Promise.all(promises) }
\ No newline at end of file |