UNPKG

@flymeth/datapackjs

Version:

A great library to create your own minecraft datapack with javascript!

88 lines (76 loc) 2.62 kB
import { readFile, rmSync } from "fs"; import path from "path"; import Datapack, { buildDatas, dpOptions } from ".."; import buildEvent from "./readers/events"; import buildFunction from "./readers/functions"; import buildTag from "./readers/tags"; import buildAdvancement from "./readers/advancement"; import mk from "./utils/mk"; import buildRecipe from "./readers/recipe"; type buildConfig = { /** * datapacks/foo/[HERE] */ mainPath: string, namespace: string, options: dpOptions } var buildInfos:buildConfig = { mainPath: ".", namespace: "dpjs", options: {} } async function initBuild(pck:Datapack) { const {name, options, version, description, icon, namespace} = pck if(!( name && version && namespace )) throw new Error(`Cannot build a datapack without his main informations!`) const { buildPath, author } = options || {} const mainFolderPath = path.join(buildPath || '.', name) try { rmSync(mainFolderPath, {recursive: true}) } catch (e) {} buildInfos = { mainPath: mainFolderPath, namespace, options: options || {} } mk("folder", path.join(mainFolderPath, "data", namespace)) if(icon) { const ext = path.extname(icon) if(ext !== "png") console.error(`".${ext}" is not a valid icon extention!`) else readFile(path.join(__dirname, icon), (e, f) => { if(e) return console.error(`"${icon}" is not a valid icon!`) mk("file", path.join(mainFolderPath, "pack.png", f.toString('utf-8'))) }) } const packFormat = { "1.18": 8, "1.18.2": 9, "1.19": 10 } const packmeta = { pack: { pack_format: packFormat[version] || version[version.length - 1], description } } mk("file", path.join(mainFolderPath, 'pack.mcmeta'), JSON.stringify(packmeta)) } function build(...datas: buildDatas[]) { const functions: {[key: string]: any} = { "event": buildEvent, "function": buildFunction, "tag": buildTag, "advancement": buildAdvancement, "recipe": buildRecipe } for(const obj of datas) { const f = functions[obj.ObjectType?.toLowerCase()] if(!f) return console.error(`"${obj.ObjectType}" isn't a valid object type!`) else f(obj, buildInfos) } console.info(`The datapack has been built inside ${buildInfos.mainPath}!`) } export default initBuild export {build, initBuild, buildConfig}