100 lines
2.8 KiB
Lua
100 lines
2.8 KiB
Lua
-- LUALOCALS < ---------------------------------------------------------
|
|
local io, ipairs, minetest, nodecore, pairs, table, tostring, type
|
|
= io, ipairs, minetest, nodecore, pairs, table, tostring, type
|
|
local io_open, table_concat, table_insert, table_sort
|
|
= io.open, table.concat, table.insert, table.sort
|
|
-- LUALOCALS > ---------------------------------------------------------
|
|
|
|
if not nodecore.infodump() then return end
|
|
|
|
local faces = {
|
|
"top",
|
|
"bottom",
|
|
"left",
|
|
"right",
|
|
"front",
|
|
"back"
|
|
}
|
|
|
|
local function tilize(tiles, max)
|
|
if not tiles then return end
|
|
tiles = minetest.deserialize(minetest.serialize(tiles))
|
|
if not tiles then return end
|
|
for k2, v2 in pairs(tiles) do
|
|
tiles[k2] = (type(v2) == "table" and v2.name or v2.image) or v2
|
|
end
|
|
while max and #tiles > max do tiles[#tiles] = nil end
|
|
while (#tiles > 1) and (tiles[#tiles] == tiles[#tiles - 1]) do
|
|
tiles[#tiles] = nil
|
|
end
|
|
return tiles
|
|
end
|
|
|
|
minetest.after(0, function()
|
|
local function noblank(s) return s and tostring(s):match("%S") and tostring(s) or nil end
|
|
|
|
local data = {}
|
|
for k, v in pairs(minetest.registered_items) do
|
|
local key = noblank(v.description) or k
|
|
key = key:gsub("%W+", "_"):lower()
|
|
data[key] = data[key] or {}
|
|
data[key][#data[key] + 1] = {
|
|
technical_name = k,
|
|
drawtype = v.drawtype,
|
|
description = v.description,
|
|
tiles = tilize(v.tiles, #faces),
|
|
inventory_image = noblank(v.inventory_image),
|
|
wield_image = noblank(v.wield_image),
|
|
special_tiles = tilize(v.special_tiles),
|
|
}
|
|
end
|
|
|
|
local ents = {}
|
|
for _, v in pairs(data) do
|
|
local curent = {}
|
|
local function writeln(s) curent[#curent + 1] = s end
|
|
table_sort(v, function(a, b) return a.technical_name < b.technical_name end)
|
|
local mesh
|
|
for _, t in ipairs(v) do
|
|
mesh = mesh or t.drawtype == "mesh"
|
|
local tn = t.technical_name
|
|
if t.tiles then
|
|
local tt = t.tiles
|
|
for i = #tt, 1, -1 do
|
|
if i == #tt and i ~= #faces then
|
|
writeln(tn .. " * " .. tt[i])
|
|
else
|
|
writeln(tn .. " " .. faces[i] .. " " .. tt[i])
|
|
end
|
|
end
|
|
end
|
|
if t.special_tiles then
|
|
for i, st in pairs(t.special_tiles) do
|
|
writeln(tn .. " special_" .. i .. " " .. st)
|
|
end
|
|
end
|
|
if noblank(t.inventory_image) then
|
|
writeln(tn .. " inventory " .. t.inventory_image)
|
|
end
|
|
if noblank(t.wield_image) then
|
|
writeln(tn .. " wield " .. t.wield_image)
|
|
end
|
|
end
|
|
if #curent > 0 then
|
|
if mesh then
|
|
table_insert(curent, 1, "# <!> MESH DRAWTYPE; FACES MAY"
|
|
.. " MISMATCH NAMES")
|
|
end
|
|
if noblank(v[1].description) then
|
|
table_insert(curent, 1, "# " .. v[1].description)
|
|
end
|
|
ents[#ents + 1] = table_concat(curent, "\n")
|
|
end
|
|
end
|
|
table_sort(ents)
|
|
|
|
local f = io_open(minetest.get_worldpath() .. "/texturepack_override.template.txt", "wb")
|
|
f:write(table_concat(ents, "\n\n"))
|
|
f:close()
|
|
end)
|