registry - Uberi/MineTest-API GitHub Wiki
Registry
Global objects
minetest.env
- EnvRef of the server environment and world. Using this you can access nodes and entities.
Global tables
minetest.registered_items
List of registered items, indexed by nameminetest.registered_nodes
List of registered node definitions, indexed by nameminetest.registered_craftitems
List of registered craft item definitions, indexed by nameminetest.registered_tools
List of registered tool definitions, indexed by nameminetest.registered_entities
List of registered entity prototypes, indexed by nameminetest.object_refs
List of object references, indexed by active object idminetest.luaentities
List of lua entities, indexed by active object id
Anything added using certain minetest.register_*
functions get added to the global minetest.registered_*
tables.
[minetest.register_entity](minetest.register_entity)(name, prototype table)
-> minetest.registered_entities[name]
[minetest.register_node](minetest.register_node)(name, node definition)
-> minetest.registered_items[name]
-> minetest.registered_nodes[name]
[minetest.register_tool](minetest.register_tool)(name, item definition)
-> minetest.registered_items[name]
[minetest.register_craftitem](minetest.register_craftitem)(name, item definition)
-> minetest.registered_items[name]
Note that in some cases you will stumble upon things that are not contained in these tables (eg. when a mod has been removed). Always check for existence before trying to access the fields.
Example 1: If you want to check the drawtype of a node, you could do:
local function get_nodedef_field(nodename, fieldname) if not minetest.registered_nodes[nodename] then return nil end return minetest.registered_nodes[nodename][fieldname] end local drawtype = get_nodedef_field(nodename, "drawtype")
Example 2: minetest.get_item_group(name, group) has been implemented as:
function minetest.get_item_group(name, group) if not minetest.registered_items[name] or not minetest.registered_items[name].groups[group] then return 0 end return minetest.registered_items[name].groups[group] end
If you want to OVERRIDE an existing node/item/entity, this snippet provides a way to do so that is compatible with other mods overriding the same entity:
-- The reason this is needed is because the following code does not work as expected:
local node = minetest.registered_nodes["default:sapling"]
node.after_place_node = function(pos) print("TESTING123") end
minetest.register_node(":default:sapling", node)
--
-- inline solution
--
local node = {}
for k,v in pairs(minetest.registered_nodes["default:sapling"]) do node[k] = v end
node.after_place_node = function(pos) print("TESTING123") end
minetest.register_node(":default:sapling", node)
--
-- global function that can be reused
--
-- function
clone_registered = function(case,name)
local params = {}
local list
if case == "item" then list = minetest.registered_items end
if case == "node" then list = minetest.registered_nodes end
if case == "craftitem" then list = minetest.registered_craftitems end
if case == "tool" then list = minetest.registered_tools end
if case == "entity" then list = minetest.registered_entities end
if list then
for k,v in pairs(list[name]) do
params[k] = v
end
end
return params
end
-- usage
local node = clone_registered("node","default:tree")
node.after_place_node = function(pos) print("TESTING123") end
minetest.register_node(":default:tree", node)
Afterword
Minetest Links
Lua Links
We're Social
Chat with us
There are developers, modders, themers, server admins and players on IRC at freenode on the channel #minetest (chatlogs)