minetest_craftguide_reveal/init.lua

74 lines
1.6 KiB
Lua
Raw Normal View History

2019-01-14 11:27:52 -08:00
local reg_items = minetest.registered_items
local revealed_cache = {}
minetest.register_on_leaveplayer(function(player)
revealed_cache[player:get_player_name()] = nil
end)
2019-01-14 11:27:52 -08:00
local function item_has_groups(item_groups, groups)
for i = 1, #groups do
local group = groups[i]
if not item_groups[group] then
return
end
end
return true
end
local function revealed_show_recipe(recipe, playername)
if not revealed_cache[playername] then
revealed_cache[playername] = {}
end
if revealed_cache[playername][recipe] then
return true
end
2019-01-14 11:27:52 -08:00
local revealed = doc.data.players[playername].stored_data.revealed
for _, item in pairs(recipe.items) do
local is_revealed_item = false
2019-01-14 11:27:52 -08:00
if item:sub(1,6) == "group:" then
local groups = item:sub(7):split(",")
for cid, items in pairs(revealed) do
2019-01-14 22:41:21 -08:00
for revealed_item in pairs(items) do
if reg_items[revealed_item] and item_has_groups(reg_items[revealed_item].groups, groups) then
2019-01-14 11:27:52 -08:00
is_revealed_item = true
break
2019-01-14 11:27:52 -08:00
end
end
if is_revealed_item then
break
end
2019-01-14 11:27:52 -08:00
end
else
for cid, items in pairs(revealed) do
if items[item] then
is_revealed_item = true
break
2019-01-14 11:27:52 -08:00
end
end
end
if not is_revealed_item then
return false
2019-01-14 11:27:52 -08:00
end
end
revealed_cache[playername][recipe] = true
2019-01-14 11:27:52 -08:00
return true
end
2019-09-13 02:38:59 -07:00
craftguide.remove_recipe_filter("Default progressive filter")
craftguide.add_recipe_filter('reveal', function(recipes, player)
2019-07-01 00:05:40 -07:00
if not recipes then
return
end
2019-01-14 11:27:52 -08:00
local filtered = {}
for i = 1, #recipes do
local recipe = recipes[i]
if revealed_show_recipe(recipe, player:get_player_name()) then
filtered[#filtered + 1] = recipe
end
end
return filtered
2019-01-18 09:22:31 -08:00
end)