minetest.register_chatcommand("dumpnodes", {
	description = "Dump node and texture list for use with minetestmapper",
	func = function()
		local out, err = io.open(minetest.get_worldpath() .. "/nodes.txt", 'wb')
		if not out then return true, err end
		for name, def in pairs(minetest.registered_nodes) do
			local tiles = def.tiles or def.tile_images
			if tiles and def.drawtype ~= 'airlike' then
				local tex = nil
				for _, tile in pairs(tiles) do
					tex = type(tile) == 'table' and (tile.name or tile.image) or tile
					if tex ~= "blank.png" then break end
				end
				if tex then
					out:write(name .. " " .. tex)
					if def.paramtype2 and def.paramtype2:sub(1,5) == "color" and def.palette ~= "" then
						out:write(" " .. def.paramtype2 .. " " .. def.palette)
					elseif def.color and def.color ~= "" then
						out:write(" " .. def.color)
					end
					out:write('\n')
				end
			end
		end
		out:close()
		return true, "Finished node dump for minetestmapper."
	end,
})