radius = 2

function getNumMaterials()
  return 1
end

function getDimensions()
  local dim = radius * 2 + 3
  return dim, dim, dim
end

function getBlockAt(x, y, z)
  local sqrt3 = math.sqrt(3)
  local r = radius
  x = x - r - 1
  y = y - r - 1
  z = z - r - 1
  local dist = math.sqrt(x*x + y*y + z*z)
  if dist >= r then
    local offsets = {{1, 0, 0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}
    local i
    for i = 1,6 do
     local offset = offsets[i]
     local dx, dy, dz = offset[1], offset[2], offset[3] 
     local nx, ny, nz = x+dx,y+dy,z+dz
     local pdist = math.sqrt(nx*nx + ny*ny + nz*nz)
     if pdist < r and pdist + sqrt3 >= r then
       return 1
     end
    end
  end
  return nil
end

provider = {
  ["getDimensions"] = getDimensions,
  ["getNumMaterials"] = getNumMaterials,
  ["getBlockAt"] = getBlockAt
}

pcons.run(provider, 3, -2, -2)

