mirror of
https://github.com/minetest-mods/craftguide.git
synced 2024-11-26 12:33:43 +01:00
... and make the other functions local
This commit is contained in:
parent
610117de08
commit
9da500ce2c
216
init.lua
216
init.lua
@ -110,39 +110,7 @@ local function item_in_inv(inv, item)
|
|||||||
return inv:contains_item("main", item)
|
return inv:contains_item("main", item)
|
||||||
end
|
end
|
||||||
|
|
||||||
local show_fs = function(player, player_name)
|
local function group_to_item(item)
|
||||||
if sfinv_only then
|
|
||||||
local context = sfinv.get_or_create_context(player)
|
|
||||||
sfinv.set_player_inventory_formspec(player, context)
|
|
||||||
else
|
|
||||||
craftguide:get_formspec(player_name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function init_datas(user, name)
|
|
||||||
datas[name] = {filter = "", pagenum = 1, iX = sfinv_only and 8 or DEFAULT_SIZE}
|
|
||||||
if progressive_mode then
|
|
||||||
craftguide:get_filter_items(datas[name], user)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function add_custom_recipes(item, recipes)
|
|
||||||
for j = 1, #craftguide.custom_crafts do
|
|
||||||
local craft = craftguide.custom_crafts[j]
|
|
||||||
if craft.output:match("%S*") == item then
|
|
||||||
recipes[#recipes + 1] = {
|
|
||||||
width = craftguide.craft_types[craft.type].width,
|
|
||||||
type = craft.type,
|
|
||||||
items = craft.items,
|
|
||||||
output = craft.output,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return recipes
|
|
||||||
end
|
|
||||||
|
|
||||||
function craftguide:group_to_item(item)
|
|
||||||
if item:sub(1,6) == "group:" then
|
if item:sub(1,6) == "group:" then
|
||||||
local itemsub = item:sub(7)
|
local itemsub = item:sub(7)
|
||||||
if group_stereotypes[itemsub] then
|
if group_stereotypes[itemsub] then
|
||||||
@ -161,7 +129,7 @@ function craftguide:group_to_item(item)
|
|||||||
return item:sub(1,6) == "group:" and "" or item
|
return item:sub(1,6) == "group:" and "" or item
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_tooltip(item, recipe_type, cooktime, groups)
|
local function get_tooltip(item, recipe_type, cooktime, groups)
|
||||||
local tooltip, item_desc = "tooltip[" .. item .. ";", ""
|
local tooltip, item_desc = "tooltip[" .. item .. ";", ""
|
||||||
local fueltime = get_fueltime(item)
|
local fueltime = get_fueltime(item)
|
||||||
local has_extras = groups or recipe_type == "cooking" or fueltime > 0
|
local has_extras = groups or recipe_type == "cooking" or fueltime > 0
|
||||||
@ -198,7 +166,7 @@ function craftguide:get_tooltip(item, recipe_type, cooktime, groups)
|
|||||||
return has_extras and tooltip .. "]" or ""
|
return has_extras and tooltip .. "]" or ""
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
local function _get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
||||||
local formspec, recipes_total = "", #recipes
|
local formspec, recipes_total = "", #recipes
|
||||||
if recipes_total > 1 then
|
if recipes_total > 1 then
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
@ -246,8 +214,8 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
|||||||
|
|
||||||
local groups = extract_groups(v)
|
local groups = extract_groups(v)
|
||||||
local label = groups and "\nG" or ""
|
local label = groups and "\nG" or ""
|
||||||
local item_r = self:group_to_item(v)
|
local item_r = group_to_item(v)
|
||||||
local tltip = self:get_tooltip(item_r, recipe_type, cooktime, groups)
|
local tltip = get_tooltip(item_r, recipe_type, cooktime, groups)
|
||||||
|
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"item_image_button[" .. X .. "," ..
|
"item_image_button[" .. X .. "," ..
|
||||||
@ -259,7 +227,7 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
|||||||
BUTTON_SIZE = 1.1
|
BUTTON_SIZE = 1.1
|
||||||
end
|
end
|
||||||
|
|
||||||
local custom_recipe = self.craft_types[recipe_type]
|
local custom_recipe = craftguide.craft_types[recipe_type]
|
||||||
if recipe_type == "cooking" or (recipe_type == "normal" and width == 0) or
|
if recipe_type == "cooking" or (recipe_type == "normal" and width == 0) or
|
||||||
custom_recipe then
|
custom_recipe then
|
||||||
local icon = recipe_type == "cooking" and "furnace" or "shapeless"
|
local icon = recipe_type == "cooking" and "furnace" or "shapeless"
|
||||||
@ -293,7 +261,7 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
|||||||
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" ..
|
BUTTON_SIZE .. "," .. BUTTON_SIZE .. ";" ..
|
||||||
output .. ";" .. output_s .. ";]" ..
|
output .. ";" .. output_s .. ";]" ..
|
||||||
|
|
||||||
self:get_tooltip(output_s)
|
get_tooltip(output_s)
|
||||||
|
|
||||||
if output_is_fuel then
|
if output_is_fuel then
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
@ -309,7 +277,7 @@ function craftguide:get_recipe(iX, iY, xoffset, recipe_num, recipes, show_usage)
|
|||||||
return formspec
|
return formspec
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_formspec(player_name)
|
local function get_formspec(player_name)
|
||||||
local data = datas[player_name]
|
local data = datas[player_name]
|
||||||
local iY = sfinv_only and 4 or data.iX - 5
|
local iY = sfinv_only and 4 or data.iX - 5
|
||||||
local ipp = data.iX * iY
|
local ipp = data.iX * iY
|
||||||
@ -385,7 +353,7 @@ function craftguide:get_formspec(player_name)
|
|||||||
(iY + (sfinv_only and 2.85 or 2.35)) ..
|
(iY + (sfinv_only and 2.85 or 2.35)) ..
|
||||||
";0.9,0.7;craftguide_arrow.png]" ..
|
";0.9,0.7;craftguide_arrow.png]" ..
|
||||||
|
|
||||||
self:get_tooltip(data.item) ..
|
get_tooltip(data.item) ..
|
||||||
|
|
||||||
"image[" .. (X + 2.1) .. "," ..
|
"image[" .. (X + 2.1) .. "," ..
|
||||||
(iY + (sfinv_only and 2.68 or 2.18)) ..
|
(iY + (sfinv_only and 2.68 or 2.18)) ..
|
||||||
@ -393,7 +361,7 @@ function craftguide:get_formspec(player_name)
|
|||||||
else
|
else
|
||||||
local show_usage = data.show_usage
|
local show_usage = data.show_usage
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
self:get_recipe(data.iX,
|
_get_recipe(data.iX,
|
||||||
iY,
|
iY,
|
||||||
xoffset,
|
xoffset,
|
||||||
data.rnum,
|
data.rnum,
|
||||||
@ -411,7 +379,16 @@ function craftguide:get_formspec(player_name)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:recipe_in_inv(inv, item_name, recipes_f)
|
local show_fs = function(player, player_name)
|
||||||
|
if sfinv_only then
|
||||||
|
local context = sfinv.get_or_create_context(player)
|
||||||
|
sfinv.set_player_inventory_formspec(player, context)
|
||||||
|
else
|
||||||
|
get_formspec(player_name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function recipe_in_inv(inv, item_name, recipes_f)
|
||||||
local recipes = recipes_f or get_recipes(item_name) or {}
|
local recipes = recipes_f or get_recipes(item_name) or {}
|
||||||
local show_item_recipes = {}
|
local show_item_recipes = {}
|
||||||
|
|
||||||
@ -442,50 +419,7 @@ function craftguide:recipe_in_inv(inv, item_name, recipes_f)
|
|||||||
return recipes, in_table(show_item_recipes)
|
return recipes, in_table(show_item_recipes)
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_init_items()
|
local function get_filter_items(data, player)
|
||||||
local items_list, c = {}, 0
|
|
||||||
local function list(name)
|
|
||||||
c = c + 1
|
|
||||||
items_list[c] = name
|
|
||||||
end
|
|
||||||
|
|
||||||
for name, def in pairs(reg_items) do
|
|
||||||
local is_fuel = get_fueltime(name) > 0
|
|
||||||
if (not (def.groups.not_in_craft_guide == 1 or
|
|
||||||
def.groups.not_in_creative_inventory == 1)) and
|
|
||||||
(get_recipe(name).items or is_fuel) and
|
|
||||||
def.description and def.description ~= "" then
|
|
||||||
list(name)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
for i = 1, #self.custom_crafts do
|
|
||||||
local craft = self.custom_crafts[i]
|
|
||||||
local output = craft.output:match("%S*")
|
|
||||||
local listed
|
|
||||||
|
|
||||||
for j = 1, #items_list do
|
|
||||||
local listed_item = items_list[j]
|
|
||||||
if output == listed_item then
|
|
||||||
listed = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if not listed then
|
|
||||||
list(output)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
sort(items_list)
|
|
||||||
datas.init_items = items_list
|
|
||||||
end
|
|
||||||
|
|
||||||
mt.register_on_mods_loaded(function()
|
|
||||||
craftguide:get_init_items()
|
|
||||||
end)
|
|
||||||
|
|
||||||
function craftguide:get_filter_items(data, player)
|
|
||||||
local filter = data.filter
|
local filter = data.filter
|
||||||
if datas.searches[filter] then
|
if datas.searches[filter] then
|
||||||
data.items = datas.searches[filter]
|
data.items = datas.searches[filter]
|
||||||
@ -506,7 +440,7 @@ function craftguide:get_filter_items(data, player)
|
|||||||
filtered_list[counter] = item
|
filtered_list[counter] = item
|
||||||
end
|
end
|
||||||
elseif progressive_mode then
|
elseif progressive_mode then
|
||||||
local _, has_item = self:recipe_in_inv(inv, item)
|
local _, has_item = recipe_in_inv(inv, item)
|
||||||
if has_item then
|
if has_item then
|
||||||
counter = counter + 1
|
counter = counter + 1
|
||||||
filtered_list[counter] = item
|
filtered_list[counter] = item
|
||||||
@ -530,7 +464,73 @@ function craftguide:get_filter_items(data, player)
|
|||||||
data.items = filtered_list
|
data.items = filtered_list
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_item_usages(item)
|
local function init_datas(user, name)
|
||||||
|
datas[name] = {filter = "", pagenum = 1, iX = sfinv_only and 8 or DEFAULT_SIZE}
|
||||||
|
if progressive_mode then
|
||||||
|
get_filter_items(datas[name], user)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function add_custom_recipes(item, recipes)
|
||||||
|
for j = 1, #craftguide.custom_crafts do
|
||||||
|
local craft = craftguide.custom_crafts[j]
|
||||||
|
if craft.output:match("%S*") == item then
|
||||||
|
recipes[#recipes + 1] = {
|
||||||
|
width = craftguide.craft_types[craft.type].width,
|
||||||
|
type = craft.type,
|
||||||
|
items = craft.items,
|
||||||
|
output = craft.output,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return recipes
|
||||||
|
end
|
||||||
|
|
||||||
|
local function get_init_items()
|
||||||
|
local items_list, c = {}, 0
|
||||||
|
local function list(name)
|
||||||
|
c = c + 1
|
||||||
|
items_list[c] = name
|
||||||
|
end
|
||||||
|
|
||||||
|
for name, def in pairs(reg_items) do
|
||||||
|
local is_fuel = get_fueltime(name) > 0
|
||||||
|
if (not (def.groups.not_in_craft_guide == 1 or
|
||||||
|
def.groups.not_in_creative_inventory == 1)) and
|
||||||
|
(get_recipe(name).items or is_fuel) and
|
||||||
|
def.description and def.description ~= "" then
|
||||||
|
list(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #craftguide.custom_crafts do
|
||||||
|
local craft = craftguide.custom_crafts[i]
|
||||||
|
local output = craft.output:match("%S*")
|
||||||
|
local listed
|
||||||
|
|
||||||
|
for j = 1, #items_list do
|
||||||
|
local listed_item = items_list[j]
|
||||||
|
if output == listed_item then
|
||||||
|
listed = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if not listed then
|
||||||
|
list(output)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
sort(items_list)
|
||||||
|
datas.init_items = items_list
|
||||||
|
end
|
||||||
|
|
||||||
|
mt.register_on_mods_loaded(function()
|
||||||
|
get_init_items()
|
||||||
|
end)
|
||||||
|
|
||||||
|
local function get_item_usages(item)
|
||||||
local usages = {}
|
local usages = {}
|
||||||
for name, def in pairs(reg_items) do
|
for name, def in pairs(reg_items) do
|
||||||
if not (def.groups.not_in_craft_guide == 1 or
|
if not (def.groups.not_in_craft_guide == 1 or
|
||||||
@ -591,7 +591,7 @@ local function get_fields(player, ...)
|
|||||||
fields.filter ~= "" then
|
fields.filter ~= "" then
|
||||||
data.filter = fields.filter:lower()
|
data.filter = fields.filter:lower()
|
||||||
data.pagenum = 1
|
data.pagenum = 1
|
||||||
craftguide:get_filter_items(data, player)
|
get_filter_items(data, player)
|
||||||
show_fs(player, player_name)
|
show_fs(player, player_name)
|
||||||
|
|
||||||
elseif fields.prev or fields.next then
|
elseif fields.prev or fields.next then
|
||||||
@ -625,7 +625,7 @@ local function get_fields(player, ...)
|
|||||||
if not next(recipes) and not is_fuel then return end
|
if not next(recipes) and not is_fuel then return end
|
||||||
|
|
||||||
if not data.show_usage and item == data.item and not progressive_mode then
|
if not data.show_usage and item == data.item and not progressive_mode then
|
||||||
data.usages = craftguide:get_item_usages(item)
|
data.usages = get_item_usages(item)
|
||||||
if next(data.usages) then
|
if next(data.usages) then
|
||||||
data.show_usage = true
|
data.show_usage = true
|
||||||
data.rnum = 1
|
data.rnum = 1
|
||||||
@ -635,8 +635,8 @@ local function get_fields(player, ...)
|
|||||||
else
|
else
|
||||||
if progressive_mode then
|
if progressive_mode then
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
local recipes, has_item =
|
local has_item
|
||||||
craftguide:recipe_in_inv(inv, item, recipes)
|
recipes, has_item = recipe_in_inv(inv, item, recipes)
|
||||||
if not has_item then return end
|
if not has_item then return end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -661,7 +661,7 @@ if sfinv_only then
|
|||||||
return sfinv.make_formspec(
|
return sfinv.make_formspec(
|
||||||
player,
|
player,
|
||||||
context,
|
context,
|
||||||
craftguide:get_formspec(player_name)
|
get_formspec(player_name)
|
||||||
)
|
)
|
||||||
end,
|
end,
|
||||||
on_enter = function(self, player, context)
|
on_enter = function(self, player, context)
|
||||||
@ -679,13 +679,13 @@ if sfinv_only then
|
|||||||
else
|
else
|
||||||
mt.register_on_player_receive_fields(get_fields)
|
mt.register_on_player_receive_fields(get_fields)
|
||||||
|
|
||||||
function craftguide:on_use(itemstack, user)
|
local function on_use(itemstack, user)
|
||||||
local player_name = user:get_player_name()
|
local player_name = user:get_player_name()
|
||||||
local data = datas[player_name]
|
local data = datas[player_name]
|
||||||
|
|
||||||
if progressive_mode or not data then
|
if progressive_mode or not data then
|
||||||
init_datas(user, player_name)
|
init_datas(user, player_name)
|
||||||
self:get_formspec(player_name)
|
get_formspec(player_name)
|
||||||
else
|
else
|
||||||
show_formspec(player_name, "craftguide", data.formspec)
|
show_formspec(player_name, "craftguide", data.formspec)
|
||||||
end
|
end
|
||||||
@ -698,7 +698,7 @@ else
|
|||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
groups = {book = 1},
|
groups = {book = 1},
|
||||||
on_use = function(itemstack, user)
|
on_use = function(itemstack, user)
|
||||||
craftguide:on_use(itemstack, user)
|
on_use(itemstack, user)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -723,7 +723,7 @@ else
|
|||||||
meta:set_string("infotext", S("Crafting Guide Sign"))
|
meta:set_string("infotext", S("Crafting Guide Sign"))
|
||||||
end,
|
end,
|
||||||
on_rightclick = function(pos, node, user, itemstack)
|
on_rightclick = function(pos, node, user, itemstack)
|
||||||
craftguide:on_use(itemstack, user)
|
on_use(itemstack, user)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -750,17 +750,17 @@ else
|
|||||||
recipe = "craftguide:sign",
|
recipe = "craftguide:sign",
|
||||||
burntime = 10
|
burntime = 10
|
||||||
})
|
})
|
||||||
end
|
|
||||||
|
|
||||||
if rawget(_G, "sfinv_buttons") then
|
if rawget(_G, "sfinv_buttons") then
|
||||||
sfinv_buttons.register_button("craftguide", {
|
sfinv_buttons.register_button("craftguide", {
|
||||||
title = S("Crafting Guide"),
|
title = S("Crafting Guide"),
|
||||||
tooltip = S("Shows a list of available crafting recipes, cooking recipes and fuels"),
|
tooltip = S("Shows a list of available crafting recipes, cooking recipes and fuels"),
|
||||||
action = function(player)
|
action = function(player)
|
||||||
craftguide:on_use(nil, player)
|
on_use(nil, player)
|
||||||
end,
|
end,
|
||||||
image = "craftguide_book.png",
|
image = "craftguide_book.png",
|
||||||
})
|
})
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if not progressive_mode then
|
if not progressive_mode then
|
||||||
|
Loading…
Reference in New Issue
Block a user