nucleation 0.1.21

A high-performance Minecraft schematic parser and utility library
Documentation
import init, { SchematicWrapper } from './minecraft_schematic_utils.js';

let schematic;

async function initWasm() {
    await init();
    schematic = new SchematicWrapper();
    console.log("Wasm module initialized");
}

initWasm();

document.getElementById('convertButton').addEventListener('click', async () => {
    const fileInput = document.getElementById('fileInput');
    const file = fileInput.files[0];
    if (!file) {
        alert('Please select a file');
        return;
    }

    const arrayBuffer = await file.arrayBuffer();
    const uint8Array = new Uint8Array(arrayBuffer);

    console.log(`File loaded: ${file.name}, size: ${uint8Array.length} bytes`);

    try {
        if (file.name.endsWith('.litematic')) {
            console.log("Processing .litematic file");
            await schematic.from_litematic(uint8Array);
            console.log("Litematic processed, converting to schematic");
            const schemData = await schematic.to_schematic();
            console.log(`Conversion completed, schematic size: ${schemData.length} bytes`);
            downloadBlob(schemData, 'converted.schem', 'application/octet-stream');
        } else if (file.name.endsWith('.schem')) {
            console.log("Processing .schem file");
            await schematic.from_schematic(uint8Array);
            console.log("Schematic processed, converting to litematic");
            const litematicData = await schematic.to_litematic();
            console.log(`Conversion completed, litematic size: ${litematicData.length} bytes`);
            downloadBlob(litematicData, 'converted.litematic', 'application/octet-stream');
        } else {
            alert('Unsupported file format');
        }
    } catch (error) {
        console.error('Conversion error:', error);
        alert('Error during conversion: ' + error.message);
    }
});

document.getElementById('printButton').addEventListener('click', () => {
    if (!schematic) {
        alert('Please load a schematic first');
        return;
    }
    console.log("Printing schematic");
    const output = schematic.print_schematic();
    console.log("Schematic printed:", output);
    document.getElementById('output').textContent = output;
});

document.getElementById('debugButton').addEventListener('click', () => {
    if (!schematic) {
        alert('Please load a schematic first');
        return;
    }
    console.log("Debugging schematic");
    const debugInfo = debug_schematic(schematic);
    console.log("Debug info:", debugInfo);
    document.getElementById('output').textContent = debugInfo;
});

function downloadBlob(data, fileName, mimeType) {
    const blob = new Blob([data], { type: mimeType });
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement('a');
    a.style.display = 'none';
    a.href = url;
    a.download = fileName;
    document.body.appendChild(a);
    a.click();
    window.URL.revokeObjectURL(url);
}