parent
7f2e6d7ee3
commit
1fb0b53e94
|
@ -1,7 +1,5 @@
|
||||||
Craftguide
|
Craftguide
|
||||||
=====================================================================
|
=====================================================================
|
||||||
Main: killbith
|
Main: killbith
|
||||||
Lisc: GPL v3
|
Lisc: MIT
|
||||||
Text: WTFPL
|
|
||||||
By Gambit
|
|
||||||
Link: https://github.com/minetest-mods/craftguide
|
Link: https://github.com/minetest-mods/craftguide
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
1,14c1,7
|
1,14c1,5
|
||||||
< ## ![Preview1](http://i.imgur.com/fIPNYkb.png) Crafting Guide ##
|
< ## ![Preview1](http://i.imgur.com/fIPNYkb.png) Crafting Guide ##
|
||||||
<
|
<
|
||||||
< #### A Crafting Guide for Minetest that doesn't suck. ####
|
< #### A Crafting Guide for Minetest that doesn't suck. ####
|
||||||
<
|
<
|
||||||
< #### `craftguide` is simply the most comprehensive mod of his category, with the cleanest code. ####
|
< #### `craftguide` is the most comprehensive mod of its category. ####
|
||||||
< #### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. ####
|
< #### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. ####
|
||||||
<
|
<
|
||||||
< #### This crafting guide is usable with a blue book named *"Crafting Guide"*. ####
|
< #### This crafting guide is usable with a blue book named *"Crafting Guide"*. ####
|
||||||
|
@ -17,7 +17,5 @@
|
||||||
> Craftguide
|
> Craftguide
|
||||||
> =====================================================================
|
> =====================================================================
|
||||||
> Main: killbith
|
> Main: killbith
|
||||||
> Lisc: GPL v3
|
> Lisc: MIT
|
||||||
> Text: WTFPL
|
|
||||||
> By Gambit
|
|
||||||
> Link: https://github.com/minetest-mods/craftguide
|
> Link: https://github.com/minetest-mods/craftguide
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
Craftguide
|
Craftguide
|
||||||
=====================================================================
|
=====================================================================
|
||||||
Main: killbith
|
Main: killbith
|
||||||
Lisc: GPL v3
|
Lisc: MIT
|
||||||
Text: WTFPL
|
|
||||||
By Gambit
|
|
||||||
Link: https://github.com/minetest-mods/craftguide
|
Link: https://github.com/minetest-mods/craftguide
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
1,14c1,7
|
1,14c1,5
|
||||||
< ## ![Preview1](http://i.imgur.com/fIPNYkb.png) Crafting Guide ##
|
< ## ![Preview1](http://i.imgur.com/fIPNYkb.png) Crafting Guide ##
|
||||||
<
|
<
|
||||||
< #### A Crafting Guide for Minetest that doesn't suck. ####
|
< #### A Crafting Guide for Minetest that doesn't suck. ####
|
||||||
<
|
<
|
||||||
< #### `craftguide` is simply the most comprehensive mod of his category, with the cleanest code. ####
|
< #### `craftguide` is the most comprehensive mod of its category. ####
|
||||||
< #### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. ####
|
< #### Consult the [Minetest Wiki](http://wiki.minetest.net/Crafting_guide) for more details and comparisons. ####
|
||||||
<
|
<
|
||||||
< #### This crafting guide is usable with a blue book named *"Crafting Guide"*. ####
|
< #### This crafting guide is usable with a blue book named *"Crafting Guide"*. ####
|
||||||
|
@ -17,7 +17,5 @@
|
||||||
> Craftguide
|
> Craftguide
|
||||||
> =====================================================================
|
> =====================================================================
|
||||||
> Main: killbith
|
> Main: killbith
|
||||||
> Lisc: GPL v3
|
> Lisc: MIT
|
||||||
> Text: WTFPL
|
|
||||||
> By Gambit
|
|
||||||
> Link: https://github.com/minetest-mods/craftguide
|
> Link: https://github.com/minetest-mods/craftguide
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
sfinv_buttons?
|
sfinv_buttons?
|
||||||
|
intllib?
|
||||||
|
|
|
@ -4,12 +4,22 @@ local get_recipe, get_recipes = mt.get_craft_recipe, mt.get_all_craft_recipes
|
||||||
local get_result, show_formspec = mt.get_craft_result, mt.show_formspec
|
local get_result, show_formspec = mt.get_craft_result, mt.show_formspec
|
||||||
local reg_items = mt.registered_items
|
local reg_items = mt.registered_items
|
||||||
|
|
||||||
|
craftguide.path = minetest.get_modpath("craftguide")
|
||||||
|
|
||||||
|
-- Intllib
|
||||||
|
local S = dofile(craftguide.path .. "/intllib.lua")
|
||||||
|
craftguide.intllib = S
|
||||||
|
|
||||||
-- Lua 5.3 removed `table.maxn`, use this alternative in case of breakage:
|
-- Lua 5.3 removed `table.maxn`, use this alternative in case of breakage:
|
||||||
-- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1
|
-- https://github.com/kilbith/xdecor/blob/master/handlers/helpers.lua#L1
|
||||||
local remove, maxn, sort = table.remove, table.maxn, table.sort
|
local remove, maxn, sort = table.remove, table.maxn, table.sort
|
||||||
local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil
|
local min, max, floor, ceil = math.min, math.max, math.floor, math.ceil
|
||||||
|
|
||||||
local DEFAULT_SIZE, MIN_LIMIT, MAX_LIMIT = 10, 9, 12
|
local DEFAULT_SIZE = 10
|
||||||
|
local MIN_LIMIT, MAX_LIMIT = 9, 12
|
||||||
|
DEFAULT_SIZE = min(MAX_LIMIT, max(MIN_LIMIT, DEFAULT_SIZE))
|
||||||
|
|
||||||
|
local GRID_LIMIT = 5
|
||||||
|
|
||||||
local group_stereotypes = {
|
local group_stereotypes = {
|
||||||
wool = "wool:white",
|
wool = "wool:white",
|
||||||
|
@ -64,36 +74,40 @@ function craftguide:get_tooltip(item, recipe_type, cooktime, groups)
|
||||||
item_desc = reg_items[item].description
|
item_desc = reg_items[item].description
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
return tooltip .. "Unknown Item (" .. item .. ")]"
|
return tooltip .. S("Unknown Item (@1)", item) .. "]"
|
||||||
end
|
end
|
||||||
|
|
||||||
if groups then
|
if groups then
|
||||||
local groupstr = "Any item belonging to the "
|
local groupstr = ""
|
||||||
for i = 1, #groups do
|
for i = 1, #groups do
|
||||||
groupstr = groupstr .. colorize(groups[i]) ..
|
groupstr = groupstr ..
|
||||||
(groups[i + 1] and " and " or "")
|
colorize(groups[i]) .. (groups[i + 1] and ", " or "")
|
||||||
end
|
end
|
||||||
tooltip = tooltip .. groupstr .. " group(s)"
|
|
||||||
|
tooltip = tooltip .. S("Any item belonging to the group(s)") .. ": " .. groupstr
|
||||||
end
|
end
|
||||||
|
|
||||||
if recipe_type == "cooking" then
|
if recipe_type == "cooking" then
|
||||||
tooltip = tooltip .. item_desc .. "\nCooking time: " .. colorize(cooktime)
|
tooltip = tooltip .. item_desc .. "\n"
|
||||||
|
.. S("Cooking time") .. ": " .. colorize(cooktime)
|
||||||
end
|
end
|
||||||
|
|
||||||
if fueltime > 0 then
|
if fueltime > 0 then
|
||||||
tooltip = tooltip .. item_desc .. "\nBurning time: " .. colorize(fueltime)
|
tooltip = tooltip .. item_desc .. "\n"
|
||||||
|
.. S("Burning time") .. ": " .. colorize(fueltime)
|
||||||
end
|
end
|
||||||
|
|
||||||
return has_extras and tooltip .. "]" or ""
|
return has_extras and tooltip .. "]" or ""
|
||||||
end
|
end
|
||||||
|
|
||||||
function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes)
|
function craftguide:get_recipe(iY, xoffset, tooltip, item, 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 ..
|
||||||
"button[0," .. (iY + 3.3) .. ";2,1;alternate;Alternate]" ..
|
"button[0," .. (iY + 3.3) .. ";2,1;alternate;" .. S("Alternate") .. "]" ..
|
||||||
"label[0," .. (iY + 2.8) .. ";Recipe " ..
|
"label[0," .. (iY + 2.8) .. ";" ..
|
||||||
recipe_num .. " of " .. recipes_total .. "]"
|
(show_usage and S("Usage") or S("Recipe")) .. " " ..
|
||||||
|
S("@1 of @2", recipe_num, recipes_total) .. "]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local recipe_type = recipes[recipe_num].type
|
local recipe_type = recipes[recipe_num].type
|
||||||
|
@ -104,7 +118,7 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes)
|
||||||
local icon = recipe_type == "cooking" and "furnace" or "shapeless"
|
local icon = recipe_type == "cooking" and "furnace" or "shapeless"
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"image[" .. (xoffset - 0.8) .. "," .. (iY + 1.7) ..
|
"image[" .. (xoffset - 0.8) .. "," .. (iY + 1.7) ..
|
||||||
".5;0.5,0.5;craftguide_" .. icon .. ".png]"
|
";0.5,0.5;craftguide_" .. icon .. ".png]"
|
||||||
end
|
end
|
||||||
|
|
||||||
if width == 0 then
|
if width == 0 then
|
||||||
|
@ -112,20 +126,18 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes)
|
||||||
end
|
end
|
||||||
|
|
||||||
local rows = ceil(maxn(items) / width)
|
local rows = ceil(maxn(items) / width)
|
||||||
local btn_size, craftgrid_limit = 1, 5
|
|
||||||
|
|
||||||
if recipe_type == "normal" and
|
if recipe_type == "normal" and (width > GRID_LIMIT or rows > GRID_LIMIT) then
|
||||||
width > craftgrid_limit or rows > craftgrid_limit then
|
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"label[" .. xoffset .. "," .. (iY + 2) ..
|
"label[" .. xoffset .. "," .. (iY + 2) .. ";" ..
|
||||||
";Recipe is too big to\nbe displayed (" ..
|
S("Recipe is too big to\nbe displayed (@1x@2)", width, rows) .. "]"
|
||||||
width .. "x" .. rows .. ")]"
|
|
||||||
else
|
else
|
||||||
|
local btn_size = 1
|
||||||
for i, v in pairs(items) do
|
for i, v in pairs(items) do
|
||||||
local X = (i - 1) % width + xoffset
|
local X = (i - 1) % width + xoffset
|
||||||
local Y = ceil(i / width + (iY + 2) - min(2, rows))
|
local Y = ceil(i / width + (iY + 2) - min(2, rows))
|
||||||
|
|
||||||
if recipe_type == "normal" and width > 3 or rows > 3 then
|
if recipe_type == "normal" and (width > 3 or rows > 3) then
|
||||||
btn_size = width > 3 and 3 / width or 3 / rows
|
btn_size = width > 3 and 3 / width or 3 / rows
|
||||||
X = btn_size * (i % width) + xoffset
|
X = btn_size * (i % width) + xoffset
|
||||||
Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows)
|
Y = btn_size * floor((i - 1) / width) + (iY + 3) - min(2, rows)
|
||||||
|
@ -146,7 +158,7 @@ function craftguide:get_recipe(iY, xoffset, tooltip, item, recipe_num, recipes)
|
||||||
local output = recipes[recipe_num].output
|
local output = recipes[recipe_num].output
|
||||||
return formspec ..
|
return formspec ..
|
||||||
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
||||||
".12;0.9,0.7;craftguide_arrow.png]" ..
|
";0.9,0.7;craftguide_arrow.png]" ..
|
||||||
"item_image_button[" .. (xoffset - 2) .. "," .. (iY + 2.2) .. ";1,1;" ..
|
"item_image_button[" .. (xoffset - 2) .. "," .. (iY + 2.2) .. ";1,1;" ..
|
||||||
output .. ";" .. item .. ";]" .. tooltip
|
output .. ";" .. item .. ";]" .. tooltip
|
||||||
end
|
end
|
||||||
|
@ -166,18 +178,21 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||||
background[1,1;1,1;craftguide_bg.png;true]
|
background[1,1;1,1;craftguide_bg.png;true]
|
||||||
button[2.4,0.23;0.8,0.5;search;?]
|
button[2.4,0.23;0.8,0.5;search;?]
|
||||||
button[3.05,0.23;0.8,0.5;clear;X]
|
button[3.05,0.23;0.8,0.5;clear;X]
|
||||||
tooltip[search;Search]
|
field_close_on_enter[filter;false]
|
||||||
tooltip[clear;Reset]
|
]] ..
|
||||||
tooltip[size_inc;Increase window size]
|
"tooltip[search;" .. S("Search") .. "]" ..
|
||||||
tooltip[size_dec;Decrease window size]
|
"tooltip[clear;" .. S("Reset") .. "]" ..
|
||||||
field_close_on_enter[filter;false] ]] ..
|
"tooltip[size_inc;" .. S("Increase window size") .. "]" ..
|
||||||
|
"tooltip[size_dec;" .. S("Decrease window size") .. "]" ..
|
||||||
|
"tooltip[prev;" .. S("Previous page") .. "]" ..
|
||||||
|
"tooltip[next;" .. S("Next page") .. "]" ..
|
||||||
"button[" .. (data.iX * 0.48) .. ",-0.02;0.7,1;size_inc;+]" ..
|
"button[" .. (data.iX * 0.48) .. ",-0.02;0.7,1;size_inc;+]" ..
|
||||||
"button[" .. ((data.iX * 0.48) + 0.5) ..
|
"button[" .. ((data.iX * 0.48) + 0.5) ..
|
||||||
",-0.02;0.7,1;size_dec;-]" ..
|
",-0.02;0.7,1;size_dec;-]" ..
|
||||||
"button[" .. (data.iX - 3.1) .. ".4,0;0.8,0.95;prev;<]" ..
|
"button[" .. (data.iX - 3.1) .. ",0;0.8,0.95;prev;<]" ..
|
||||||
"label[" .. (data.iX - 2.2) .. ".1,0.18;" ..
|
"label[" .. (data.iX - 2.2) .. ",0.18;" ..
|
||||||
colorize(data.pagenum) .. " / " .. data.pagemax .. "]" ..
|
colorize(data.pagenum) .. " / " .. data.pagemax .. "]" ..
|
||||||
"button[" .. (data.iX - 1.2) .. ".2,0;0.8,0.95;next;>]" ..
|
"button[" .. (data.iX - 1.2) .. ",0;0.8,0.95;next;>]" ..
|
||||||
"field[0.3,0.32;2.5,1;filter;;" ..
|
"field[0.3,0.32;2.5,1;filter;;" ..
|
||||||
mt.formspec_escape(data.filter) .. "]"
|
mt.formspec_escape(data.filter) .. "]"
|
||||||
|
|
||||||
|
@ -186,7 +201,8 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||||
|
|
||||||
if not next(data.items) then
|
if not next(data.items) then
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"label[" .. (xoffset - (even_num and 1.5 or 1)) .. ",2;No item to show]"
|
"label[" .. (xoffset - (even_num and 1.5 or 1)) .. ",2;" ..
|
||||||
|
S("No item to show") .. "]"
|
||||||
end
|
end
|
||||||
|
|
||||||
local first_item = (data.pagenum - 1) * ipp
|
local first_item = (data.pagenum - 1) * ipp
|
||||||
|
@ -206,16 +222,20 @@ function craftguide:get_formspec(player_name, is_fuel)
|
||||||
if not data.recipes_item or (is_fuel and not get_recipe(data.item).items) then
|
if not data.recipes_item or (is_fuel and not get_recipe(data.item).items) then
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
"image[" .. (xoffset - 1) .. "," .. (iY + 2.35) ..
|
||||||
".12;0.9,0.7;craftguide_arrow.png]" ..
|
";0.9,0.7;craftguide_arrow.png]" ..
|
||||||
"item_image_button[" .. xoffset .. "," .. (iY + 2.2) ..
|
"item_image_button[" .. xoffset .. "," .. (iY + 2.2) ..
|
||||||
";1,1;" .. data.item .. ";" .. data.item .. ";]" ..
|
";1,1;" .. data.item .. ";" .. data.item .. ";]" ..
|
||||||
tooltip ..
|
tooltip ..
|
||||||
"image[" .. (xoffset - 2) .. "," ..
|
"image[" .. (xoffset - 2) .. "," ..
|
||||||
(iY + 2.18) .. ";1,1;craftguide_fire.png]"
|
(iY + 2.18) .. ";1,1;craftguide_fire.png]"
|
||||||
else
|
else
|
||||||
|
local show_usage = data.show_usage
|
||||||
formspec = formspec ..
|
formspec = formspec ..
|
||||||
self:get_recipe(iY, xoffset, tooltip, data.item,
|
self:get_recipe(iY, xoffset, tooltip,
|
||||||
data.recipe_num, data.recipes_item)
|
data.item,
|
||||||
|
data.rnum,
|
||||||
|
(show_usage and data.usages or data.recipes_item),
|
||||||
|
show_usage)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -282,7 +302,7 @@ function craftguide:get_init_items()
|
||||||
local items_list, counter = {}, 0
|
local items_list, counter = {}, 0
|
||||||
for name, def in pairs(reg_items) do
|
for name, def in pairs(reg_items) do
|
||||||
local is_fuel = get_fueltime(name) > 0
|
local is_fuel = get_fueltime(name) > 0
|
||||||
if not (def.groups.not_in_creative_inventory == 1) and
|
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
|
(get_recipe(name).items or is_fuel) and
|
||||||
def.description and def.description ~= "" then
|
def.description and def.description ~= "" then
|
||||||
|
|
||||||
|
@ -328,26 +348,70 @@ function craftguide:get_filter_items(data, player)
|
||||||
if not data.items then
|
if not data.items then
|
||||||
data.init_filter_items = filtered_list
|
data.init_filter_items = filtered_list
|
||||||
end
|
end
|
||||||
elseif filter ~= "" and not datas.searches[filter] then
|
elseif filter ~= "" then
|
||||||
datas.searches[filter] = filtered_list
|
-- Cache the results only if searched 2 times
|
||||||
|
if datas.searches[filter] == nil then
|
||||||
|
datas.searches[filter] = false
|
||||||
|
else
|
||||||
|
datas.searches[filter] = filtered_list
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
data.items = filtered_list
|
data.items = filtered_list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function craftguide:get_item_usages(item)
|
||||||
|
local usages = {}
|
||||||
|
for name, def in pairs(reg_items) do
|
||||||
|
if not (def.groups.not_in_creative_inventory == 1) and
|
||||||
|
(get_recipe(name).items) and def.description and def.description ~= "" then
|
||||||
|
local recipes = get_recipes(name)
|
||||||
|
for i = 1, #recipes do
|
||||||
|
local recipe = recipes[i]
|
||||||
|
local items = recipe.items
|
||||||
|
|
||||||
|
for j = 1, #items do
|
||||||
|
if items[j] == item then
|
||||||
|
usages[#usages + 1] = {
|
||||||
|
type = recipe.type,
|
||||||
|
items = items,
|
||||||
|
width = recipe.width,
|
||||||
|
output = recipe.output,
|
||||||
|
}
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return usages
|
||||||
|
end
|
||||||
|
|
||||||
mt.register_on_player_receive_fields(function(player, formname, fields)
|
mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if formname ~= "craftguide" then return end
|
if formname ~= "craftguide" then return end
|
||||||
local player_name = player:get_player_name()
|
local player_name = player:get_player_name()
|
||||||
local data = datas[player_name]
|
local data = datas[player_name]
|
||||||
|
|
||||||
if fields.clear then
|
if fields.clear then
|
||||||
data.filter, data.item, data.pagenum, data.recipe_num = "", nil, 1, 1
|
data.show_usage = nil
|
||||||
|
data.filter = ""
|
||||||
|
data.item = nil
|
||||||
|
data.pagenum = 1
|
||||||
|
data.rnum = 1
|
||||||
|
|
||||||
data.items = progressive_mode and data.init_filter_items or datas.init_items
|
data.items = progressive_mode and data.init_filter_items or datas.init_items
|
||||||
craftguide:get_formspec(player_name)
|
craftguide:get_formspec(player_name)
|
||||||
|
|
||||||
elseif fields.alternate then
|
elseif fields.alternate then
|
||||||
local recipe = data.recipes_item[data.recipe_num + 1]
|
local num
|
||||||
data.recipe_num = recipe and data.recipe_num + 1 or 1
|
if data.show_usage then
|
||||||
|
num = data.usages[data.rnum + 1]
|
||||||
|
else
|
||||||
|
num = data.recipes_item[data.rnum + 1]
|
||||||
|
end
|
||||||
|
|
||||||
|
data.rnum = num and data.rnum + 1 or 1
|
||||||
craftguide:get_formspec(player_name)
|
craftguide:get_formspec(player_name)
|
||||||
|
|
||||||
elseif (fields.key_enter_field == "filter" or fields.search) and
|
elseif (fields.key_enter_field == "filter" or fields.search) and
|
||||||
|
@ -359,11 +423,13 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
|
|
||||||
elseif fields.prev or fields.next then
|
elseif fields.prev or fields.next then
|
||||||
data.pagenum = data.pagenum - (fields.prev and 1 or -1)
|
data.pagenum = data.pagenum - (fields.prev and 1 or -1)
|
||||||
|
|
||||||
if data.pagenum > data.pagemax then
|
if data.pagenum > data.pagemax then
|
||||||
data.pagenum = 1
|
data.pagenum = 1
|
||||||
elseif data.pagenum == 0 then
|
elseif data.pagenum == 0 then
|
||||||
data.pagenum = data.pagemax
|
data.pagenum = data.pagemax
|
||||||
end
|
end
|
||||||
|
|
||||||
craftguide:get_formspec(player_name)
|
craftguide:get_formspec(player_name)
|
||||||
|
|
||||||
elseif (fields.size_inc and data.iX < MAX_LIMIT) or
|
elseif (fields.size_inc and data.iX < MAX_LIMIT) or
|
||||||
|
@ -382,12 +448,14 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
local recipes = get_recipes(item)
|
local recipes = get_recipes(item)
|
||||||
if not recipes and not is_fuel then return end
|
if not recipes and not is_fuel then return end
|
||||||
|
|
||||||
if item == data.item then
|
if not data.show_usage and item == data.item and not progressive_mode then
|
||||||
if data.recipes_item and #data.recipes_item >= 2 then
|
data.usages = craftguide:get_item_usages(item)
|
||||||
local recipe = data.recipes_item[data.recipe_num + 1]
|
if next(data.usages) then
|
||||||
data.recipe_num = recipe and data.recipe_num + 1 or 1
|
data.show_usage = true
|
||||||
craftguide:get_formspec(player_name)
|
data.rnum = 1
|
||||||
end
|
end
|
||||||
|
|
||||||
|
craftguide:get_formspec(player_name)
|
||||||
else
|
else
|
||||||
if progressive_mode then
|
if progressive_mode then
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
|
@ -397,9 +465,11 @@ mt.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
recipes = craftguide:recipe_in_inv(inv, item, recipes)
|
recipes = craftguide:recipe_in_inv(inv, item, recipes)
|
||||||
end
|
end
|
||||||
|
|
||||||
data.item = item
|
data.item = item
|
||||||
data.recipe_num = 1
|
|
||||||
data.recipes_item = recipes
|
data.recipes_item = recipes
|
||||||
|
data.rnum = 1
|
||||||
|
data.show_usage = nil
|
||||||
|
|
||||||
craftguide:get_formspec(player_name, is_fuel)
|
craftguide:get_formspec(player_name, is_fuel)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -409,7 +479,7 @@ end)
|
||||||
|
|
||||||
function craftguide:on_use(itemstack, user)
|
function craftguide:on_use(itemstack, user)
|
||||||
if not datas.init_items then
|
if not datas.init_items then
|
||||||
craftguide:get_init_items()
|
self:get_init_items()
|
||||||
end
|
end
|
||||||
|
|
||||||
local player_name = user:get_player_name()
|
local player_name = user:get_player_name()
|
||||||
|
@ -418,16 +488,17 @@ function craftguide:on_use(itemstack, user)
|
||||||
if progressive_mode or not data then
|
if progressive_mode or not data then
|
||||||
datas[player_name] = {filter = "", pagenum = 1, iX = DEFAULT_SIZE}
|
datas[player_name] = {filter = "", pagenum = 1, iX = DEFAULT_SIZE}
|
||||||
if progressive_mode then
|
if progressive_mode then
|
||||||
craftguide:get_filter_items(datas[player_name], user)
|
self:get_filter_items(datas[player_name], user)
|
||||||
end
|
end
|
||||||
craftguide:get_formspec(player_name)
|
|
||||||
|
self:get_formspec(player_name)
|
||||||
else
|
else
|
||||||
show_formspec(player_name, "craftguide", data.formspec)
|
show_formspec(player_name, "craftguide", data.formspec)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
mt.register_craftitem("craftguide:book", {
|
mt.register_craftitem("craftguide:book", {
|
||||||
description = "Crafting Guide",
|
description = S("Crafting Guide"),
|
||||||
inventory_image = "craftguide_book.png",
|
inventory_image = "craftguide_book.png",
|
||||||
wield_image = "craftguide_book.png",
|
wield_image = "craftguide_book.png",
|
||||||
stack_max = 1,
|
stack_max = 1,
|
||||||
|
@ -438,7 +509,7 @@ mt.register_craftitem("craftguide:book", {
|
||||||
})
|
})
|
||||||
|
|
||||||
mt.register_node("craftguide:sign", {
|
mt.register_node("craftguide:sign", {
|
||||||
description = "Crafting Guide Sign",
|
description = S("Crafting Guide Sign"),
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
tiles = {"craftguide_sign.png"},
|
tiles = {"craftguide_sign.png"},
|
||||||
inventory_image = "craftguide_sign_inv.png",
|
inventory_image = "craftguide_sign_inv.png",
|
||||||
|
@ -455,7 +526,7 @@ mt.register_node("craftguide:sign", {
|
||||||
},
|
},
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
meta:set_string("infotext", "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)
|
craftguide:on_use(itemstack, user)
|
||||||
|
@ -488,8 +559,8 @@ mt.register_craft({
|
||||||
|
|
||||||
if rawget(_G, "sfinv_buttons") then
|
if rawget(_G, "sfinv_buttons") then
|
||||||
sfinv_buttons.register_button("craftguide", {
|
sfinv_buttons.register_button("craftguide", {
|
||||||
title = "Crafting guide",
|
title = S("Crafting Guide"),
|
||||||
tooltip = "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)
|
craftguide:on_use(nil, player)
|
||||||
end,
|
end,
|
||||||
|
@ -498,3 +569,26 @@ if rawget(_G, "sfinv_buttons") then
|
||||||
end
|
end
|
||||||
|
|
||||||
mt.register_alias("xdecor:crafting_guide", "craftguide:book")
|
mt.register_alias("xdecor:crafting_guide", "craftguide:book")
|
||||||
|
|
||||||
|
--[[ Custom recipes (>3x3) test code
|
||||||
|
|
||||||
|
mt.register_craftitem("craftguide:custom_recipe_test", {
|
||||||
|
description = "Custom Recipe Test",
|
||||||
|
})
|
||||||
|
|
||||||
|
local cr = {}
|
||||||
|
for x = 1, 6 do
|
||||||
|
cr[x] = {}
|
||||||
|
for i = 1, 10 - x do
|
||||||
|
cr[x][i] = {}
|
||||||
|
for j = 1, 10 - x do
|
||||||
|
cr[x][i][j] = "group:wood"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
mt.register_craft({
|
||||||
|
output = "craftguide:custom_recipe_test",
|
||||||
|
recipe = cr[x]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
]]
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
|
||||||
|
-- Fallback functions for when `intllib` is not installed.
|
||||||
|
-- Code released under Unlicense <http://unlicense.org>.
|
||||||
|
|
||||||
|
-- Get the latest version of this file at:
|
||||||
|
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||||
|
|
||||||
|
local function format(str, ...)
|
||||||
|
local args = { ... }
|
||||||
|
local function repl(escape, open, num, close)
|
||||||
|
if escape == "" then
|
||||||
|
local replacement = tostring(args[tonumber(num)])
|
||||||
|
if open == "" then
|
||||||
|
replacement = replacement..close
|
||||||
|
end
|
||||||
|
return replacement
|
||||||
|
else
|
||||||
|
return "@"..open..num..close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||||
|
end
|
||||||
|
|
||||||
|
local gettext, ngettext
|
||||||
|
if minetest.get_modpath("intllib") then
|
||||||
|
if intllib.make_gettext_pair then
|
||||||
|
-- New method using gettext.
|
||||||
|
gettext, ngettext = intllib.make_gettext_pair()
|
||||||
|
else
|
||||||
|
-- Old method using text files.
|
||||||
|
gettext = intllib.Getter()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fill in missing functions.
|
||||||
|
|
||||||
|
gettext = gettext or function(msgid, ...)
|
||||||
|
return format(msgid, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||||
|
return format(n==1 and msgid or msgid_plural, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
return gettext, ngettext
|
|
@ -0,0 +1,90 @@
|
||||||
|
# German translation for craftguide mod.
|
||||||
|
# Copyright (C) 2018
|
||||||
|
# This file is distributed under the same license as the craftguide package.
|
||||||
|
# codexp <codexp@gmx.net>, 2018.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: 1.27\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2018-03-23 00:17+0100\n"
|
||||||
|
"PO-Revision-Date: \n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: German\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Unknown Item (@1)"
|
||||||
|
msgstr "Unbekannter Gegenstand (@1)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Any item belonging to the group(s)"
|
||||||
|
msgstr "Beliebiger Gegenstand aus der Gruppe"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Cooking time"
|
||||||
|
msgstr "Kochzeit"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Burning time"
|
||||||
|
msgstr "Brennzeit"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Alternate"
|
||||||
|
msgstr "Andere"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Recipe @1 of @2"
|
||||||
|
msgstr "Rezept @1 von @2"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid ""
|
||||||
|
"Recipe is too big to\n"
|
||||||
|
"be displayed (@1x@2)"
|
||||||
|
msgstr ""
|
||||||
|
"Rezept ist zu groß\n"
|
||||||
|
"für die Anzeige (@1x@2)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Suche"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Reset"
|
||||||
|
msgstr "Zurücksetzen"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Increase window size"
|
||||||
|
msgstr "Fenster vergrößern"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Decrease window size"
|
||||||
|
msgstr "Fenster verkleinern"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr "Vorherige Seite"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Nächste Seite"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "No item to show"
|
||||||
|
msgstr "Nichts anzuzeigen"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide"
|
||||||
|
msgstr "Rezeptbuch"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide Sign"
|
||||||
|
msgstr "Rezepttafel"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Shows a list of available crafting recipes, cooking recipes and fuels"
|
||||||
|
msgstr "Zeigt eine Liste von verfügbaren Rezepten, Kochrezepten und Brennmaterialien"
|
|
@ -0,0 +1,91 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: craftguide\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2018-03-23 18:35+0100\n"
|
||||||
|
"PO-Revision-Date: 2018-04-18 02:02+0800\n"
|
||||||
|
"Language-Team: muhdnurhidayat <mnh48mail@gmail.com>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.0.6\n"
|
||||||
|
"Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"Language: ms\n"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Unknown Item (@1)"
|
||||||
|
msgstr "Item Tidak Diketahui (@1)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Any item belonging to the group(s)"
|
||||||
|
msgstr "Sebarang item dari kumpulan"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Cooking time"
|
||||||
|
msgstr "Tempoh memasak"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Burning time"
|
||||||
|
msgstr "Tempoh pembakaran"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Alternate"
|
||||||
|
msgstr "Resipi lain"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Recipe @1 of @2"
|
||||||
|
msgstr "Resipi @1 dari @2"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid ""
|
||||||
|
"Recipe is too big to\n"
|
||||||
|
"be displayed (@1x@2)"
|
||||||
|
msgstr ""
|
||||||
|
"Resipi terlalu besar\n"
|
||||||
|
"untuk paparan (@1x@2)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Cari"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Reset"
|
||||||
|
msgstr "Set semula"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Increase window size"
|
||||||
|
msgstr "Besarkan saiz tetingkap"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Decrease window size"
|
||||||
|
msgstr "Kecilkan saiz tetingkap"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr "Halaman sebelumnya"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Halaman seterusnya"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "No item to show"
|
||||||
|
msgstr "Tiada item untuk dipaparkan"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide"
|
||||||
|
msgstr "Panduan Pertukangan"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide Sign"
|
||||||
|
msgstr "Papan Tanda Panduan Pertukangan"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Shows a list of available crafting recipes, cooking recipes and fuels"
|
||||||
|
msgstr "Menunjukkan senarai resipi pertukangan, resipi memasak dan bahan api yang ada"
|
|
@ -0,0 +1,90 @@
|
||||||
|
# Russian translation for craftguide mod.
|
||||||
|
# Copyright (C) 2018
|
||||||
|
# This file is distributed under the same license as the craftguide package.
|
||||||
|
# codexp <codexp@gmx.net>, 2018.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: 1.27\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2018-03-23 00:17+0100\n"
|
||||||
|
"PO-Revision-Date: \n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: Russian\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Unknown Item (@1)"
|
||||||
|
msgstr "Неизвестный элемент (@1)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Any item belonging to the group(s)"
|
||||||
|
msgstr "Любой элемент из группы"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Cooking time"
|
||||||
|
msgstr "Время преготовления"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Burning time"
|
||||||
|
msgstr "Время горения"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Alternate"
|
||||||
|
msgstr "Другой"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Recipe @1 of @2"
|
||||||
|
msgstr "Рецепт @1 из @2"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid ""
|
||||||
|
"Recipe is too big to\n"
|
||||||
|
"be displayed (@1x@2)"
|
||||||
|
msgstr ""
|
||||||
|
"Рецепт слишком большой\n"
|
||||||
|
"для показа (@1x@2)"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Search"
|
||||||
|
msgstr "Поиск"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Reset"
|
||||||
|
msgstr "Сброс"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Increase window size"
|
||||||
|
msgstr "Увеличить окно"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Decrease window size"
|
||||||
|
msgstr "Уменьшить окно"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr "Предыдущая страница"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Следущая страница"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "No item to show"
|
||||||
|
msgstr "Нет элемента для показа"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide"
|
||||||
|
msgstr "книга рецептов крафта"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide Sign"
|
||||||
|
msgstr "табличка рецептов крафта"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Shows a list of available crafting recipes, cooking recipes and fuels"
|
||||||
|
msgstr "Показывает список рецептов крафта, преготовления и топливо"
|
|
@ -0,0 +1,88 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2018-03-23 18:35+0100\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"Language: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Unknown Item (@1)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Any item belonging to the group(s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Cooking time"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Burning time"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Alternate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Recipe @1 of @2"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid ""
|
||||||
|
"Recipe is too big to\n"
|
||||||
|
"be displayed (@1x@2)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Search"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Reset"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Increase window size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Decrease window size"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "No item to show"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Crafting Guide Sign"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua
|
||||||
|
msgid "Shows a list of available crafting recipes, cooking recipes and fuels"
|
||||||
|
msgstr ""
|
Reference in New Issue