Skip to content

Commit a757a8a

Browse files
authored
Add support for sub inventories (#547)
* Add support for sub inventories like new years cake bag * Fix messed up exports
1 parent 6aede44 commit a757a8a

File tree

10 files changed

+110
-38
lines changed

10 files changed

+110
-38
lines changed

src/components/items/inventories/inventory-basic.svelte

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import * as Dialog from '$ui/dialog';
77
import { Skeleton } from '$ui/skeleton';
88
import ItemLore from '../item-lore.svelte';
9+
import ItemRender from '../item-render.svelte';
910
import PackIcon from '../pack-icon.svelte';
11+
import InventoryBasic from './inventory-basic.svelte';
1012
import InventorySlot from './inventory-slot.svelte';
1113
1214
interface Props {
@@ -19,6 +21,7 @@
1921
) => { inventory: string; item: ItemDto | null; highlight?: boolean };
2022
wrap?: boolean;
2123
inventorySize?: number;
24+
subSlot?: string;
2225
}
2326
2427
let {
@@ -27,6 +30,7 @@
2730
itemModifier = undefined,
2831
wrap = false,
2932
inventorySize = 27,
33+
subSlot = undefined,
3034
}: Props = $props();
3135
3236
let items = $derived.by(() => {
@@ -53,6 +57,26 @@
5357
.join(','),
5458
});
5559
}
60+
61+
const deletorCompactorItems = $derived(
62+
Object.entries(selectedItem?.attributes ?? {})
63+
.filter(([k]) => k.startsWith('personal_deletor_') || k.startsWith('personal_compact_'))
64+
.map(([k, v]) => [+(k.split('_').at(-1) ?? 0), v] as [number, string])
65+
.sort((a, b) => a[0] - b[0])
66+
);
67+
68+
// const itemIdModifier: Props['itemModifier'] = (invId, slot, item) => {
69+
// if (item) {
70+
// return {
71+
// inventory: invId,
72+
// item: { ...item, slot: selectedItem?.slot },
73+
// };
74+
// }
75+
// return {
76+
// inventory: invId,
77+
// item,
78+
// };
79+
// };
5680
</script>
5781

