Javascript Setup¶
BI uses a mod called KubeJS to apply recipe & material customisation, new custom items, and as a datapack/asset loader. As the name suggests, these tweaks are written in JavaScript; BI has an extensive amount of JavaScript code to implement all of the recipe changes.
Unlike most modpacks that use KubeJS, BI uses a bundler setup to compile multiple separate
JavaScript files into a single one, which is then ingested into KubeJS. This has the advantage of
being able to reuse functions across files without needing to awkwardly smash them into a
global object, as well as being able to use certain modern JavaScript features that the
interpreter KubeJS uses doesn’t support.
Building The Bundle¶
BI uses pnpm for managing the dependencies of the JavaScript code and setup. If you have a recent version of Node.JS installed, you can use corepack to automatically install pnpm for you:
$ corepack enable
$ pnpm --version
Run the installation command to install all of the dependencies:
$ pnpm install
There are two defined commands to actually bundle all of the tweaker files:
build-devbuilds an unminified and non-tree shaken build. The outputted files are significantly larger (the startup scripts includes most of the server scripts) but the resulting file is semi-readable and errors will appear in the right place in the traceback.This is used for development builds when individual commits are built from CI.
build-prodbuilds a minified and tree shaken build. The outputted files are significantly smaller as they remove all unused code.This is used when tags are built from CI.
Autocomplete¶
BI includes ProbeJS which can generate TypeScript stub files for autocomplete in editors such as Visual Studio Code. To get autocomplete, do the following:
Add your
.vscodefolder to the extra linked files in yourlocalpack.toml.Run your development instance and enter a world.
Run the
/probejs dumpcommand in-game.
Formatting and Linting¶
A combination of ESlint and Prettier are used for linting and formatting respectively. Lints can
be done with pnpm eslint --fix, and formatting can be done with pnpm prettier src --write.