Custom tabs can be added to the i3
inventory as follow (example):
i3.new_tab {
name = "stuff",
description = "Stuff",
image = "image.png", -- Optional, adds an image next to the tab description
-- Determine if the tab is visible by a player, `false` or `nil` hide the tab
access = function(player, data)
local name = player:get_player_name()
if name == "singleplayer" then
return false
end
end,
formspec = function(player, data, fs)
fs("label[3,1;This is just a test]")
end,
fields = function(player, data, fields)
end,
}
player
is anObjectRef
to the user.data
are the user data.fs
is the formspec table which is callable with a metamethod. Each call adds a new entry.
Updates the current formspec. extra_formspec
adds an additional formspec string.
Deletes a tab by name.
Returns the current player tab. player
is an ObjectRef
to the user.
Sets the current tab by name. player
is an ObjectRef
to the user.
tabname
can be omitted to get an empty tab.
Overrides a tab by name. def
is the tab definition like seen in i3.set_tab
.
Returns the list of registered tabs.
Custom recipes are nonconventional crafts outside the main crafting grid. They can be registered in-game dynamically and have a size beyond 3x3 items.
Note: the registration format differs from the default registration format in everything. The width is automatically calculated depending where you place the commas. Look at the examples attentively.
i3.register_craft_type("digging", {
description = "Digging",
icon = "default_tool_steelpick.png",
})
i3.register_craft({
type = "digging",
result = "default:cobble 2",
items = {"default:stone"},
})
i3.register_craft({
result = "default:cobble 16",
items = {
"default:stone, default:stone, default:stone",
"default:stone, , default:stone",
"default:stone, default:stone, default:stone",
}
})
Recipes can be registered in a Minecraft-like way:
i3.register_craft({
grid = {
"X #",
" ## ",
"X#X#",
"X X",
},
key = {
['#'] = "default:wood",
['X'] = "default:glass",
},
result = "default:mese 3",
})
Multiples recipes can also be registered:
i3.register_craft({
{
result = "default:mese",
items = {
"default:mese_crystal, default:mese_crystal",
"default:mese_crystal, default:mese_crystal",
}
},
big = {
result = "default:mese 4",
items = {
"default:mese_crystal, default:mese_crystal",
"default:mese_crystal, default:mese_crystal",
"default:mese_crystal, default:mese_crystal",
"default:mese_crystal, default:mese_crystal",
}
},
})
Recipes can be registered from a given URL containing a JSON file (HTTP support is required¹):
i3.register_craft({
url = "https://raw.githubusercontent.com/minetest-mods/i3/main/tests/test_online_recipe.json"
})
Recipe filters can be used to filter the recipes shown to players. Progressive mode is implemented as a recipe filter.
Adds a recipe filter with the given name
. The filter function returns 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":
i3.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)
Removes all recipe filters and adds a new one.
Removes the recipe filter with the given name
.
Returns a map of recipe filters, indexed by name.
Search filters are used to perform specific searches inside the search field.
These filters are cumulative to perform a specific search.
They can be used like so: <optional_name> +<filter name>=<value1>,<value2>,<...>
Example usages:
+groups=cracky,crumbly
: search for groupscracky
andcrumbly
in all items.wood +groups=flammable
: search for groupflammable
amongst items which containwood
in their names.
Notes:
- If
optional_name
is omitted, the search filter will apply to all items, without pre-filtering. - The
+groups
filter is currently implemented by default.
Adds a search filter with the given name
. values
is a table of all possible values.
The search function must return a boolean value (whether the given item should be listed or not).
Example function sorting items by drawtype:
i3.add_search_filter("types", function(item, drawtypes)
local t = {}
for i, dt in ipairs(drawtypes) do
t[i] = (dt == "node" and reg_nodes[item] and 1) or
(dt == "item" and reg_craftitems[item] and 1) or
(dt == "tool" and reg_tools[item] and 1) or nil
end
return #t > 0
end)
Removes the search filter with the given name
.
Returns a map of search filters, indexed by name.
If set, the mod will export all the cached recipes and usages in a JSON format to the given URL (HTTP support is required¹).
¹ Add i3
to the secure.http_mods
or secure.trusted_mods
setting in minetest.conf
.