forked from Mirrorlandia_minetest/minetest
c3984569c0
Fix crash on using cursor keys in client menu without selected server Add support for non fixed size tabviews
222 lines
7.0 KiB
Plaintext
222 lines
7.0 KiB
Plaintext
Minetest Lua Mainmenu API Reference 0.4.10
|
|
========================================
|
|
|
|
Introduction
|
|
-------------
|
|
The main menu is defined as a formspec by Lua in builtin/mainmenu/
|
|
Description of formspec language to show your menu is in lua_api.txt
|
|
|
|
Callbacks
|
|
---------
|
|
core.buttonhandler(fields): called when a button is pressed.
|
|
^ fields = {name1 = value1, name2 = value2, ...}
|
|
core.event_handler(event)
|
|
^ event: "MenuQuit", "KeyEnter", "ExitButton" or "EditBoxEnter"
|
|
|
|
Gamedata
|
|
--------
|
|
The "gamedata" table is read when calling core.start(). It should contain:
|
|
{
|
|
playername = <name>,
|
|
password = <password>,
|
|
address = <IP/adress>,
|
|
port = <port>,
|
|
selected_world = <index>, -- 0 for client mode
|
|
singleplayer = <true/false>,
|
|
}
|
|
|
|
Functions
|
|
---------
|
|
core.start()
|
|
core.close()
|
|
|
|
Filesystem:
|
|
core.get_scriptdir()
|
|
^ returns directory of script
|
|
core.get_modpath() (possible in async calls)
|
|
^ returns path to global modpath
|
|
core.get_modstore_details(modid) (possible in async calls)
|
|
^ modid numeric id of mod in modstore
|
|
^ returns {
|
|
id = <numeric id of mod in modstore>,
|
|
title = <human readable title>,
|
|
basename = <basename for mod>,
|
|
description = <description of mod>,
|
|
author = <author of mod>,
|
|
download_url= <best match download url>,
|
|
license = <short description of license>,
|
|
rating = <float value of current rating>
|
|
}
|
|
core.get_modstore_list() (possible in async calls)
|
|
^ returns {
|
|
[1] = {
|
|
id = <numeric id of mod in modstore>,
|
|
title = <human readable title>,
|
|
basename = <basename for mod>
|
|
}
|
|
}
|
|
core.get_gamepath() (possible in async calls)
|
|
^ returns path to global gamepath
|
|
core.get_texturepath() (possible in async calls)
|
|
^ returns path to default textures
|
|
core.get_dirlist(path,onlydirs) (possible in async calls)
|
|
^ path to get subdirs from
|
|
^ onlydirs should result contain only dirs?
|
|
^ returns list of folders within path
|
|
core.create_dir(absolute_path) (possible in async calls)
|
|
^ absolute_path to directory to create (needs to be absolute)
|
|
^ returns true/false
|
|
core.delete_dir(absolute_path) (possible in async calls)
|
|
^ absolute_path to directory to delete (needs to be absolute)
|
|
^ returns true/false
|
|
core.copy_dir(source,destination,keep_soure) (possible in async calls)
|
|
^ source folder
|
|
^ destination folder
|
|
^ keep_source DEFAULT true --> if set to false source is deleted after copying
|
|
^ returns true/false
|
|
core.extract_zip(zipfile,destination) [unzip within path required]
|
|
^ zipfile to extract
|
|
^ destination folder to extract to
|
|
^ returns true/false
|
|
core.download_file(url,target) (possible in async calls)
|
|
^ url to download
|
|
^ target to store to
|
|
^ returns true/false
|
|
core.get_version() (possible in async calls)
|
|
^ returns current core version
|
|
core.sound_play(spec, looped) -> handle
|
|
^ spec = SimpleSoundSpec (see lua-api.txt)
|
|
^ looped = bool
|
|
core.sound_stop(handle)
|
|
|
|
Formspec:
|
|
core.update_formspec(formspec)
|
|
core.get_table_index(tablename) -> index
|
|
^ can also handle textlists
|
|
core.formspec_escape(string) -> string
|
|
^ escapes characters [ ] \ , ; that can not be used in formspecs
|
|
core.explode_table_event(string) -> table
|
|
^ returns e.g. {type="CHG", row=1, column=2}
|
|
^ type: "INV" (no row selected), "CHG" (selected) or "DCL" (double-click)
|
|
core.explode_textlist_event(string) -> table
|
|
^ returns e.g. {type="CHG", index=1}
|
|
^ type: "INV" (no row selected), "CHG" (selected) or "DCL" (double-click)
|
|
|
|
GUI:
|
|
core.set_background(type, texturepath)
|
|
^ type: "background", "overlay", "header" or "footer"
|
|
core.set_clouds(<true/false>)
|
|
core.set_topleft_text(text)
|
|
core.show_keys_menu()
|
|
core.file_open_dialog(formname,caption)
|
|
^ shows a file open dialog
|
|
^ formname is base name of dialog response returned in fields
|
|
^ -if dialog was accepted "_accepted"
|
|
^^ will be added to fieldname containing the path
|
|
^ -if dialog was canceled "_cancelled"
|
|
^ will be added to fieldname value is set to formname itself
|
|
^ returns nil or selected file/folder
|
|
core.get_screen_info()
|
|
^ returns {
|
|
density = <screen density 0.75,1.0,2.0,3.0 ... (dpi)>,
|
|
display_width = <width of display>,
|
|
display_height = <height of display>,
|
|
window_width = <current window width>,
|
|
window_height = <current window height>
|
|
}
|
|
|
|
Games:
|
|
core.get_game(index)
|
|
^ returns {
|
|
id = <id>,
|
|
path = <full path to game>,
|
|
gamemods_path = <path>,
|
|
name = <name of game>,
|
|
menuicon_path = <full path to menuicon>,
|
|
DEPRECATED:
|
|
addon_mods_paths = {[1] = <path>,},
|
|
}
|
|
core.get_games() -> table of all games in upper format (possible in async calls)
|
|
|
|
Favorites:
|
|
core.get_favorites(location) -> list of favorites (possible in async calls)
|
|
^ location: "local" or "online"
|
|
^ returns {
|
|
[1] = {
|
|
clients = <number of clients/nil>,
|
|
clients_max = <maximum number of clients/nil>,
|
|
version = <server version/nil>,
|
|
password = <true/nil>,
|
|
creative = <true/nil>,
|
|
damage = <true/nil>,
|
|
pvp = <true/nil>,
|
|
description = <server description/nil>,
|
|
name = <server name/nil>,
|
|
address = <address of server/nil>,
|
|
port = <port>
|
|
},
|
|
}
|
|
core.delete_favorite(id, location) -> success
|
|
|
|
Logging:
|
|
core.debug(line) (possible in async calls)
|
|
^ Always printed to stderr and logfile (print() is redirected here)
|
|
core.log(line) (possible in async calls)
|
|
core.log(loglevel, line) (possible in async calls)
|
|
^ loglevel one of "error", "action", "info", "verbose"
|
|
|
|
Settings:
|
|
core.setting_set(name, value)
|
|
core.setting_get(name) -> string or nil (possible in async calls)
|
|
core.setting_setbool(name, value)
|
|
core.setting_getbool(name) -> bool or nil (possible in async calls)
|
|
core.setting_save() -> nil, save all settings to config file
|
|
|
|
Worlds:
|
|
core.get_worlds() -> list of worlds (possible in async calls)
|
|
^ returns {
|
|
[1] = {
|
|
path = <full path to world>,
|
|
name = <name of world>,
|
|
gameid = <gameid of world>,
|
|
},
|
|
}
|
|
core.create_world(worldname, gameid)
|
|
core.delete_world(index)
|
|
|
|
Helpers:
|
|
core.gettext(string) -> string
|
|
^ look up the translation of a string in the gettext message catalog
|
|
fgettext(string, ...) -> string
|
|
^ call core.gettext(string), replace "$1"..."$9" with the given
|
|
^ extra arguments, call core.formspec_escape and return the result
|
|
core.parse_json(string[, nullvalue]) -> something (possible in async calls)
|
|
^ see core.parse_json (lua_api.txt)
|
|
dump(obj, dumped={})
|
|
^ Return object serialized as a string
|
|
string:split(separator)
|
|
^ eg. string:split("a,b", ",") == {"a","b"}
|
|
string:trim()
|
|
^ eg. string.trim("\n \t\tfoo bar\t ") == "foo bar"
|
|
core.is_yes(arg) (possible in async calls)
|
|
^ returns whether arg can be interpreted as yes
|
|
|
|
Async:
|
|
core.handle_async(async_job,parameters,finished)
|
|
^ execute a function asynchronously
|
|
^ async_job is a function receiving one parameter and returning one parameter
|
|
^ parameters parameter table passed to async_job
|
|
^ finished function to be called once async_job has finished
|
|
^ the result of async_job is passed to this function
|
|
|
|
Limitations of Async operations
|
|
-No access to global lua variables, don't even try
|
|
-Limited set of available functions
|
|
e.g. No access to functions modifying menu like core.start,core.close,
|
|
core.file_open_dialog
|
|
|
|
|
|
Class reference
|
|
----------------
|
|
Settings: see lua_api.txt
|