-- Returns the greatest numeric key in a table. function xdecor.maxn(T) local n = 0 for k in pairs(T) do if k > n then n = k end end return n end -- Returns the length of an hash table. function xdecor.tablelen(T) local n = 0 for _ in pairs(T) do n = n + 1 end return n end -- Deep copy of a table. Borrowed from mesecons mod (https://github.com/Jeija/minetest-mod-mesecons). function xdecor.tablecopy(T) if type(T) ~= "table" then return T -- No need to copy. end local new = {} for k, v in pairs(T) do if type(v) == "table" then new[k] = xdecor.tablecopy(v) else new[k] = v end end return new end function xdecor.stairs_valid_def(def) return (def.drawtype == "normal" or def.drawtype:sub(1,5) == "glass") and (def.groups.cracky or def.groups.choppy) and not def.on_construct and not def.after_place_node and not def.on_rightclick and not def.on_blast and not def.allow_metadata_inventory_take and not (def.groups.not_in_creative_inventory == 1) and not (def.groups.not_cuttable == 1) and not def.groups.wool and (def.tiles and type(def.tiles[1]) == "string" and not def.tiles[1]:find("default_mineral")) and not def.mesecons and def.description and def.description ~= "" and def.light_source == 0 end function xdecor.get_inventory_drops(pos, listnames) local drops = {} for l=1, #listnames do default.get_inventory_drops(pos, listnames[l], drops) end return drops end