5.1 KiB
Laptop Mod API
Add new hardware nodes
laptop.register_hardware(name, hwdef)
-
name
- Item name (prefix) The created node names are name_variant -
hwdef.description
- Computer item name -
hwdef.infotext
- Text shown if node is pointed -
hwdef.sequence = { "variant_1_name", "variant_2_name", "variant_3_name" }
On punch swaps sequence. the first variant is in creative inventory -
hwdef.custom_launcer
- optional - custom launcher name -
hwdef.custom_theme
- optional - custom initial theme name -
hwdef.node_defs = { variant_1_name = { hw_state = "resume", "power_on" or "power_off", -- Hardware state --node 1 definiton }, variant_2_name = { hw_state = "resume", "power_on" or "power_off", -- Hardware state --node 2 definiton }, }
- A list for node definitions for each variant. with hw_state parameter for OS-initialization -
laptop.os_get(pos)
- Get an OS object. Usefull in on_construct or on_punch to initialize or do anything with OS Needed in on_receive_fields to be able to call mtos:receive_fields(fields, sender) for interactive apps -
laptop.after_place_node
/laptop.after_dig_node
- (optional) can be used directly for node definition. Move laptop apps data to ItemStack if digged and restored back if placed again. So you can take along your laptop. Note: you need to setstack_max = 1
because the data can be stored per stack only, not per item.
Operating system calls
Usable from node functions, from apps or outsite
local mtos = laptop.os_get(pos)
- Get the Operating system object. pos is the node position
mtos:power_on(new_node_name)
- Activate the app "launcher" and if given swap node to new_node_namemtos:resume(new_node_name)
- Restore the last running app after power_off. if given swap node to new_node_namemtos:power_off(new_node_name)
- Remove the formspec and if given swap node to new_node_namemtos:swap_node(new_node_name)
- Swap the node only without any changes on OSmtos:set_infotext(infotext)
- Set the mouseover infotext for laptop nodemtos:save()
- Store all app-data to nodemeta. Called mostly internally so no explicit call necessarymtos:get_app(appname)
- Get the app instancemtos:set_app(appname)
- Start/Enable/navigate to appname. If no appname given the launcher is calledmtos:receive_fields(fields, sender)
- Should be called from node.on_receive_fields to get the apps interactivemtos:get_theme(theme)
- Get theme data current or requested (theme parameter is optional)mtos:set_theme(theme)
- Activate theme
App Definition
laptop.register_app(internal_shortname, { definitiontable })
- add a new app or view
app_name
- App name shown in launcher. If not defined the app is just a view, not visible in launcher but can be activated. This way multi-screen apps are possibleapp_icon
- Icon to be shown in launcher. If nothing given the default icon is usedapp_info
- Short app info visible in launcher tooltipfullscreen
- (boolean) Do not add app-background and window buttonsview
- (boolean) The definition is a view. That means the app/view is not visible in launcherformspec_func(app, mtos)
- Function, should return the app formspec (mandatory) During definition the "app" and the "mtos" are availableappwindow_formspec_func(launcher_app, app, mtos)
- Only custom launcher app: App background / Window decorations and buttonsreceive_fields_func(app, mtos, fields, sender)
Function for input processing. The "app" and the "mtos" are available inside the calllaptop.register_view(internal_shortname, { definitiontable })
- add a new app or view same as register_app, but the view flag is set. app_name and app_icon not necessary
App Object
local app = mtos:get_app(appname)
- Give the app object internal_shortname, connected to given mtos. Not necessary in formspec_func or receive_fields_func because given trough interface
data = app:get_storage_ref(appname)
- Returns a "persitant" data table from nodemeta (=hdd). The data in this table is not lost between formspec_func, receive_fields_func, apps-switch or on/off. Appname is optional to get data from other appdata = app:get_cloud_storage_ref(appname)
- Returns a persistant table from modmeta (=internet)- `app:back_app() - Go back to previous app/view
- `app:exit_app() - Delete call stack and return to launcher
Theme definition
laptop.register_theme(name, definitiontable)
- add a new theme. All parameters optional, if missed, the default is used
Definitiontable:
launcher_bg
Launcher background imageapp_bg
Apps background imagecontrast_bg
dark background to place under white text elements that does not support textcolortextcolor
Default text color for buttons and labels. For buttons the major_textcolor and minor_textcolor supportedback_button
Back Button imageexit_button
Exit button imagemajor_button
Major (highlighted) button imageminor_button
Minor button image
Theme methods
function laptop.get_theme(theme_name)
theme:get_button(area, prefix, code, text)
get a themed [prefix]_button in area 'x,y;w,h' with code an texttheme:get_label(pos, text)
get a themed label text starting at pos 'x,y'