61 lines
1.6 KiB
Lua
61 lines
1.6 KiB
Lua
function futil.add_groups(itemstring, new_groups)
|
|
local def = minetest.registered_items[itemstring]
|
|
if not def then
|
|
error(("attempting to override unknown item %s"):format(itemstring))
|
|
end
|
|
local groups = table.copy(def.groups or {})
|
|
futil.table.set_all(groups, new_groups)
|
|
minetest.override_item(itemstring, { groups = groups })
|
|
end
|
|
|
|
function futil.remove_groups(itemstring, ...)
|
|
local def = minetest.registered_items[itemstring]
|
|
if not def then
|
|
error(("attempting to override unknown item %s"):format(itemstring))
|
|
end
|
|
local groups = table.copy(def.groups or {})
|
|
for _, group in ipairs({ ... }) do
|
|
groups[group] = nil
|
|
end
|
|
minetest.override_item(itemstring, { groups = groups })
|
|
end
|
|
|
|
function futil.get_items_with_group(group)
|
|
if futil.items_by_group then
|
|
return futil.items_by_group[group] or {}
|
|
end
|
|
|
|
local items = {}
|
|
|
|
for item in pairs(minetest.registered_items) do
|
|
if minetest.get_item_group(item, group) > 0 then
|
|
table.insert(items, item)
|
|
end
|
|
end
|
|
|
|
return items
|
|
end
|
|
|
|
function futil.get_item_with_group(group)
|
|
return futil.get_items_with_group(group)[1]
|
|
end
|
|
|
|
function futil.generate_items_by_group()
|
|
local items_by_group = {}
|
|
|
|
for item, def in pairs(minetest.registered_items) do
|
|
for group in pairs(def.groups or {}) do
|
|
local items = items_by_group[group] or {}
|
|
table.insert(items, item)
|
|
items_by_group[group] = items
|
|
end
|
|
end
|
|
|
|
futil.items_by_group = items_by_group
|
|
end
|
|
|
|
if INIT == "game" then
|
|
-- it's not 100% safe to assume items and groups can't change after this point.
|
|
-- but please, don't do that :\
|
|
minetest.register_on_mods_loaded(futil.generate_items_by_group)
|
|
end
|