registry - Uberi/MineTest-API GitHub Wiki

Minetest API

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 name
  • 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_tools List of registered tool 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

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)

Webchat