Compare commits

...

17 Commits

Author SHA1 Message Date
0463712cbb Change la barre de progression pendant le chargement du mod
Cette dernière n'était pas bien supportée par tous les terminaux.
2019-12-22 22:06:35 +01:00
1745cc0ba3 Merge branch 'master' of yunohost.local:minetest-mods/craftguide into nalc-1.2-dev 2019-12-22 12:26:18 +01:00
3c3733a226 Minor cleaning 2019-12-17 02:09:40 +01:00
55f919ab8f Minor fix 2019-12-17 01:51:55 +01:00
937b40aae4 Remove recipe from caches after calling clear_craft() 2019-12-17 01:46:22 +01:00
97036d9f9a New formspec style 2019-12-17 01:33:40 +01:00
17a8c5ddd8 Merge branch 'master' of https://github.com/minetest-mods/craftguide 2019-12-09 21:16:47 +01:00
9fb5a93b2b Style 2019-12-09 21:16:41 +01:00
00a79d26e5 Fix comparing items with their aliases (#95) 2019-12-03 13:54:56 +01:00
303aa3ef91 Style cleaning 2019-11-27 13:36:06 +01:00
89059f20b6 Reorder formspec elements 2019-11-10 16:11:29 +01:00
0d2af529ef Add forgotten files 2019-11-05 18:34:26 +01:00
7a7bb8dc51 Remove brackets 2019-11-03 19:16:29 +01:00
4241c89c17 http_post_data -> export_url 2019-11-01 02:04:35 +01:00
70d38d1c63 Minor cleaning 2019-11-01 01:56:35 +01:00
66fc47a1c3 Merge branch 'master' into nalc-1.2 2019-05-06 01:51:15 +02:00
d6542a2697 Ajoute message de chargement du mod dans le journal "action" 2018-12-24 01:25:12 +01:00
6 changed files with 148 additions and 126 deletions

2
API.md
View File

@ -204,7 +204,7 @@ You can add a stereotype like so:
craftguide.group_stereotypes.radioactive = "mod:item"
```
#### `craftguide.http_post_data`
#### `craftguide.export_url`
If set, the mod will export all the cached recipes and usages in a JSON format
to the given URL (HTTP support is required¹).

272
init.lua
View File

@ -57,6 +57,10 @@ local S = CORE_VERSION >= 500 and core.get_translator("craftguide") or
end)
end
local ES = function(...)
return ESC(S(...))
end
local maxn, sort, concat, copy, insert, remove =
table.maxn, table.sort, table.concat, table.copy,
table.insert, table.remove
@ -108,6 +112,17 @@ local FMT = {
arrow = "image_button[%f,%f;0.8,0.8;%s;%s;;;false;%s]",
}
local function mul_elem(elem, n)
local fstr, elems = "", {}
for i = 1, n do
fstr = fstr .. "%s"
elems[i] = elem
end
return fmt(fstr, unpack(elems))
end
craftguide.group_stereotypes = {
dye = "dye:white",
wool = "wool:white",
@ -123,7 +138,7 @@ local function err(str)
end
local function msg(name, str)
return chat_send(name, fmt("[craftguide] %s", clr("#FFFF00", str)))
return chat_send(name, fmt("[craftguide] %s", clr("#f00", str)))
end
local function is_str(x)
@ -146,7 +161,7 @@ local function is_group(item)
return sub(item, 1, 6) == "group:"
end
local function clean_item(item)
local function clean_name(item)
if sub(item, 1, 1) == ":" then
item = sub(item, 2)
end
@ -265,7 +280,7 @@ local craft_types = {}
function craftguide.register_craft_type(name, def)
if not true_str(name) then
return err("craftguide.register_craft_type(): name missing")
return err"craftguide.register_craft_type(): name missing"
end
if not is_str(def.description) then
@ -284,8 +299,8 @@ function craftguide.register_craft(def)
if true_str(def.url) then
if not http then
return err("No HTTP support for this mod. " ..
"Add it to the `secure.http_mods` or `secure.trusted_mods` setting.")
return err"No HTTP support for this mod. " ..
"Add it to the `secure.http_mods` or `secure.trusted_mods` setting."
end
http.fetch({url = def.url}, function(result)
@ -301,7 +316,7 @@ function craftguide.register_craft(def)
end
if not is_table(def) or not next(def) then
return err("craftguide.register_craft(): craft definition missing")
return err"craftguide.register_craft(): craft definition missing"
end
if #def > 1 then
@ -317,7 +332,7 @@ function craftguide.register_craft(def)
end
if not true_str(def.output) then
return err("craftguide.register_craft(): output missing")
return err"craftguide.register_craft(): output missing"
end
if not is_table(def.items) then
@ -387,9 +402,9 @@ local recipe_filters = {}
function craftguide.add_recipe_filter(name, f)
if not true_str(name) then
return err("craftguide.add_recipe_filter(): name missing")
return err"craftguide.add_recipe_filter(): name missing"
elseif not is_func(f) then
return err("craftguide.add_recipe_filter(): function missing")
return err"craftguide.add_recipe_filter(): function missing"
end
recipe_filters[name] = f
@ -397,9 +412,9 @@ end
function craftguide.set_recipe_filter(name, f)
if not is_str(name) then
return err("craftguide.set_recipe_filter(): name missing")
return err"craftguide.set_recipe_filter(): name missing"
elseif not is_func(f) then
return err("craftguide.set_recipe_filter(): function missing")
return err"craftguide.set_recipe_filter(): function missing"
end
recipe_filters = {[name] = f}
@ -425,9 +440,9 @@ local search_filters = {}
function craftguide.add_search_filter(name, f)
if not true_str(name) then
return err("craftguide.add_search_filter(): name missing")
return err"craftguide.add_search_filter(): name missing"
elseif not is_func(f) then
return err("craftguide.add_search_filter(): function missing")
return err"craftguide.add_search_filter(): function missing"
end
search_filters[name] = f
@ -455,8 +470,10 @@ local function extract_groups(str)
end
local function item_in_recipe(item, recipe)
local clean_item = reg_aliases[item] or item
for _, recipe_item in pairs(recipe.items) do
if recipe_item == item then
local clean_recipe_item = reg_aliases[recipe_item] or recipe_item
if clean_recipe_item == clean_item then
return true
end
end
@ -564,8 +581,9 @@ local function cache_recipes(output)
end
local function get_recipes(item, data, player)
local recipes = recipes_cache[item]
local usages = usages_cache[item]
local clean_item = reg_aliases[item] or item
local recipes = recipes_cache[clean_item]
local usages = usages_cache[clean_item]
if recipes then
recipes = apply_recipe_filters(recipes, player)
@ -637,7 +655,7 @@ local function get_tooltip(name, info)
for i = 1, #info.groups do
c = c + 1
groupstr[c] = clr("yellow", info.groups[i])
groupstr[c] = clr("#ff0", info.groups[i])
end
groupstr = concat(groupstr, ", ")
@ -651,15 +669,15 @@ local function get_tooltip(name, info)
end
if info.cooktime then
tooltip = add(S("Cooking time: @1", clr("yellow", info.cooktime)))
tooltip = add(S("Cooking time: @1", clr("#ff0", info.cooktime)))
end
if info.burntime then
tooltip = add(S("Burning time: @1", clr("yellow", info.burntime)))
tooltip = add(S("Burning time: @1", clr("#ff0", info.burntime)))
end
if info.replace then
local desc = clr("yellow", get_desc(info.replace))
local desc = clr("#ff0", get_desc(info.replace))
if info.cooktime then
tooltip = add(S("Replaced by @1 on smelting", desc))
@ -671,12 +689,12 @@ local function get_tooltip(name, info)
end
if info.repair then
tooltip = add(S("Repairable by step of @1", clr("yellow", toolrepair .. "%")))
tooltip = add(S("Repairable by step of @1", clr("#ff0", toolrepair .. "%")))
end
if info.rarity then
local chance = (1 / info.rarity) * 100
tooltip = add(S("@1 of chance to drop", clr("yellow", chance .. "%")))
tooltip = add(S("@1 of chance to drop", clr("#ff0", chance .. "%")))
end
return fmt("tooltip[%s;%s]", name, ESC(tooltip))
@ -699,7 +717,7 @@ local function get_output_fs(fs, L)
fs[#fs + 1] = fmt(FMT.image, pos_x, pos_y + L.spacing, 0.5, 0.5, icon)
local tooltip = custom_recipe and custom_recipe.description or
L.shapeless and S("Shapeless") or S("Cooking")
L.shapeless and S"Shapeless" or S"Cooking"
if CORE_VERSION >= 500 then
fs[#fs + 1] = fmt(FMT.tooltip, pos_x, pos_y + L.spacing, 0.5, 0.5, ESC(tooltip))
@ -719,19 +737,19 @@ local function get_output_fs(fs, L)
1.1, 1.1, PNG.fire)
else
local item = L.recipe.output
item = clean_item(item)
item = clean_name(item)
local name = match(item, "%S*")
fs[#fs + 1] = fmt(FMT.item_image_button,
output_X, YOFFSET + (sfinv_only and 0.7 or 0) + L.spacing,
1.1, 1.1, item, name, "")
if CORE_VERSION >= 510 then
fs[#fs + 1] = fmt(FMT.image,
output_X, YOFFSET + (sfinv_only and 0.7 or 0) + L.spacing,
1.1, 1.1, PNG.selected)
end
fs[#fs + 1] = fmt(FMT.item_image_button,
output_X, YOFFSET + (sfinv_only and 0.7 or 0) + L.spacing,
1.1, 1.1, item, name, "")
local infos = {
unknown = not reg_items[name] or nil,
burntime = fuel_cache[name],
@ -776,7 +794,7 @@ local function get_grid_fs(fs, rcp, spacing)
fs[#fs + 1] = fmt(FMT.label,
XOFFSET + (sfinv_only and -1.5 or -1.6),
YOFFSET + (sfinv_only and 0.5 or spacing),
ESC(S("Recipe's too big to be displayed (@1x@2)", width, rows)))
ES("Recipe's too big to be displayed (@1x@2)", width, rows))
return concat(fs)
end
@ -789,7 +807,7 @@ local function get_grid_fs(fs, rcp, spacing)
for i = 1, width * rows do
local item = rcp.items[i] or ""
item = clean_item(item)
item = clean_name(item)
local name = match(item, "%S*")
local X = ceil((i - 1) % width - width) + XOFFSET
@ -834,6 +852,12 @@ local function get_grid_fs(fs, rcp, spacing)
end
end
if CORE_VERSION >= 510 and not large_recipe then
fs[#fs + 1] = fmt(FMT.image,
X, Y + (sfinv_only and 0.7 or 0),
btn_size, btn_size, PNG.selected)
end
fs[#fs + 1] = fmt(FMT.item_image_button,
X, Y + (sfinv_only and 0.7 or 0),
btn_size, btn_size, item, item, ESC(label))
@ -849,12 +873,6 @@ local function get_grid_fs(fs, rcp, spacing)
if next(infos) then
fs[#fs + 1] = get_tooltip(item, infos)
end
if CORE_VERSION >= 510 and not large_recipe then
fs[#fs + 1] = fmt(FMT.image,
X, Y + (sfinv_only and 0.7 or 0),
btn_size, btn_size, PNG.selected)
end
end
if large_recipe then
@ -877,8 +895,7 @@ local function get_panels(data, fs)
local x = 0.33
if sfinv_only then
panels = data.show_usages and
{usages = data.usages} or {recipes = data.recipes}
panels = data.show_usages and {usages = data.usages} or {recipes = data.recipes}
end
for k, v in pairs(panels) do
@ -895,35 +912,33 @@ local function get_panels(data, fs)
local rn = #v
local _rn = tostring(rn)
local xof_u = tostring(data.unum) .. _rn
local xof_r = tostring(data.rnum) .. _rn
xof_u = max(-0.3, -((#xof_u - 3) * 0.15))
xof_r = max(-0.3, -((#xof_r - 3) * 0.15))
local xu = tostring(data.unum) .. _rn
local xr = tostring(data.rnum) .. _rn
xu = max(-0.3, -((#xu - 3) * 0.15))
xr = max(-0.3, -((#xr - 3) * 0.15))
local is_recipe = k == "recipes"
local btn_lab
local lbl
if not sfinv_only and rn == 0 then
btn_lab = clr("red", is_recipe and
ESC(S("No recipes")) or ESC(S("No usages")))
lbl = clr("#f00", is_recipe and ES"No recipes" or ES"No usages")
elseif (not sfinv_only and is_recipe) or
(sfinv_only and not data.show_usages) then
btn_lab = ESC(S("Recipe @1 of @2", data.rnum, rn))
lbl = ES("Recipe @1 of @2", data.rnum, rn)
elseif not sfinv_only or (sfinv_only and data.show_usages) then
btn_lab = ESC(S("Usage @1 of @2", data.unum, rn))
lbl = ES("Usage @1 of @2", data.unum, rn)
elseif sfinv_only then
btn_lab = data.show_usages and
ESC(S("Usage @1 of @2", data.unum, rn)) or
ESC(S("Recipe @1 of @2", data.rnum, rn))
lbl = data.show_usages and
ES("Usage @1 of @2", data.unum, rn) or
ES("Recipe @1 of @2", data.rnum, rn)
end
fs[#fs + 1] = fmt(FMT.label,
XOFFSET + (sfinv_only and 2.3 or 1.6) + (is_recipe and xof_r or xof_u),
YOFFSET + (sfinv_only and 3.35 or 1.5 + spacing),
btn_lab)
XOFFSET + (sfinv_only and 2.3 or 1.6) + (is_recipe and xr or xu),
YOFFSET + (sfinv_only and 3.35 or 1.5 + spacing), lbl)
if rn > 1 then
local btn_suffix = is_recipe and "recipe" or "usage"
@ -933,20 +948,13 @@ local function get_panels(data, fs)
local y_arrow = YOFFSET + (sfinv_only and 3.25 or 1.4 + spacing)
if CORE_VERSION >= 520 then
fs[#fs + 1] = fmt([[
style[%s;border=false;bgimg=%s;bgimg_hovered=%s]
style[%s;border=false;bgimg=%s;bgimg_hovered=%s]
]],
prev_name, PNG.prev, PNG.prev_hover,
next_name, PNG.next, PNG.next_hover)
fs[#fs + 1] = fmt(FMT.button .. FMT.button,
x_arrow + (is_recipe and xof_r or xof_u),
y_arrow, 0.8, 0.8, prev_name, "",
x_arrow + 1.8, y_arrow, 0.8, 0.8, next_name, "")
fs[#fs + 1] = fmt(mul_elem(FMT.arrow, 2),
x_arrow + (is_recipe and xr or xu), y_arrow,
PNG.prev, prev_name, "",
x_arrow + 1.8, y_arrow, PNG.next, next_name, "")
else
fs[#fs + 1] = fmt(FMT.arrow .. FMT.arrow,
x_arrow + (is_recipe and xof_r or xof_u),
fs[#fs + 1] = fmt(mul_elem(FMT.arrow, 2),
x_arrow + (is_recipe and xr or xu),
y_arrow, PNG.prev, prev_name, PNG.prev_hover,
x_arrow + 1.8, y_arrow, PNG.next, next_name, PNG.next_hover)
end
@ -961,8 +969,6 @@ end
local function make_formspec(name)
local data = pdata[name]
data.pagemax = max(1, ceil(#data.items / IPP))
local fs = {}
if not sfinv_only then
@ -970,9 +976,10 @@ local function make_formspec(name)
size[%f,%f]
no_prepend[]
bgcolor[#0000]
style_type[image_button;border=false]
style_type[item_image_button;border=false;bgimg_hovered=%s]
]],
ROWS + (data.query_item and 6.7 or 0) - 1.2,
LINES - 0.3)
ROWS + (data.query_item and 6.7 or 0) - 1.2, LINES - 0.3, PNG.selected)
fs[#fs + 1] = CORE_VERSION >= 510 and
fmt("background9[-0.15,-0.2;%f,%f;%s;false;%d]",
@ -982,54 +989,55 @@ local function make_formspec(name)
end
fs[#fs + 1] = fmt([[
style_type[item_image_button;border=false]
field[0.25,0.2;%f,1;filter;;%s]
field_close_on_enter[filter;false]
]],
sfinv_only and 2.76 or 2.72, ESC(data.filter))
]],
sfinv_only and 2.76 or 2.72, ESC(data.filter))
if CORE_VERSION >= 520 then
fs[#fs + 1] = fmt([[
style[search;border=false;bgimg=%s;bgimg_hovered=%s]
style[clear;border=false;bgimg=%s;bgimg_hovered=%s]
style[prev_page;border=false;bgimg=%s;bgimg_hovered=%s]
style[next_page;border=false;bgimg=%s;bgimg_hovered=%s]
style[search;fgimg=%s;fgimg_hovered=%s]
style[clear;fgimg=%s;fgimg_hovered=%s]
style[prev_page;fgimg=%s;fgimg_hovered=%s]
style[next_page;fgimg=%s;fgimg_hovered=%s]
]],
PNG.search, PNG.search_hover,
PNG.clear, PNG.clear_hover,
PNG.prev, PNG.prev_hover,
PNG.next, PNG.next_hover)
PNG.clear, PNG.clear_hover,
PNG.prev, PNG.prev_hover,
PNG.next, PNG.next_hover)
fs[#fs + 1] = fmt(FMT.button .. FMT.button .. FMT.button .. FMT.button,
sfinv_only and 2.6 or 2.54, -0.12, 0.85, 1, "search", "",
sfinv_only and 3.3 or 3.25, -0.12, 0.85, 1, "clear", "",
sfinv_only and 5.45 or (ROWS * 6.83) / 11, -0.12, 0.85, 1, "prev_page", "",
sfinv_only and 7.2 or (ROWS * 8.75) / 11, -0.12, 0.85, 1, "next_page", "")
fs[#fs + 1] = fmt(mul_elem(FMT.image_button, 4),
sfinv_only and 2.6 or 2.54, -0.06, 0.85, 0.85, "", "search", "",
sfinv_only and 3.3 or 3.25, -0.06, 0.85, 0.85, "", "clear", "",
sfinv_only and 5.45 or (ROWS * 6.83) / 11, -0.06, 0.85, 0.85, "", "prev_page", "",
sfinv_only and 7.2 or (ROWS * 8.75) / 11, -0.06, 0.85, 0.85, "", "next_page", "")
else
fs[#fs + 1] = fmt([[
image_button[%f,-0.12;0.85,1;%s;search;;;false;%s]
image_button[%f,-0.12;0.85,1;%s;clear;;;false;%s]
image_button[%f,-0.06;0.85,0.85;%s;search;;;false;%s]
image_button[%f,-0.06;0.85,0.85;%s;clear;;;false;%s]
]],
sfinv_only and 2.6 or 2.54, PNG.search, PNG.search_hover,
sfinv_only and 3.3 or 3.25, PNG.clear, PNG.clear_hover)
fs[#fs + 1] = fmt(FMT.arrow .. FMT.arrow,
sfinv_only and 5.45 or (ROWS * 6.83) / 11,
-0.05, PNG.prev, "prev_page", PNG.prev,
sfinv_only and 7.2 or (ROWS * 8.75) / 11,
-0.05, PNG.next, "next_page", PNG.next)
fs[#fs + 1] = fmt(mul_elem(FMT.arrow, 2),
sfinv_only and 5.45 or (ROWS * 6.83) / 11, -0.05,
PNG.prev, "prev_page", PNG.prev,
sfinv_only and 7.2 or (ROWS * 8.75) / 11, -0.05,
PNG.next, "next_page", PNG.next)
end
data.pagemax = max(1, ceil(#data.items / IPP))
fs[#fs + 1] = fmt("label[%f,%f;%s / %u]",
sfinv_only and 6.35 or (ROWS * 7.85) / 11,
0.06, clr("yellow", data.pagenum), data.pagemax)
0.06, clr("#ff0", data.pagenum), data.pagemax)
if #data.items == 0 then
local no_item = S("No item to show")
local no_item = S"No item to show"
local pos = ROWS / 3
if next(recipe_filters) and #init_items > 0 and data.filter == "" then
no_item = S("Collect items to reveal more recipes")
no_item = S"Collect items to reveal more recipes"
pos = pos - 1
end
@ -1045,17 +1053,17 @@ local function make_formspec(name)
local X = i % ROWS
local Y = (i % IPP - X) / ROWS + 1
fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]",
X - (X * (sfinv_only and 0.12 or 0.14)) - 0.05,
Y - (Y * 0.1) - 0.1,
1, 1, item, item)
if CORE_VERSION >= 510 and data.query_item == item then
fs[#fs + 1] = fmt(FMT.image,
X - (X * (sfinv_only and 0.12 or 0.14)) - 0.05,
Y - (Y * 0.1) - 0.1,
1, 1, PNG.selected)
end
fs[#fs + 1] = fmt("item_image_button[%f,%f;%f,%f;%s;%s_inv;]",
X - (X * (sfinv_only and 0.12 or 0.14)) - 0.05,
Y - (Y * 0.1) - 0.1,
1, 1, item, item)
end
if (data.recipes and #data.recipes > 0) or (data.usages and #data.usages > 0) then
@ -1074,12 +1082,12 @@ local show_fs = function(player, name)
end
craftguide.register_craft_type("digging", {
description = ESC(S("Digging")),
description = ES"Digging",
icon = "default_tool_steelpick.png",
})
craftguide.register_craft_type("digging_chance", {
description = ESC(S("Digging Chance")),
description = ES"Digging Chance",
icon = "default_tool_mesepick.png",
})
@ -1244,6 +1252,20 @@ core.register_craft = function(def)
end
end
local old_clear_craft = core.clear_craft
core.clear_craft = function(def)
old_clear_craft(def)
if true_str(def) then
recipes_cache[def] = nil
fuel_cache[def] = nil
elseif is_table(def) then
return -- TODO
end
end
local function handle_drops_table(name, drop)
-- Code borrowed and modified from unified_inventory
-- https://github.com/minetest-mods/unified_inventory/blob/master/api.lua
@ -1339,7 +1361,7 @@ local function handle_aliases(hash)
recipes_cache[newname] = {}
end
local is_similar
local similar
for i = 1, #recipes_cache[oldname] do
local rcp_old = recipes_cache[oldname][i]
@ -1350,12 +1372,12 @@ local function handle_aliases(hash)
rcp_new.method = nil
if table_eq(rcp_old, rcp_new) then
is_similar = true
similar = true
break
end
end
if not is_similar then
if not similar then
insert(recipes_cache[newname], rcp_old)
end
end
@ -1393,21 +1415,17 @@ local function get_init_items()
last_str = str
end
local full_char, empty_char = "", ""
local full_char, empty_char = "o", "."
for name, def in pairs(reg_items) do
ic = ic + 1
local percent, bar, len = (ic * 100) / it, "", 20
for i = 1, len do
if i <= percent / (100 / len) then
bar = bar .. full_char
else
bar = bar .. empty_char
end
bar = bar .. (i <= percent / (100 / len) and full_char or empty_char)
end
iop(fmt("[craftguide] Caching data %s (%u%%)\r", bar, percent))
iop(fmt("[craftguide] Caching data %s %u%%\n", bar, percent))
if show_item(def) then
if not fuel_cache[name] then
@ -1431,7 +1449,7 @@ local function get_init_items()
handle_aliases(hash)
sort(init_items)
if http and true_str(craftguide.http_post_data) then
if http and true_str(craftguide.export_url) then
local post_data = {
recipes = recipes_cache,
usages = usages_cache,
@ -1439,7 +1457,7 @@ local function get_init_items()
}
http.fetch_async({
url = craftguide.http_post_data,
url = craftguide.export_url,
post_data = write_json(post_data),
})
end
@ -1534,6 +1552,8 @@ local function fields(player, _f)
item = sub(item, 1, -5)
end
item = reg_aliases[item] or item
if sfinv_only then
if item ~= data.query_item then
data.show_usages = nil
@ -1557,7 +1577,7 @@ end
if sfinv_only then
sfinv.register_page("craftguide:craftguide", {
title = S("Craft Guide"),
title = S"Craft Guide",
get = function(self, player, context)
local name = player:get_player_name()
@ -1600,7 +1620,7 @@ else
end
core.register_craftitem("craftguide:book", {
description = S("Crafting Guide"),
description = S"Crafting Guide",
inventory_image = PNG.book,
wield_image = PNG.book,
stack_max = 1,
@ -1611,7 +1631,7 @@ else
})
core.register_node("craftguide:sign", {
description = S("Crafting Guide Sign"),
description = S"Crafting Guide Sign",
drawtype = "nodebox",
tiles = {PNG.sign},
inventory_image = PNG.sign,
@ -1663,8 +1683,8 @@ else
if rawget(_G, "sfinv_buttons") then
sfinv_buttons.register_button("craftguide", {
title = S("Crafting Guide"),
tooltip = S("Shows a list of available crafting recipes, cooking recipes and fuels"),
title = S"Crafting Guide",
tooltip = S"Shows a list of available crafting recipes, cooking recipes and fuels",
image = PNG.book,
action = function(player)
on_use(player)
@ -1895,7 +1915,7 @@ if progressive_mode then
hud_elem_type = "text",
position = {x = 0.84, y = 1.04},
alignment = {x = 1, y = 1},
number = 0xFFFFFF,
number = 0xfff,
text = "",
}),
}
@ -1946,7 +1966,7 @@ end)
function craftguide.show(name, item, show_usages)
if not true_str(name)then
return err("craftguide.show(): player name missing")
return err"craftguide.show(): player name missing"
end
local data = pdata[name]
@ -1961,12 +1981,12 @@ function craftguide.show(name, item, show_usages)
if not recipes and not usages then
if not recipes_cache[item] and not usages_cache[item] then
return false, msg(name, fmt("%s: %s",
S("No recipe or usage for this item"),
S"No recipe or usage for this item",
get_desc(item)))
end
return false, msg(name, fmt("%s: %s",
S("You don't know a recipe or usage for this item"),
S"You don't know a recipe or usage for this item",
get_desc(item)))
end
@ -1982,7 +2002,7 @@ function craftguide.show(name, item, show_usages)
end
register_command("craft", {
description = S("Show recipe(s) of the pointed node"),
description = S"Show recipe(s) of the pointed node",
func = function(name)
local player = get_player_by_name(name)
local dir = player:get_look_dir()
@ -2002,9 +2022,11 @@ register_command("craft", {
end
if not node_name then
return false, msg(name, S("No node pointed"))
return false, msg(name, S"No node pointed")
end
return true, craftguide.show(name, node_name)
end,
})
minetest.log("action", "[craftguide] loaded.")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB