- Tabs
- Recipes
- Minitabs
- Recipe filters
- Search filters
- Sorting methods
- Item list compression
- Waypoints
- Miscellaneous
name
is the tab name.def
is the tab definition.
Custom tabs can be added to the i3
inventory as follow (example):
i3.new_tab("stuff", {
description = "Stuff",
image = "image.png", -- Optional, add an image next to the tab description
slots = true -- Optional, whether the inventory slots are shown or not. Disabled by default.
--
-- The functions below are all optional
--
-- Determine if the tab is visible by a player, return false to hide the tab
access = function(player, data)
local name = player:get_player_name()
return name == "singleplayer"
end,
-- Build the formspec
formspec = function(player, data, fs)
fs("label", 3, 1, "Just a test")
fs"label[3,2;Lorem Ipsum]"
-- No need to return anything
end,
-- Events handling happens here
fields = function(player, data, fields)
if fields.mybutton then
-- Do things
end
-- To prevent a formspec update, return false.
-- Otherwise: no need to return anything, it's automatic.
end,
})
player
is anObjectRef
to the user.data
are the user data.fs
is the formspec table which is callable with a metamethod. Every call adds a new entry.
Update the current formspec.
Delete a tab by name.
Return the current player tab. player
is an ObjectRef
to the user.
Set the current tab by name. player
is an ObjectRef
to the user.
tabname
can be omitted to get an empty tab.
Override a tab by name. def
is the tab definition like seen in i3.set_tab
A 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.
Examples:
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",
}
Multiple recipes can also be registered at once:
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"
}
Manage the tabs on the right panel of the inventory. Allow to make a sensible list sorted by specific groups of items.
Add a new minitab (limited to 6).
name
is the tab name.def
is the definition table.
Example:
i3.new_minitab("test", {
description = "Test",
-- Whether this tab is visible or not. Optional.
access = function(player, data)
return player:get_player_name() == "singleplayer"
end,
-- Whether a specific item is shown in the list or not.
sorter = function(item, data)
return item:find"wood"
end
})
player
is anObjectRef
to the user.data
are the user data.item
is an item name string.
Remove a minitab by name.
name
is the name of the tab to remove.
A list of registered minitabs.
Recipe filters can be used to filter the recipes shown to players. Progressive mode is implemented as a recipe filter.
Add 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)
Remove all recipe filters and add a new one.
A map of recipe filters, indexed by name.
Search filters are used to perform specific searches from the search field.
The filters can be cumulated to perform a specific search.
They are 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.
Add a search filter. The search function must return a boolean value (whether the given item should be listed or not).
name
is the filter name.values
is a table of all possible values.
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)
A map of search filters, indexed by name.
Sorting methods are used to filter the player's main inventory.
Add a player inventory sorting method.
name
is the method name.def
is the method definition.
Example:
i3.add_sorting_method("test", {
description = "Cool sorting method",
func = function(list, data)
-- `list`: inventory list
-- `data`: player data
table.sort(list)
-- A list must be returned
return list
end,
})
A table containing all sorting methods.
i3
can reduce the item list size by compressing a group of items.
Add a new group of items to compress.
item
is the item which represent the group of compressed items.def
is a table specifying the substring replace patterns to be used.
Example:
i3.compress("default:diamondblock", {
replace = "diamond",
by = {"bronze", "copper", "gold", "steel", "tin"}
})
A map of all compressed item groups, indexed by stereotypes.
i3
allows you to manage the waypoints of a specific player.
Add a waypoint to specific player.
player_name
is the player name.def
is the waypoint definition table.
Example:
i3.add_waypoint("Test", {
player = "singleplayer",
pos = {x = 0, y = 2, z = 0},
color = 0xffff00,
-- image = "heart.png" (optional)
})
Remove a waypoint for specific player.
player_name
is the player name.waypoint_name
is the waypoint name.
Example:
i3.remove_waypoint("singleplayer", "Test")
Return a table of all waypoints of a specific player.
player_name
is the player name.
Show a Steam-like HUD notification on the bottom-left corner of the screen.
name
is the player name.msg
is the HUD message to show.img
(optional) is the HUD image to show (preferably 16x16 px).
Return a table of recipes and usages of item
.
If set, the mod will export all the cached recipes and usages in a JSON format to the given URL (HTTP support is required¹).
The bag
group in the item definition allows to extend the player inventory size
given a number between 1 and 4.
[1] Add i3
to the secure.http_mods
or secure.trusted_mods
setting in minetest.conf
.