minetest_doc_example/doc_items.lua

118 lines
4.8 KiB
Lua
Raw Normal View History

2016-12-20 03:19:21 -08:00
--[[ This is the doc_items example.
This example shows how to add help texts to items and how to use
other frequently-used features of doc_items.
]]
--[[ IMPORTANT REMINDER: doc_items mod will automatically generate help
entries for all items (a few exceptions apply) without your intervention.
doc_items already extracts a lot of item definition automatically.
The API is mainly concernd about enhancing the existing item entries.
Hint: When using this example, use the `/help_reveal`
chat command to reveal all item entries (for testing) ]]
2016-12-19 05:08:09 -08:00
--[[ HELP TEXTS ]]
-- For nontrivial items, you typically want to use the _doc_items_* fields
minetest.register_craftitem("doc_example:item1", {
description = "doc_example test item 1",
-- This is the typical way to add extended item descriptions.
_doc_items_longdesc = "This is an useless example item. It does nothing.",
-- This simple item is self-explanatory, so we can omit _doc_items_usagehelp
-- For more fields, see API.md of doc_items
-- Just an example group
group = { example = 1 },
})
-- These are just more example items which we use for the factoids later
minetest.register_craftitem("doc_example:item2", {
description = "doc_example test item 2",
group = { example = 2 },
})
minetest.register_craftitem("doc_example:item3", {
description = "doc_example test item 3",
group = { example = 25 },
})
minetest.register_tool("doc_example:tool", {
description = "doc_example chat tool",
_doc_items_longdesc = "This tool is able to write something into the chat.",
-- This tool has an unique non-standard use (i.e. not mining, not melee combat, etc.), so we should add this field as well
-- Read API.md of doc_items for guidelines to write good help texts
_doc_items_usagehelp = "Punch to send a chat message.",
2016-12-20 03:19:21 -08:00
-- The tool entry will be visible for everyone at start
_doc_items_hidden = false,
2016-12-19 05:08:09 -08:00
on_punch = function()
2016-12-19 05:52:49 -08:00
minetest.chat_send_all("The doc_example chat tool has been used!")
2016-12-19 05:08:09 -08:00
end,
})
--[[ FACTOIDS
Reminder: A factoid is an automatically generated text based on the item definition.
This section will demonstrate the use of factoids
]]
-- This adds an automatically generated text for all items which are a member of the example group
doc.sub.items.register_factoid("craftitems", "groups", function(category_id, def)
if def.groups.example then
return string.format("Example factoid: This item is member of the example group at rating %d.", def.groups.example)
else
return ""
end
2016-12-15 14:27:11 -08:00
end)
2016-12-19 05:08:09 -08:00
-- This factoid adds the drawtype for nodes
doc.sub.items.register_factoid("nodes", "misc", function(category_id, def)
return string.format("Example factoid: This item has the drawtype “%s”.", def.drawtype)
2016-12-15 14:27:11 -08:00
end)
2016-12-19 05:08:09 -08:00
2016-12-20 04:35:45 -08:00
--[[ USING ENTRY ALIASES
Sometimes, mods register multiple items for basically the same thing in different states.
One example is the furnace from Minetest Game (default:furnace and default:furnace_active).
If the node in all states is similar enough, you might consider to suppress the entries
of some of the entries in order to concentrate information on a single entry. If you do this, you
also have to register aliases since the lookup tool will stop working on nodes with suppressed
entries.
Suppressing entries may also be useful to combine large lists of similar items, but be careful
not to overdo it and throw away potentionally valuable information in the process.
The following code shows two nodes which changes its textures when punched.
For the player, doc_example:node2 is basically the same as doc_example:node1, only with a
different textures. Only one entry is created for both nodes.
]]
-- Node for the first “state”. This no
minetest.register_node("doc_example:node1", {
description = "doc_example test node",
_doc_items_longdesc = "When rightclicked, the textures of this block change.",
tiles = {"doc_example_1.png"},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
minetest.set_node(pos, {name="doc_example:node2"})
end,
groups = {dig_immediate=2},
})
-- Node for the second “state”. No entry will be created for this.
minetest.register_node("doc_example:node2", {
description = "doc_example test node",
-- Suppresses the entry
_doc_items_create_entry = false,
-- Note that we also do not add _doc_items_longdesc or similar fields,
-- since these fiel
tiles = {"doc_example_2.png"},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
minetest.set_node(pos, {name="doc_example:node1"})
end,
groups = {dig_immediate=2, not_in_creative_inventory=1},
drop = "doc_example:node1",
})
--[[ Register an alias to make sure the lookup tool still works.
If this is NOT done, the lookup tool will fail when it is
sed on doc_example:node2. ]]
doc.add_entry_alias("nodes", "doc_example:node1", "doc_example:node2")
-- Another example of this concept in action be seen in the mod “doc_identifier”.