Compare commits

..

30 Commits
1.4 ... 1.5

Author SHA1 Message Date
3f7ad71e00 Add an API for search filters 2019-03-03 17:11:02 +01:00
eb2a81b8b5 Allow special search filters by groups
Using <optional name>:groups=<group_name1,group_name2,...>
2019-03-01 19:14:43 +01:00
92daae3e95 Replace group with item in item's usages 2019-03-01 17:48:51 +01:00
799c0c7038 Update settingtypes.txt 2019-02-22 15:28:41 +01:00
8b79f32150 Update German translation 2019-02-22 15:28:41 +01:00
183a9ff7a1 Fix get_filtered_items again 2019-02-22 15:28:36 +01:00
cdc8e410b6 Add french translations, revise others 2019-02-21 16:59:07 +01:00
7219a6096b Minor cleanup 2019-02-21 15:31:28 +01:00
7f44517701 Fix alternate button not shown for too large recipes 2019-02-21 01:54:15 +01:00
5e4a362a15 Fix some crash 2019-02-21 01:44:09 +01:00
058cd05ed7 Separate custom_crafts tables from main table 2019-02-21 01:08:37 +01:00
fa30a0d076 Add an API for custom formspec elements 2019-02-21 01:02:59 +01:00
92cf2307db Progressive: do not show items that you didn't get 2019-02-20 18:11:59 +01:00
bfe99092db Cleanup and optimizations 2019-02-18 01:49:05 +01:00
97e6eceb75 Progressive: Poll new items every 0.5s 2019-02-16 01:52:54 +01:00
d6432f53bb Add a comment on the item polling 2019-02-13 14:32:36 +01:00
c62994f9af Split API doc in separate file 2019-02-13 14:29:08 +01:00
8f6f8dda7e Use engine translator, ditch intllib 2019-02-13 14:16:55 +01:00
40b5f8725a Fix some glitch 2019-02-13 14:06:33 +01:00
0956e86d73 Check also the 'craftpreview' list 2019-02-13 01:30:34 +01:00
07bc14e516 Track new discovered items all the time 2019-02-13 01:10:49 +01:00
b3bba5c2ff Fix get_filtered_items() 2019-02-13 01:05:21 +01:00
4560457504 Mitigate the performance regression since fc2d2e5 2019-02-11 23:52:31 +01:00
3f44ae00d2 Remove demo custom recipe 2019-02-11 01:22:45 +01:00
1ba1e41dcd Progressive: Add a better error message for empty items list 2019-02-11 00:30:06 +01:00
3cf4bef83a Shorten function name 2019-02-11 00:22:00 +01:00
c4272d8d24 Add formspec escape, apply proper format strings 2019-02-11 00:18:37 +01:00
aac3e3f693 Add API call to open crafting guide (#59) 2019-02-11 00:01:32 +01:00
fc2d2e585c Fix issue #60 2019-02-10 23:07:28 +01:00
e37f1df6d3 Fix error message in progressive mode 2019-02-10 20:37:24 +01:00
15 changed files with 785 additions and 745 deletions

View File

@ -7,4 +7,6 @@ read_globals = {
"sfinv",
"sfinv_buttons",
"vector",
"string",
"table",
}

168
API.md Normal file
View File

@ -0,0 +1,168 @@
## API
### Custom recipes
#### Registering a custom crafting type (example)
```Lua
craftguide.register_craft_type("digging", {
description = "Digging",
icon = "default_tool_steelpick.png",
})
```
#### Registering a custom crafting recipe (example)
```Lua
craftguide.register_craft({
type = "digging",
width = 1,
output = "default:cobble 2",
items = {"default:stone"},
})
```
---
### Recipe filters
Recipe filters can be used to filter the recipes shown to players. Progressive
mode is implemented as a recipe filter.
#### `craftguide.add_recipe_filter(name, function(recipes, player))`
Adds a recipe filter with the given name. The filter function should return the
recipes to be displayed, given the available recipes and an `ObjectRef` to the
user. Each recipe is a table of the form returned by
`minetest.get_craft_recipe`.
Example function to hide recipes for items from a mod called "secretstuff":
```lua
craftguide.add_recipe_filter("Hide secretstuff", function(recipes)
local filtered = {}
for _, recipe in ipairs(recipes) do
if recipe.output:sub(1,12) ~= "secretstuff:" then
filtered[#filtered + 1] = recipe
end
end
return filtered
end)
```
#### `craftguide.remove_recipe_filter(name)`
Removes the recipe filter with the given name.
#### `craftguide.set_recipe_filter(name, function(recipe, player))`
Removes all recipe filters and adds a new one.
#### `craftguide.get_recipe_filters()`
Returns a map of recipe filters, indexed by name.
---
### Search filters
Search filters are used to perform specific searches inside the search field.
They can be used like so: `<optional name>+<filter name>=<value1>,<value2>,<...>`
Notes:
- If `optional name` is omitted, the search filter will apply to all items, without pre-filtering.
- Filters can be combined.
- The `+groups=` filter is currently implemented by default.
#### `craftguide.add_search_filter(name, function(item, values))`
Adds a search filter with the given name.
The search function should return a boolean value (whether the given item should be listed or not).
Example function to show items which contain at least a recipe of given width(s):
```lua
craftguide.add_search_filter("widths", function(item, widths)
local has_width
local recipes = recipes_cache[item]
if recipes then
for i = 1, #recipes do
local recipe_width = recipes[i].width
for j = 1, #widths do
local width = tonumber(widths[j])
if width == recipe_width then
has_width = true
break
end
end
end
end
return has_width
end)
```
#### `craftguide.remove_search_filter(name)`
Removes the search filter with the given name.
#### `craftguide.get_search_filters()`
Returns a map of search filters, indexed by name.
---
### Custom formspec elements
#### `craftguide.add_formspec_element(name, def)`
Adds a formspec element to the current formspec.
Supported types: `box`, `label`, `image`, `button`, `tooltip`, `item_image`, `image_button`, `item_image_button`
Example:
```lua
craftguide.add_formspec_element("export", {
type = "button",
element = function(data)
-- Should return a table of parameters according to the formspec element type.
-- Note: for all buttons, the 'name' parameter *must not* be specified!
if data.recipes then
return {
data.iX - 3.7, -- X
sfinv_only and 7.9 or 8, -- Y
1.6, -- W
1, -- H
ESC(S("Export")) -- label
}
end
end,
-- Optional.
action = function(player, data)
-- When the button is pressed.
print("Exported!")
end
})
```
#### `craftguide.remove_formspec_element(name)`
Removes the formspec element with the given name.
#### `craftguide.get_formspec_elements()`
Returns a map of formspec elements, indexed by name.
---
### Miscellaneous
#### `craftguide.show(player_name, item, show_usages)`
Opens the Crafting Guide with the current filter applied.
* `player_name`: string param.
* `item`: optional, string param. If set, this item is pre-selected. If the item does not exist or has no recipe, use the player's previous selection. By default, player's previous selection is used
* `show_usages`: optional, boolean param. If true, show item usages.

View File

@ -6,7 +6,7 @@
This crafting guide is a blue book named *"Crafting Guide"* or a wooden sign.
This crafting guide features a **progressive mode**.
The progressive mode is a Terraria-like system that only shows recipes you can craft
The progressive mode is a Terraria-like system that shows recipes you can craft
from items you ever had in your inventory. To enable it: `craftguide_progressive_mode = true` in `minetest.conf`.
`craftguide` is also integrated in `sfinv` (Minetest Game inventory). To enable it:
@ -14,69 +14,8 @@ from items you ever had in your inventory. To enable it: `craftguide_progressive
Use the command `/craft` to show the recipe(s) of the pointed node.
For developers, `craftguide` also has a [modding API](https://github.com/minetest-mods/craftguide/blob/master/API.md).
![Preview2](https://i.imgur.com/bToFH38.png)
---
## API
### Custom recipes
#### Registering a custom crafting type
```Lua
craftguide.register_craft_type("digging", {
description = "Digging",
icon = "default_tool_steelpick.png",
})
```
#### Registering a custom crafting recipe
```Lua
craftguide.register_craft({
type = "digging",
width = 1,
output = "default:cobble 2",
items = {"default:stone"},
})
```
### Recipe filters
Recipe filters can be used to filter the recipes shown to players. Progressive
mode is implemented as a recipe filter.
#### `craftguide.add_recipe_filter(name, function(recipes, player))`
Adds a recipe filter with the given name. The filter function should return the
recipes to be displayed, given the available recipes and an `ObjectRef` to the
user. Each recipe is a table of the form returned by
`minetest.get_craft_recipe`.
Example function to hide recipes for items from a mod called "secretstuff":
```lua
craftguide.add_recipe_filter("Hide secretstuff", function(recipes)
local filtered = {}
for _, recipe in ipairs(recipes) do
if recipe.output:sub(1,12) ~= "secretstuff:" then
filtered[#filtered + 1] = recipe
end
end
return filtered
end)
```
#### `craftguide.remove_recipe_filter(name)`
Removes the recipe filter with the given name.
#### `craftguide.set_recipe_filter(name, function(recipe, player))`
Removes all recipe filters and adds a new one.
#### `craftguide.get_recipe_filters()`
Returns a map of recipe filters, indexed by name.

View File

@ -1,3 +1,2 @@
sfinv?
sfinv_buttons?
intllib?
sfinv_buttons?

780
init.lua

File diff suppressed because it is too large Load Diff

View File

@ -1,45 +0,0 @@
-- 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

25
locale/craftguide.de.tr Normal file
View File

@ -0,0 +1,25 @@
# textdomain: craftguide
Craft Guide=Rezeptbuch
Crafting Guide=Rezeptbuch
Crafting Guide Sign=Rezepttafel
Search=Suche
Reset=Zurücksetzen
Previous page=Vorherige Seite
Next page=Nächste Seite
Usage @1 of @2=Verwendung @1 von @2
Recipe @1 of @2=Rezept @1 von @2
Burning time: @1=Brennzeit: @1
Cooking time: @1=Kochzeit: @1
Any item belonging to the group(s): @1=Beliebiger Gegenstand aus Gruppe(n): @1
Recipe is too big to be displayed (@1x@2)=Rezept ist zu groß für die Anzeige (@1×@2)
Shapeless=Formlos
Cooking=Kochen
Increase window size=Fenster vergrößern
Decrease window size=Fenster verkleinern
No item to show=Nichts anzuzeigen
Collect items to reveal more recipes=Gegenstände aufsammeln, um mehr Rezepte aufzudecken
Show recipe(s) of the pointed node=Rezept(e) des gezeigten Blocks anzeigen
No node pointed=Auf keinen Block gezeigt
You don't know a recipe for this node=Sie kennen kein Rezept für diesen Block
No recipe for this node=Kein Rezept für diesen Block

24
locale/craftguide.fr.tr Normal file
View File

@ -0,0 +1,24 @@
# textdomain: craftguide
Craft Guide=Guide de recettes
Crafting Guide=Guide de recettes
Search=Rechercher
Reset=Réinitialiser
Previous page=Page précédente
Next page=Page suivante
Usage @1 of @2=Usage @1 de @2
Recipe @1 of @2=Recette @1 de @2
Burning time: @1=Temps de combustion : @1
Cooking time: @1=Temps de cuisson : @1
Any item belonging to the group(s): @1=Tout item appartenant au(x) groupe(s) : @1
Recipe is too big to be displayed (@1x@2)=La recette est trop grande pour être affichée (@1x@2)
Shapeless=Sans forme
Cooking=Cuisson
Increase window size=Agrandir la fenêtre
Decrease window size=Réduire la fenêtre
No item to show=Aucun item à afficher
Collect items to reveal more recipes=Collecte des items pour révéler plus de recettes
Show recipe(s) of the pointed node=Affiche les recettes du bloc visé
No node pointed=Aucun bloc visé
You don't know a recipe for this node=Tu ne connais aucune recette pour ce bloc
No recipe for this node=Aucune recette pour ce bloc

25
locale/craftguide.ru.tr Normal file
View File

@ -0,0 +1,25 @@
# textdomain: craftguide
Craft Guide=книга рецептов крафта
Crafting Guide=книга рецептов крафта
Crafting Guide Sign=
Search=Поиск
Reset=Сброс
Previous page=Предыдущая страница
Next page=Следущая страница
Usage @1 of @2=использование @1 из @2
Recipe @1 of @2=Рецепт @1 из @2
Burning time: @1=Время горения: @1
Cooking time: @1=Время преготовления: @1
Any item belonging to the group(s): @1=Любой элемент из группы: @1
Recipe is too big to be displayed (@1x@2)=Рецепт слишком большой для показа (@1x@2)
Shapeless=
Cooking=
Increase window size=Увеличить окно
Decrease window size=Уменьшить окно
No item to show=Нет элемента для показа
Collect items to reveal more recipes=
Show recipe(s) of the pointed node=
No node pointed=
You don't know a recipe for this node=
No recipe for this node=

View File

@ -1,90 +0,0 @@
# 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"

View File

@ -1,91 +0,0 @@
# 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"

View File

@ -1,90 +0,0 @@
# 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 "Показывает список рецептов крафта, преготовления и топливо"

25
locale/template Normal file
View File

@ -0,0 +1,25 @@
# textdomain: craftguide
Craft Guide=
Crafting Guide=
Crafting Guide Sign=
Search=
Reset=
Previous page=
Next page=
Usage @1 of @2=
Recipe @1 of @2=
Burning time: @1=
Cooking time: @1=
Any item belonging to the group(s): @1=
Recipe is too big to be displayed (@1x@2)=
Shapeless=
Cooking=
Increase window size=
Decrease window size=
No item to show=
Collect items to reveal more recipes=
Show recipe(s) of the pointed node=
No node pointed=
You don't know a recipe for this node=
No recipe for this node=

View File

@ -1,88 +0,0 @@
# 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 ""

View File

@ -1,4 +1,5 @@
#For enabling some options of craftguide.
# The progressive mode shows recipes you can craft from items you ever had in your inventory.
craftguide_progressive_mode (Progressive Mode) bool false
# Integration in the default Minetest Game inventory.
craftguide_sfinv_only (Sfinv only) bool false