-- default (Minetest 0.4 mod) -- Most default stuff -- Quick documentation about the API -- ================================= -- -- Helper functions defined by builtin.lua: -- dump2(obj, name="_", dumped={}) -- dump(obj, dumped={}) -- -- Mod load path -- ------------- -- Generic: -- $path_data/mods/ -- $path_userdata/usermods/ -- $mapdir/worldmods/ -- -- On a run-in-place version (eg. the distributed windows version): -- minetest-0.4.x/data/mods/ -- minetest-0.4.x/usermods/ -- minetest-0.4.x/world/worldmods/ -- -- On an installed version on linux: -- /usr/share/minetest/mods/ -- ~/.minetest/usermods -- ~/.minetest/world/worldmods -- -- Naming convention for registered textual names -- ---------------------------------------------- -- "modname:" ( can have characters a-zA-Z0-9_) -- -- This is to prevent conflicting names from corrupting maps and is -- enforced by the mod loader. -- -- Example: mod "experimental", ideal item/node/entity name "tnt": -- -> the name should be "experimental:tnt". -- -- Enforcement can be overridden by prefixing the name with ":". This can -- be used for overriding the registrations of some other mod. -- -- Example: Any mod can redefine experimental:tnt by using the name -- ":experimental:tnt" when registering it. -- (also that mods is required to have "experimental" as a dependency) -- -- The legacy mod uses ":" for maintaining backwards compatibility. -- -- Textures -- -------- -- Mods should generally prefix their textures with modname_, eg. given -- the mod name "foomod", a texture could be called "default_foomod_superfurnace.png" -- -- This is not crucial and a conflicting name will not corrupt maps. -- -- Representations of simple things -- -------------------------------- -- -- MapNode representation: -- {name="name", param1=num, param2=num} -- -- param1 and param2 are 8 bit and 4 bit integers, respectively. They -- are reserved for certain automated functions. If you don't use these -- functions, you can use them to store arbitrary values. -- -- param1 is reserved for the engine when: -- paramtype != "none" -- param2 is reserved for the engine when any of these are used: -- liquidtype == "flowing" -- drawtype == "flowingliquid" -- drawtype == "torchlike" -- drawtype == "signlike" -- -- Position representation: -- {x=num, y=num, z=num} -- -- stackstring/itemstring: A stack of items in serialized format. -- eg. 'node "dirt" 5' -- eg. 'tool "default:pick_wood" 21323' -- eg. 'craft "apple" 2' -- -- item: A single item in Lua table format. -- eg. {type="node", name="dirt"} -- ^ a single dirt node -- eg. {type="tool", name="default:pick_wood", wear=21323} -- ^ a wooden pick about 1/3 weared out -- eg. {type="craft", name="apple"} -- ^ an apple. -- -- Global functions: -- minetest.register_entity(name, prototype table) -- minetest.register_tool(name, tool definition) -- minetest.register_node(name, node definition) -- minetest.register_craftitem(name, craftitem definition) -- minetest.register_craft(recipe) -- minetest.register_abm(abm definition) -- minetest.register_globalstep(func(dtime)) -- minetest.register_on_placenode(func(pos, newnode, placer)) -- minetest.register_on_dignode(func(pos, oldnode, digger)) -- minetest.register_on_punchnode(func(pos, node, puncher)) -- minetest.register_on_generated(func(minp, maxp)) -- minetest.register_on_newplayer(func(ObjectRef)) -- minetest.register_on_respawnplayer(func(ObjectRef)) -- ^ return true in func to disable regular player placement -- minetest.register_on_chat_message(func(name, message)) -- minetest.add_to_creative_inventory(itemstring) -- minetest.setting_get(name) -> string or nil -- minetest.setting_getbool(name) -> boolean value or nil -- minetest.chat_send_all(text) -- minetest.chat_send_player(name, text) -- minetest.get_player_privs(name) -> set of privs -- -- stackstring_take_item(stackstring) -> stackstring, item -- stackstring_put_item(stackstring, item) -> stackstring, success -- stackstring_put_stackstring(stackstring, stackstring) -> stackstring, success -- -- minetest.digprop_constanttime(time) -- minetest.digprop_stonelike(toughness) -- minetest.digprop_dirtlike(toughness) -- minetest.digprop_gravellike(toughness) -- minetest.digprop_woodlike(toughness) -- minetest.digprop_leaveslike(toughness) -- minetest.digprop_glasslike(toughness) -- -- Global objects: -- minetest.env - environment reference -- -- Global tables: -- minetest.registered_nodes -- ^ List of registered node definitions, indexed by name -- minetest.registered_craftitems -- ^ List of registered craft item definitions, indexed by name -- minetest.registered_entities -- ^ List of registered entity prototypes, indexed by name -- minetest.object_refs -- ^ List of object references, indexed by active object id -- minetest.luaentities -- ^ List of lua entities, indexed by active object id -- -- EnvRef is basically ServerEnvironment and ServerMap combined. -- EnvRef methods: -- - add_node(pos, node) -- - remove_node(pos) -- - get_node(pos) -- ^ Returns {name="ignore", ...} for unloaded area -- - get_node_or_nil(pos) -- ^ Returns nil for unloaded area -- - add_luaentity(pos, name) -- - add_item(pos, itemstring) -- - add_rat(pos) -- - add_firefly(pos) -- - get_meta(pos) -- Get a NodeMetaRef at that position -- - get_player_by_name(name) -- Get an ObjectRef to a player -- -- NodeMetaRef -- - get_type() -- - allows_text_input() -- - set_text(text) -- eg. set the text of a sign -- - get_text() -- - get_owner() -- Generic node metadata specific: -- - set_infotext(infotext) -- - inventory_set_list(name, {item1, item2, ...}) -- - inventory_get_list(name) -- - set_inventory_draw_spec(string) -- - set_allow_text_input(bool) -- - set_allow_removal(bool) -- - set_enforce_owner(bool) -- - is_inventory_modified() -- - reset_inventory_modified() -- - is_text_modified() -- - reset_text_modified() -- - set_string(name, value) -- - get_string(name) -- -- ObjectRef is basically ServerActiveObject. -- ObjectRef methods: -- - remove(): remove object (after returning from Lua) -- - getpos() -> {x=num, y=num, z=num} -- - setpos(pos); pos={x=num, y=num, z=num} -- - moveto(pos, continuous=false): interpolated move -- - punch(puncher, time_from_last_punch) -- ^ puncher = an another ObjectRef, -- ^ time_from_last_punch = time since last punch action of the puncher -- - right_click(clicker); clicker = an another ObjectRef -- - get_wield_digging_properties() -> digging property table -- - add_to_inventory_later(itemstring): like above, but after callback returns (only allowed for craftitem callbacks) -- - get_hp(): returns number of hitpoints (2 * number of hearts) -- - set_hp(hp): set number of hitpoints (2 * number of hearts) -- LuaEntitySAO-only: -- - setvelocity({x=num, y=num, z=num}) -- - setacceleration({x=num, y=num, z=num}) -- - getacceleration() -> {x=num, y=num, z=num} -- - settexturemod(mod) -- - setsprite(p={x=0,y=0}, num_frames=1, framelength=0.2, -- - select_horiz_by_yawpitch=false) -- Player-only: -- - get_player_name(): will return nil if is not a player -- - inventory_set_list(name, {item1, item2, ...}) -- - inventory_get_list(name) -> {item1, item2, ...} -- - damage_wielded_item(num) (item damage/wear range is 0-65535) -- - add_to_inventory(itemstring): add an item to object inventory -- -- Registered entities: -- - Functions receive a "luaentity" as self: -- - It has the member .object, which is an ObjectRef pointing to the object -- - The original prototype stuff is visible directly via a metatable -- - Callbacks: -- - on_activate(self, staticdata) -- - on_step(self, dtime) -- - on_punch(self, hitter) -- - on_rightclick(self, clicker) -- - get_staticdata(self) -- ^ return string that will be passed to on_activate when the object -- is created next time -- -- Entity prototype table: -- { -- physical = true, -- collisionbox = {-0.5,-0.5,-0.5, 0.5,0.5,0.5}, -- visual = "cube", -- textures = {texture,texture,texture,texture,texture,texture}, -- on_activate = function(self, staticdata), -- on_step = function(self, dtime), -- on_punch = function(self, hitter), -- on_rightclick = function(self, clicker), -- get_staticdata = function(self), -- # Also you can define arbitrary member variables here -- myvariable = whatever, -- } -- -- Tool definition: -- { -- image = "default_tool_steelaxe.png", -- full_punch_interval = 1.0, -- basetime = 1.0, -- dt_weight = 0.5, -- dt_crackiness = -0.2, -- dt_crumbliness = 1, -- dt_cuttability = -0.5, -- basedurability = 330, -- dd_weight = 0, -- dd_crackiness = 0, -- dd_crumbliness = 0, -- dd_cuttability = 0, -- } -- -- Node definition options: -- { -- name = "modname:somenode", -- drawtype = "normal", -- visual_scale = 1.0, -- tile_images = {"default_unknown_block.png"}, -- inventory_image = "default_unknown_block.png", -- special_materials = { -- {image="", backface_culling=true}, -- {image="", backface_culling=true}, -- }, -- alpha = 255, -- post_effect_color = {a=0, r=0, g=0, b=0}, -- paramtype = "none", -- is_ground_content = false, -- light_propagates = false, -- sunlight_propagates = false, -- walkable = true, -- pointable = true, -- diggable = true, -- climbable = false, -- buildable_to = false, -- wall_mounted = false, -- often_contains_mineral = false, -- dug_item = "", -- extra_dug_item = "", -- extra_dug_item_rarity = 2, -- metadata_name = "", -- liquidtype = "none", -- liquid_alternative_flowing = "", -- liquid_alternative_source = "", -- liquid_viscosity = 0, -- light_source = 0, -- damage_per_second = 0, -- selection_box = {type="regular"}, -- material = { -- diggablity = "normal", -- weight = 0, -- crackiness = 0, -- crumbliness = 0, -- cuttability = 0, -- flammability = 0, -- }, -- cookresult_itemstring = "", -- Cannot be cooked -- furnace_cooktime = 3.0, -- furnace_burntime = -1, -- Cannot be used as fuel -- } -- -- Craftitem definition options: -- minetest.register_craftitem("modname_name", { -- image = "default_image.png", -- stack_max = , -- cookresult_itemstring = itemstring (result of cooking), -- furnace_cooktime = , -- furnace_burntime =