VoxelEngine/res/scripts/post_content.lua
2025-09-19 22:16:28 +03:00

80 lines
2.1 KiB
Lua

local user_props = file.read_combined_object("config/user-props.toml")
local names = {
"parent", "caption", "texture", "texture-faces", "model", "model-name",
"model-primitives", "material", "rotation", "hitboxes", "hitbox", "emission",
"size", "obstacle", "replaceable", "light-passing", "sky-light-passing",
"shadeless", "ambient-occlusion", "breakable", "selectable", "grounded",
"hidden", "draw-group", "picking-item", "surface-replacement", "script-name",
"ui-layout", "inventory-size", "tick-interval", "overlay-texture",
"translucent", "fields", "particles", "icon-type", "icon", "placing-block",
"stack-size", "name", "script-file", "culling"
}
for name, _ in pairs(user_props) do
table.insert(names, name)
end
-- remove undefined properties and build tags set
local function process_properties(lib)
for id, props in pairs(lib.properties) do
for propname, _ in pairs(props) do
if not table.has(names, propname) then
props[propname] = nil
end
end
props.tags_set = lib.__get_tags(id)
end
end
process_properties(block)
process_properties(item)
local function make_read_only(t)
setmetatable(t, {
__newindex = function()
error("table is read-only")
end
})
end
make_read_only(block.properties)
for k,v in pairs(block.properties) do
make_read_only(v)
end
local function cache_names(library)
local indices = {}
local names = {}
for id=0,library.defs_count()-1 do
local name = library.properties[id].name
indices[name] = id
names[id] = name
end
function library.name(id)
return names[id]
end
function library.index(name)
return indices[name]
end
function library.has_tag(id, tag)
if id == nil then
error("id is nil")
end
local props = library.properties[id]
local tags_set = props.tags_set
if tags_set then
return tags_set[tag]
else
return false
end
end
end
cache_names(block)
cache_names(item)
__vc_scripts_registry.build_registry()