Add 2 checks: broken_recipe, list_groups

This commit is contained in:
Wuzzy 2020-03-27 14:42:54 +01:00
parent 07dce9438f
commit 7400d3b005
2 changed files with 121 additions and 0 deletions

77
checks/broken_recipe.lua Normal file
View File

@ -0,0 +1,77 @@
-- Find crafting recipes which require unknown items or groups
-- If true, will also check groups
local check_groups = true
local modutils = dofile(minetest.get_modpath("qa_block").."/modutils.lua")
local known_bad_items = {}
local known_groups = {}
local known_bad_groups = {}
local function item_exists(itemstring)
if itemstring == "" then
return true
elseif minetest.registered_items[itemstring] then
return true
end
return false
end
local function group_exists(groupname)
return known_groups[groupname] == true
end
-- Get groups
if check_groups then
for name, def in pairs(minetest.registered_items) do
if def.groups then
for g,r in pairs(def.groups) do
known_groups[g] = true
end
end
end
end
local check_item = function(itemstring, bad_item_msg, bad_group_msg, is_output)
local item = ItemStack(itemstring):get_name()
local modname = modutils.get_modname_by_itemname(item)
if modname ~= "group" then
if not item_exists(item) and not known_bad_items[item] then
known_bad_items[item] = true
print(bad_item_msg .. ": \"" .. item .. "\"")
end
elseif check_groups then
local groupstr = string.sub(item, 7)
local groups = string.split(groupstr, ",")
if is_output and #groups > 0 then
print(bad_group_msg .. ". Full string: \""..item.."\")")
return
end
for g=1, #groups do
local group = groups[g]
if not group_exists(group) and not known_bad_groups[group] then
print(bad_group_msg .. ": \"" .. group .. "\" (full string: \""..item.."\")")
known_bad_groups[group] = true
end
end
end
end
-- Check recipes for unknown items and groups
for name, def in pairs(minetest.registered_items) do
local recipes_for_item = minetest.get_all_craft_recipes(name)
if recipes_for_item then
for id, recipe in pairs(recipes_for_item) do
if recipe.items then
for i=1, #recipe.items do
local item = recipe.items[i]
if item and item ~= "" then
check_item(item, "Unknown input item", "Input group without any items")
end
end
end
end
end
end

44
checks/list_groups.lua Normal file
View File

@ -0,0 +1,44 @@
-- Lists all the groups that items are in
-- If true, will also list all items that are members of the group
local list_group_members = false
local all_groups = {}
for id, def in pairs(minetest.registered_items) do
if def.groups then
for group, rating in pairs(def.groups) do
if rating ~= 0 then
if not all_groups[group] then
all_groups[group] = {}
end
table.insert(all_groups[group], id)
end
end
end
end
-- Sort groups
local flat_groups = {}
for group, _ in pairs(all_groups) do
table.insert(flat_groups, group)
end
table.sort(flat_groups)
-- Output
for g=1, #flat_groups do
local group = flat_groups[g]
local items = all_groups[group]
if list_group_members then
-- Print all groups and the group members
print("Group \""..group.."\":")
table.sort(items)
for i=1, #items do
-- Print item name and group rating
local def = minetest.registered_items[items[i]]
print(" " .. items[i] .. " (" .. def.groups[group]..")")
end
else
-- Print groups only
print("Group \""..group.."\": "..(#items).." item(s)")
end
end