nodecore-cd2025/mods/nc_api/util_ezschematic.lua
Aaron Suen 8bfdc211a3 Convert some action logs to info
We were using action log level for a lot of
things because by default MT does not seem
to capture info logs to stderr.  On "production"
servers though this makes too much noise and
makes it hard to find actual player actions.
Servers that want info logging will just have
to configure/compile it in.
2021-12-11 21:26:18 -05:00

45 lines
1.4 KiB
Lua

-- LUALOCALS < ---------------------------------------------------------
local error, ipairs, minetest, nodecore, pairs, string, table
= error, ipairs, minetest, nodecore, pairs, string, table
local string_format, table_sort
= string.format, table.sort
-- LUALOCALS > ---------------------------------------------------------
function nodecore.ezschematic(key, yslices, init)
local totals = {}
local size = {}
local data = {}
size.y = #yslices
for y, ys in ipairs(yslices) do
if size.z and size.z ~= #ys then error("inconsistent z size") end
size.z = #ys
for z, zs in ipairs(ys) do
if size.x and size.x ~= #zs then error("inconsistent x size") end
size.x = #zs
for x = 1, zs:len() do
local node = key[zs:sub(x, x)]
if node and node.name then
totals[node.name] = (totals[node.name] or 0) + 1
end
data[(z - 1) * size.x * size.y + (y - 1) * size.x + x] = node
end
end
end
init = init or {}
init.size = size
init.data = data
local keys = {}
for k in pairs(totals) do keys[#keys + 1] = k end
table_sort(keys, function(a, b) return totals[a] > totals[b] end)
local report = string_format("ezschematic %s %dx%dx%d",
minetest.get_current_modname() or "runtime",
#yslices[1][1], #yslices, #yslices[1])
for _, k in ipairs(keys) do
report = string_format("%s, %d %s", report, totals[k], k)
end
nodecore.log("info", report)
return minetest.register_schematic(init)
end