@mark-wiemer/luanti-api
v0.1.0
Published
Luanti API TypeScript definitions for TypeScriptToLua
Maintainers
Readme
Luanti API
Type definitions for using the Luanti (formerly Minetest) API via TypeScriptToLua
Usage
Install dev dependency in your TypeScript project:
npm i @mark-wiemer/luanti-api --save-devAnd use:
import type {} from "@mark-wiemer/luanti-api";The module declares the Luanti global the same way you'd use it in Lua
You can also utilize the types it provides in your own code by importing them:
import type { LtVec3 } from "@mark-wiemer/luanti-api";
let myVec: LtVec3 = { x: 0, y: 0, z: 0 };core is the only supported namespace alias, minetest will not work:
core.register_on_joinplayer((player) => {
const playername = player.get_player_name();
core.chat_send_player(playername, "Welcome!");
});Users of Luanti's Lua api will notice a lack of : in TypeScript
Lua uses obj:method and obj.func to differentiate with obj is passed as self as the first argument
For instance:
local obj = {
method = function (self)
--"self" refers to obj, similar to "this" in TypeScript
end
func = function ()
--no self variable here
end
};
obj.method() -- self will be nil
obj:method() -- self will be obj
obj.func() -- self will be nil
obj:func() -- self will still be nil because its not declared in function argsIn TypeScript this is handled by providing a this definition:
interface LuantiGlobal {
register_on_joinplayer (this: void, cb: LtPlayerJoinCallback): void;
}
declare global core: LuantiGlobal;Because
this: voidTypeScript calls to core.register_on_joinplayer() will properly output:
core.register_on_joinplayer() in lua
Without providing this: void, this would generate:
core:register_on_joinplayer() as TypeScriptToLua assumes we want to provide a self reference as first argument
On the flip-side:
function handle_player_join (player) --player is ObjRef
player:get_player_name() -- passes player as first arg to get_player_name code
end
core.register_on_joinplayer ( handle_player_join )In TypeScript definitions:
interface ObjRef {
//implicit this: ObjRef
get_player_name(): string;
//same as
get_player_name(this: ObjRef): string;
}Which both properly output:
player:get_player_name()Acknowledgements
This project is a fork of @repcomm/mt-api from 2023.
