Описание

[](https://github.com/kinderhead/LuaDatapack/releases)
[](https://modrinth.com/mod/luadatapack)
# LuaDatapack
Allows lua scripts to be ran in Minecraft.
Note: LuaDatapack is in beta, so the api is subject to change.
I currently don't plan on working on this project much more. Instead I've been making a dedicated programming language that compiles to Minecraft commands called [Amethyst](https://github.com/kinderhead/Amethyst/). It's more useful than this because it doesn't require a dedicated mod.
## Usage
Create a new datapack with the `lua` subfolder. For example: `data/foo/lua/bar.lua`.
## Features
* Uses [Cobalt](https://github.com/SquidDev/Cobalt) under the hood, which gives fast execution times
* Scripts can be included from datapacks using `require` and use Minecraft's namespaced id system
* [TypeScriptToLua](https://typescripttolua.github.io/) support
* Supports a few common utility libraries
* [json.lua](https://github.com/rxi/json.lua)
* [class.lua](https://github.com/jonstoler/class.lua)
## Commands
### `/lua`
Usage: `/lua []`
Example, to run `data/foo/lua/bar.lua`: `/lua foo:bar`
Arguments can be accessed via an array called `args` in the lua script.
## Api
The api reference can be found [here](https://kinderhead.github.io/LuaDatapack/).
## Standard library
A few utility libraries are included by default.
|Library|Path|
|---|---|
|[json.lua](https://github.com/rxi/json.lua)|`std:json`|
|[class.lua](https://github.com/jonstoler/class.lua)|`std:class`|
|Standard lua library|`std:math`|
|Standard lua library|`std:string`|
|Standard lua library|`std:bit32`|
|Standard lua library|`std:utf8`|
|Commands library|`std:commands`|
|Storage library|`std:storage`|
|Configuration utilities library|`std:config`|
Note: If you prefer a different OOP library, you can simply add one to your datapack.
## Project system
There is a simple project system which allows for customization of which scripts can be executed and imported by external projects (scripts not in the same namespace).
To customize your project, add a `_project.lua` file to your namespace. For example if the namespace was `foo` then you would make a `foo:_project.lua`:
``` lua
return {
scripts = {"foo:bar"},
exports = {"foo:baz"},
depends = {"hello"},
load = {"foo:load"},
tick = {"foo:tick"}
}
```
In the above example `foo:bar` is a script to be ran via `/lua`, `foo:baz` is a script that any file can `require`, and it requires the `hello` project to function. Scripts can import any script in the same namespace, even if it is not included in the `exports` array. If a project does not include a `_project.lua`, then the default `std:_default_datapack` is used instead:
``` lua
local config = require("std:config")
return {
scripts = config.without_underscore(),
exports = {}
}
```
Note: not all fields need to be explicitly defined.
If a project fails to load, all scripts in it are unable to load.
## Contributing
Building this repo is the same as any other Fabric mod. There may be issues with libraries (Cobalt, Apache commons-io, etc) not loading when starting the game, but running the game though the VSCode debugger works for some reason.
### Things to do
* Optimize lua api
* Add more api features
* Use commands less internally
## Planned features
* More commands
* Development tools with [TypeScriptToLua](https://typescripttolua.github.io/)
## Links
Source: https://github.com/kinderhead/LuaDatapack
Modrinth: https://modrinth.com/mod/luadatapack
Api reference: https://kinderhead.github.io/LuaDatapack