5882
{#if wrap}
@@ -66,9 +90,10 @@
6690
inventoryId={modified.inventory}
6791
{onSelect}
6892
highlight={modified.highlight}
93+
{subSlot}
6994
/>
7095
{:else}
71-
<InventorySlot {item} inventoryId={inventory.id} {onSelect} />
96+
<InventorySlot {item} inventoryId={inventory.id} {onSelect} {subSlot} />
7297
{/if}
7398
{/each}
7499
</div>
@@ -82,9 +107,10 @@
82107
inventoryId={modified.inventory}
83108
{onSelect}
84109
highlight={modified.highlight}
110+
{subSlot}
85111
/>
86112
{:else}
87-
<InventorySlot {item} inventoryId={inventory.id} {onSelect} />
113+
<InventorySlot {item} inventoryId={inventory.id} {onSelect} {subSlot} />
88114
{/if}
89115
{/each}
90116
{/if}
@@ -93,6 +119,25 @@
93119
<Dialog.ScrollContent class="dark bg-background border-border text-primary">
94120
{#if selectedItem}
95121
<ItemLore item={selectedItem}>
122+
{#if selectedItem.attributes?.inventory_data}
123+
<div class="my-4 grid w-fit grid-cols-9 items-center justify-center gap-1">
124+
<InventoryBasic
125+
inventory={{
126+
items: selectedItem.attributes.inventory_data,
127+
id: inventory.id,
128+
name: inventory.name,
129+
}}
130+
inventorySize={200}
131+
subSlot={selectedItem.slot ?? undefined}
132+
/>
133+
</div>
134+
{:else if deletorCompactorItems.length > 0}
135+
<div class="my-4 grid w-fit grid-cols-9 items-center justify-center gap-1">
136+
{#each deletorCompactorItems as [key, itemId] (key)}
137+
<ItemRender skyblockId={itemId} class="bg-card size-12 rounded-sm border" />
138+
{/each}
139+
</div>
140+
{/if}
96141
<div class="text-primary bg-card mt-4 mb-4 rounded-md border p-2">
97142
<p class="mb-2 text-lg font-semibold">Estimated Value</p>
98143
{#if itemDetails?.ready && itemDetails?.current?.auctions && itemDetails?.current.auctions.length > 0}

src/components/items/inventories/inventory-select.svelte

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,7 @@
3131
{#if inventoryOptions.length > 0}
3232
<section id="inventories" class="my-16 flex flex-col items-center gap-2 transition-transform duration-400">
3333
<div class="flex w-full max-w-lg flex-row items-center justify-between px-2">
34-
<h2 class="flex flex-row items-center gap-2 text-2xl font-semibold">
35-
Inventories
36-
<span class="bg-completed text-primary-foreground rounded-md p-0.5 text-sm">BETA</span>
37-
</h2>
34+
<h2 class="flex flex-row items-center gap-2 text-2xl font-semibold">Inventories</h2>
3835
<div class="flex flex-row items-center justify-between">
3936
<Select.Simple options={inventoryOptions} bind:value={selectedInventoryId} />
4037
</div>

src/components/items/inventories/inventory-slot.svelte

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
inventoryId: string;
77
onSelect?: (item: ItemDto) => void;
88
highlight?: boolean;
9+
subSlot?: string;
910
}
1011
11-
let { item, inventoryId, onSelect, highlight = false }: Props = $props();
12+
let { item, inventoryId, onSelect, highlight = false, subSlot = undefined }: Props = $props();
1213
</script>
1314

1415
{#if item}
15-
{@const texture = item.imageUrl ?? `/api/texture/${inventoryId}/${item.slot}.webp`}
16+
{@const texture = item.imageUrl
17+
? item.imageUrl
18+
: `/api/texture/${inventoryId}/${subSlot ?? item.slot}.webp${subSlot && item.slot ? `?sub=${item.slot}` : ''}`}
1619
{#if onSelect}
1720
<button class="relative" onclick={() => onSelect?.(item)}>
1821
<ItemIcon url={texture} class={highlight ? 'border-link/50' : ''} />

src/components/items/item-icon.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<img
2525
loading="lazy"
2626
class="h-full w-full rounded-md p-1 {loading || errored ? 'opacity-0' : 'opacity-100'} pixelated aspect-square"
27-
src="{url}{gbl.packsParam}"
27+
src="{url}{gbl.packsParam && url.includes('?') ? gbl.packsParam.replace('?', '&') : gbl.packsParam}"
2828
alt="Item"
2929
onload={() => (loading = false)}
3030
onerror={() => {

src/lib/api/client/EliteAPI.zod.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12344,6 +12344,7 @@ export const zodGetInventoryItemMetaParams = zod.object({
1234412344

1234512345
export const zodGetInventoryItemMetaQueryParams = zod.object({
1234612346
packs: zod.string().nullish(),
12347+
sub: zod.string().nullish().describe('Sub slot if nested inventory'),
1234712348
});
1234812349

1234912350
export const zodGetInventoryItemMetaResponse = zod.object({
@@ -12360,6 +12361,7 @@ export const zodGetInventoryItemTextureParams = zod.object({
1236012361

1236112362
export const zodGetInventoryItemTextureQueryParams = zod.object({
1236212363
packs: zod.string().nullish(),
12364+
sub: zod.string().nullish().describe('Sub slot if nested inventory'),
1236312365
});
1236412366

1236512367
/**

src/lib/api/schemas/GetInventoryItemMetaParams.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,9 @@ export type GetInventoryItemMetaParams = {
1313
* @nullable
1414
*/
1515
packs?: string | null;
16+
/**
17+
* Sub slot if nested inventory
18+
* @nullable
19+
*/
20+
sub?: string | null;
1621
};

src/lib/api/schemas/GetInventoryItemTextureParams.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,9 @@ export type GetInventoryItemTextureParams = {
1313
* @nullable
1414
*/
1515
packs?: string | null;
16+
/**
17+
* Sub slot if nested inventory
18+
* @nullable
19+
*/
20+
sub?: string | null;
1621
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Generated by orval v7.16.0 🍺
3+
* Do not edit manually.
4+
* Elite API
5+
* A backend API for https://elitebot.dev/ that provides Hypixel Skyblock data.
6+
<br><br>
7+
Use of this API requires following the [Elite API TOS](https://elitebot.dev/apiterms). This API is not affiliated with Hypixel or Mojang.
8+
* OpenAPI spec version: v1
9+
*/
10+
11+
export interface PriceHistoryDataPoint {
12+
timestamp: string;
13+
lowestPrice: number;
14+
averagePrice: number;
15+
volume: number;
16+
}

src/lib/api/schemas/index.ts

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ export * from './AuctionItemVariationExtra';
3232
export * from './AuctionItemVariationItemAttributes';
3333
export * from './AuctionItemVariationPetLevel';
3434
export * from './AuctionItemVariationPetLevelGroup';
35+
export * from './AuthorizedAccountDto';
36+
export * from './AuthorizedGuildDto';
37+
export * from './AuthorizedGuildDtoGuild';
38+
export * from './AuthorizedGuildDtoMember';
3539
export * from './AuthRefreshDto';
3640
export * from './AuthResponseDto';
3741
export * from './AuthResponseDtoPendingConfirmation';
3842
export * from './AuthSessionDto';
3943
export * from './AuthSessionDtoPendingConfirmation';
40-
export * from './AuthorizedAccountDto';
41-
export * from './AuthorizedGuildDto';
42-
export * from './AuthorizedGuildDtoGuild';
43-
export * from './AuthorizedGuildDtoMember';
4444
export * from './AutoRoles';
4545
export * from './BadgeDto';
4646
export * from './BadgeDtoImage';
@@ -160,22 +160,22 @@ export * from './EventMemberDto';
160160
export * from './EventMemberDtoData';
161161
export * from './EventMemberDtoMeta';
162162
export * from './EventMemberStatus';
163-
export * from './EventTeamWithMembersDto';
164163
export * from './EventTeamsWordListDto';
164+
export * from './EventTeamWithMembersDto';
165165
export * from './EventType';
166166
export * from './ExcludedTimespan';
167167
export * from './FarmingInventoryDto';
168168
export * from './FarmingWeightAllProfilesDto';
169169
export * from './FarmingWeightDto';
170170
export * from './FarmingWeightDtoBonusWeight';
171-
export * from './FarmingWeightDtoCropWeight';
172171
export * from './FarmingWeightDtoCrops';
172+
export * from './FarmingWeightDtoCropWeight';
173173
export * from './FarmingWeightDtoInventory';
174174
export * from './FarmingWeightDtoUncountedCrops';
175175
export * from './FarmingWeightWithProfileDto';
176176
export * from './FarmingWeightWithProfileDtoBonusWeight';
177-
export * from './FarmingWeightWithProfileDtoCropWeight';
178177
export * from './FarmingWeightWithProfileDtoCrops';
178+
export * from './FarmingWeightWithProfileDtoCropWeight';
179179
export * from './FarmingWeightWithProfileDtoUncountedCrops';
180180
export * from './ForceAddMemberAdminParams';
181181
export * from './ForceAddMemberParams';
@@ -217,11 +217,11 @@ export * from './GetInventoryItemMetaParams';
217217
export * from './GetInventoryItemMetaRequest';
218218
export * from './GetInventoryItemTextureParams';
219219
export * from './GetInventoryItemTextureRequest';
220-
export * from './GetItemTextureParams';
221-
export * from './GetItemTextureRequest';
222220
export * from './GetItemsFromBytesRequest';
223221
export * from './GetItemsFromBytesResponse';
224222
export * from './GetItemsFromBytesResponseItemsItem';
223+
export * from './GetItemTextureParams';
224+
export * from './GetItemTextureRequest';
225225
export * from './GetLeaderboardParams';
226226
export * from './GetMedalBracketsGraphParams';
227227
export * from './GetMedalBracketsGraphRequest';
@@ -348,6 +348,8 @@ export * from './LeaderboardRanksResponse';
348348
export * from './LeaderboardRanksResponseRanks';
349349
export * from './LeaderboardScoreDataType';
350350
export * from './LeaderboardSliceRequest';
351+
export * from './LeaderboardsResponse';
352+
export * from './LeaderboardsResponseLeaderboards';
351353
export * from './LeaderboardStyleDataDto';
352354
export * from './LeaderboardStyleDataDtoBackground';
353355
export * from './LeaderboardStyleDataDtoName';
@@ -358,8 +360,6 @@ export * from './LeaderboardStyleDataDtoSubtitle';
358360
export * from './LeaderboardStyleLayerDto';
359361
export * from './LeaderboardStyleTextDto';
360362
export * from './LeaderboardType';
361-
export * from './LeaderboardsResponse';
362-
export * from './LeaderboardsResponseLeaderboards';
363363
export * from './LeaveEventRequest';
364364
export * from './LeaveTeamRequest';
365365
export * from './LinkedAccountsDto';
@@ -382,10 +382,10 @@ export * from './ParentProductDto';
382382
export * from './Pest';
383383
export * from './PestEventData';
384384
export * from './PestEventDataPestWeights';
385+
export * from './PestsDto';
385386
export * from './PestWeightsDto';
386387
export * from './PestWeightsDtoBrackets';
387388
export * from './PestWeightsDtoValues';
388-
export * from './PestsDto';
389389
export * from './PetDto';
390390
export * from './PlayerBadgeRequest';
391391
export * from './PlayerDataDto';
@@ -394,6 +394,7 @@ export * from './PlayerLeaderboardEntryWithRankDto';
394394
export * from './PlayerProfileUuidRequest';
395395
export * from './PlayerRequest';
396396
export * from './PlayerUuidRequest';
397+
export * from './PriceHistoryDataPoint';
397398
export * from './PrivateGuildDto';
398399
export * from './PrivateGuildDtoBanner';
399400
export * from './PrivateGuildDtoIcon';
@@ -406,8 +407,8 @@ export * from './ProfileDetailsDto';
406407
export * from './ProfileEventMemberDto';
407408
export * from './ProfileLeaderboardMemberDto';
408409
export * from './ProfileMemberDto';
409-
export * from './ProfileMemberDtoCollectionTiers';
410410
export * from './ProfileMemberDtoCollections';
411+
export * from './ProfileMemberDtoCollectionTiers';
411412
export * from './ProfileMemberDtoCraftedMinions';
412413
export * from './ProfileMemberDtoGarden';
413414
export * from './ProfileMemberDtoMeta';
@@ -427,9 +428,9 @@ export * from './RawDungeonsResponse';
427428
export * from './RawDungeonsResponseDungeonTypes';
428429
export * from './RawDungeonsResponsePlayerClasses';
429430
export * from './RemoveCosmeticToProductRequest';
431+
export * from './RemovedFilter';
430432
export * from './RemoveProductFromCategoryRequest';
431433
export * from './RemoveTestEntitlementParams';
432-
export * from './RemovedFilter';
433434
export * from './ReorderCategoryProductsRequest';
434435
export * from './ReorderElementOfInt32';
435436
export * from './ReorderElementOfString';
@@ -453,16 +454,16 @@ export * from './SkillsDataPointDto';
453454
export * from './SkillsDataPointDtoSkills';
454455
export * from './SkillsDto';
455456
export * from './SkyBlockDayRequest';
456-
export * from './SkyBlockMonthRequest';
457-
export * from './SkyBlockYearRequest';
458457
export * from './SkyblockFiresaleDto';
459458
export * from './SkyblockFiresaleItemDto';
460459
export * from './SkyblockFiresalesResponse';
461460
export * from './SkyblockGemShopsResponse';
462461
export * from './SkyblockItemResponse';
463462
export * from './SkyblockItemResponseBazaar';
464463
export * from './SkyblockItemResponseData';
464+
export * from './SkyBlockMonthRequest';
465465
export * from './SkyblockProductRequest';
466+
export * from './SkyBlockYearRequest';
466467
export * from './SocialMediaLinksDto';
467468
export * from './StrippedContestParticipationDto';
468469
export * from './TaylorCollection';
@@ -490,8 +491,8 @@ export * from './UpdateTeamJoinCodeRequest';
490491
export * from './UpdateUserSettingsDto';
491492
export * from './UpdateUserSettingsDtoFeatures';
492493
export * from './UpgradeCost';
493-
export * from './UpgradeCostType';
494494
export * from './UpgradeCosts';
495+
export * from './UpgradeCostType';
495496
export * from './UploadCurrentContestsBody';
496497
export * from './UploadImageDto';
497498
export * from './UserBadgeDto';
@@ -507,6 +508,8 @@ export * from './VerifiedRoleFeature';
507508
export * from './VisitorDto';
508509
export * from './WeightEventData';
509510
export * from './WeightEventDataCropWeights';
511+
export * from './WeightsDto';
512+
export * from './WeightsDtoCrops';
510513
export * from './WeightStyleBackground';
511514
export * from './WeightStyleBackgroundDto';
512515
export * from './WeightStyleBackgroundDtoSize';
@@ -560,8 +563,6 @@ export * from './WeightStyleWithDataDto';
560563
export * from './WeightStyleWithDataDtoData';
561564
export * from './WeightStyleWithDataDtoImage';
562565
export * from './WeightStyleWithDataDtoLeaderboard';
563-
export * from './WeightsDto';
564-
export * from './WeightsDtoCrops';
565566
export * from './YearlyContestsDto';
566567
export * from './YearlyContestsDtoContests';
567568
export * from './YearlyCropRecordsDto';

src/routes/api/texture/[inventoryId]/[textureId]/+server.ts

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
import { getInventoryItemTexture } from '$lib/api';
1+
import { getInventoryItemTexture, type GetInventoryItemTextureParams } from '$lib/api';
22

33
export async function GET({ params, url }) {
44
const packIds = url.searchParams.get('packs');
5-
const { response, data } = await getInventoryItemTexture(
6-
params.inventoryId,
7-
params.textureId,
8-
packIds
9-
? {
10-
packs: packIds,
11-
}
12-
: undefined
13-
);
5+
const sub = url.searchParams.get('sub');
6+
7+
const p: GetInventoryItemTextureParams = {};
8+
if (packIds) p.packs = packIds;
9+
if (sub && sub !== 'null') p.sub = sub;
10+
11+
const { response, data } = await getInventoryItemTexture(params.inventoryId, params.textureId, p);
1412
return new Response(data as unknown as Blob, {
1513
status: response.status,
1614
headers: {

0 commit comments

Comments
 (0)