skyhelper-networth
Version:
SkyHelper's Networth Calculation for Hypixel SkyBlock
66 lines (57 loc) • 2.04 kB
JavaScript
const nbt = require('prismarine-nbt');
const { gunzip } = require('zlib');
async function decodeItems(base64Strings) {
try {
const results = await Promise.allSettled(
base64Strings.flat().map(async (item) => {
try {
if (!item || !item.length) {
return [];
}
const unzippedData = await new Promise((resolve, reject) =>
gunzip(Buffer.from(item, 'base64'), (error, unzippedData) => {
if (error) reject(error);
else resolve(unzippedData);
}),
);
const parsed = nbt.protos.big.parsePacketBuffer('nbt', unzippedData, 0);
const simplified = nbt.simplify(parsed.data);
return simplified.i;
} catch {
return [];
}
}),
);
return results.filter((result) => result.status === 'fulfilled').map((result) => result.value);
} catch {
return [];
}
}
async function decodeItemsObject(base64Strings) {
try {
const decodedItemsArray = await decodeItems(Object.values(base64Strings));
return Object.fromEntries(Object.keys(base64Strings).map((key, idx) => [key, decodedItemsArray[idx] ?? []]));
} catch {
return {};
}
}
async function decodeItem(encodedItem) {
try {
const unzippedData = await new Promise((resolve, reject) =>
gunzip(Buffer.from(encodedItem, 'base64'), (error, unzippedData) => {
if (error) reject(error);
else resolve(unzippedData);
}),
);
const parsed = nbt.protos.big.parsePacketBuffer('nbt', unzippedData, 0);
const simplified = nbt.simplify(parsed.data);
return simplified.i;
} catch {
return {};
}
}
module.exports = {
decodeItem,
decodeItems,
decodeItemsObject,
};