@kleppe/litematic-reader
Version:
Example: ```ts import { readFile } from "fs/promises"; import { Litematic } from '@kleppe/litematic-reader'
116 lines (91 loc) • 3.54 kB
Markdown
Example:
```ts
import { readFile } from "fs/promises";
import { Litematic } from '@kleppe/litematic-reader'
async function example(filepath: string) {
const ArrayBuffer = readFile(filepath)
const litematic = new Litematic(ArrayBuffer) // It only takes inn a ArrayBuffer
/*
Gets all block in litematic file and return with block id and position
*/
console.log(await litematic.getAllBlocks())
/*
logs: [
{pos {x: 0, y: 0, z:0} block: 'minecraft:air'},
{pos {x: 0, y: 0, z:1} block: 'minecraft:stone'}
etc...
]
*/
/*
Get a specific block in litematic file
*/
console.log(await litematic.getBlock(0, 0, 0))
/*
logs: 'minecraft:air'
*/
/* Get a palette of all the diffrent blocks with counts them */
console.log(await litematic.getBlockPaletteWithCount())
/*
logs: {
'minecraft:stone': { block: 'minecraft:smooth_quartz', count: 355 },
'minecraft:air': { block: 'minecraft:air', count: 1551 },
etc...
}
*/
/* Get a palette of all the diffrent blocks */
console.log(await litematic.getBlockPalette())
/*
logs: [
'minecraft:air',
'minecraft:stone',
etc...
]
*/
/* The functions above all read individually */
await litematic.read() // Only needed for the operations beneath
/* Can also access other file data */
console.log(litematic.litematic?.totalBlocks) // 2
console.log(litematic.litematic?.palette) /*
PaletteManager {
palette: [],
paletteList: []
}
*/
console.log(litematic.litematic?.version) // 14
console.log(litematic.litematic?.author) // Minecraft Name
console.log(litematic.litematic?.name) // Litematic Name
console.log(litematic.litematic?.description) // Litematic Description
}
example('file.litematic')
```
---
When Vite is used the `fs/promises` module will create problems. When you use a `Node.js` module in the browser, Vite will output the following warning.
> Module "fs" has been externalized for browser compatibility. Cannot access "fs.readFile" in client code.
This is because Vite does not automatically polyfill Node.js modules.
> We recommend avoiding Node.js modules for browser code to reduce the bundle size, although you can add polyfills manually. If the module is imported from a third-party library (that's meant to be used in the browser), it's advised to report the issue to the respective library.
[Vite FS Troubleshooting](https://vitejs.dev/guide/troubleshooting.html#module-externalized-for-browser-compatibility).
Example:
Html:
```html
<input id="input" type="file">
```
TS / JS:
```ts
import { Litematic } from '@kleppe/litematic-reader'
const input = getElementById('input')
input.addEventListener('change', (event:any) => {
const file = event.target.files[0]
let reader = new FileReader()
reader.addEventListener('loadend', async (e) => {
const arrayBuffer = e.target?.result
let litematic = new Litematic(arrayBuffer as ArrayBuffer)
/* Add function and logistics here */
})
reader.readAsArrayBuffer(file)
/* Can also call another function to to the logistics */
someFunction(file)
})
```