@mark-wiemer/luanti-api v0.1.0
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.
9 months ago