Reduce redundancy in chance-based drops

This commit is contained in:
Wuzzy 2016-08-07 04:21:02 +02:00
parent 08d8d99ab3
commit 09c731cee0

25
api.lua

@ -44,6 +44,7 @@ minetest.after(0.01, function()
print("Unified Inventory. inventory size: "..unified_inventory.items_list_size) print("Unified Inventory. inventory size: "..unified_inventory.items_list_size)
for _, name in ipairs(unified_inventory.items_list) do for _, name in ipairs(unified_inventory.items_list) do
local def = minetest.registered_items[name] local def = minetest.registered_items[name]
-- Simple drops
if type(def.drop) == "string" then if type(def.drop) == "string" then
local dstack = ItemStack(def.drop) local dstack = ItemStack(def.drop)
if not dstack:is_empty() and dstack:get_name() ~= name then if not dstack:is_empty() and dstack:get_name() ~= name then
@ -55,21 +56,33 @@ minetest.after(0.01, function()
}) })
end end
-- Complex drops
elseif type(def.drop) == "table" then elseif type(def.drop) == "table" then
--[[ Extract single items from the table and save them into dedicated table
to register them later, in order to avoid duplicates ]]
local drop_memo = {}
for i=1,#def.drop.items do for i=1,#def.drop.items do
local itit = def.drop.items[i] local itit = def.drop.items[i]
for j=1,#itit.items do for j=1,#itit.items do
local dstack = ItemStack(itit.items[j]) local dstack = ItemStack(itit.items[j])
if not dstack:is_empty() and dstack:get_name() ~= name then if not dstack:is_empty() and dstack:get_name() ~= name then
unified_inventory.register_craft({ local dname = dstack:get_name()
type = "digging_chance", if #itit.items == 1 and itit.rarity == 1 then
items = {name}, drop_memo[dname] = "digging"
output = dstack:get_name(), elseif drop_memo[dname] ~= "digging" then
width = 0, drop_memo[dname] = "digging_chance"
}) end
end end
end end
end end
for itemstring, crafttype in pairs(drop_memo) do
unified_inventory.register_craft({
type = crafttype,
items = {name},
output = itemstring,
width = 0,
})
end
end end
end end
for _, recipes in pairs(unified_inventory.crafts_for.recipe) do for _, recipes in pairs(unified_inventory.crafts_for.recipe) do