72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
//@ts-check
|
|
import { build } from 'esbuild'
|
|
import { existsSync } from 'node:fs'
|
|
import Module from "node:module"
|
|
import { dirname } from 'node:path'
|
|
import supportedVersions from '../src/supportedVersions.mjs'
|
|
|
|
if (existsSync('dist/mc-data') && !process.argv.includes('-f')) {
|
|
console.log('using cached prepared data')
|
|
process.exit(0)
|
|
}
|
|
|
|
const require = Module.createRequire(import.meta.url)
|
|
|
|
const dataPaths = require('minecraft-data/minecraft-data/data/dataPaths.json')
|
|
|
|
function toMajor (version) {
|
|
const [a, b] = (version + '').split('.')
|
|
return `${a}.${b}`
|
|
}
|
|
|
|
const grouped = {}
|
|
|
|
for (const [version, data] of Object.entries(dataPaths.pc)) {
|
|
if (!supportedVersions.includes(version)) continue
|
|
const major = toMajor(version)
|
|
grouped[major] ??= {}
|
|
grouped[major][version] = data
|
|
}
|
|
|
|
const versionToNumber = (ver) => {
|
|
const [x, y = '0', z = '0'] = ver.split('.')
|
|
return +`${x.padStart(2, '0')}${y.padStart(2, '0')}${z.padStart(2, '0')}`
|
|
}
|
|
|
|
console.log('preparing data')
|
|
console.time('data prepared')
|
|
let builds = []
|
|
for (const [major, versions] of Object.entries(grouped)) {
|
|
// if (major !== '1.19') continue
|
|
let contents = 'Object.assign(window.mcData, {\n'
|
|
for (const [version, dataSet] of Object.entries(versions)) {
|
|
contents += ` '${version}': {\n`
|
|
for (const [dataType, dataPath] of Object.entries(dataSet)) {
|
|
if (dataType === 'blockCollisionShapes' && versionToNumber(version) >= versionToNumber('1.13')) {
|
|
contents += ` get ${dataType} () { return window.globalGetCollisionShapes?.("${version}") },\n`
|
|
continue
|
|
}
|
|
const loc = `minecraft-data/data/${dataPath}/`
|
|
contents += ` get ${dataType} () { return require("./${loc}${dataType}.json") },\n`
|
|
}
|
|
contents += ' },\n'
|
|
}
|
|
contents += '})'
|
|
|
|
const promise = build({
|
|
bundle: true,
|
|
outfile: `dist/mc-data/${major}.js`,
|
|
stdin: {
|
|
contents,
|
|
|
|
resolveDir: dirname(require.resolve('minecraft-data')),
|
|
sourcefile: `mcData${major}.js`,
|
|
loader: 'js',
|
|
},
|
|
metafile: true,
|
|
})
|
|
// require('fs').writeFileSync('dist/mc-data/metafile.json', JSON.stringify(promise.metafile), 'utf8')
|
|
builds.push(promise)
|
|
}
|
|
await Promise.all(builds)
|
|
console.timeEnd('data prepared')
|