//@ts-nocheck export async function getBufferFromStream(stream) { return new Promise((resolve, reject) => { let buffer = Buffer.from([]) stream.on('data', buf => { buffer = Buffer.concat([buffer, buf]) }) stream.on('end', () => resolve(buffer)) stream.on('error', reject) }) } // used for custom blocks export function getBlockPosKey(pos: { x: number; y: number; z: number }) { return `${pos.x},${pos.y},${pos.z}` } export function openURL(url, newTab = true) { if (newTab) { window.open(url, '_blank', 'noopener,noreferrer') } else { window.open(url, '_self') } } export const isMobile = () => { return window.matchMedia('(pointer: coarse)').matches || navigator.userAgent.includes('Mobile') } export function chunkPos(pos: { x: number; z: number }) { const x = Math.floor(pos.x / 16) const z = Math.floor(pos.z / 16) return [x, z] } export function sectionPos(pos: { x: number; y: number; z: number }) { const x = Math.floor(pos.x / 16) const y = Math.floor(pos.y / 16) const z = Math.floor(pos.z / 16) return [x, y, z] }