summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--API.md162
-rw-r--r--init.lua73
2 files changed, 49 insertions, 186 deletions
diff --git a/API.md b/API.md
index 912821f..59b1a45 100644
--- a/API.md
+++ b/API.md
@@ -33,12 +33,25 @@ When using this method, your mod does not need additional dependencies.
See below for some recommendations on writing good help texts.
-If you need to set the help texts of nodes you don't register, or you
-want to overwrite existing help texts, use `doc.sub.items.set_items_longdesc`
-and `doc.sub.items.set_items_longdesc` (see below).
If you need more customization, read ahead. ;-)
+## New item fields
+This mod adds support for new fields of the item definition. They allow for
+easy and quick manipulation of the item help entries. All fields are optional.
+
+* `_doc_items_longdesc`: Long description
+* `_doc_items_usagehelp`: Usage help
+* `_doc_items_image`: Entry image (default: inventory image)
+* `_doc_items_hidden`: Whether entry is hidden (default: `false` for air and hand, `true` for everything else)
+* `_doc_items_create_entry`: Whether to create an entry for this item (default: `true`)
+* `_doc_items_entry_name`: The title of the entry. By default, this is the same as the `description` field
+ of the item, or “Nameless entry” if it is `nil`.
+
+A full explanation of these fields is provided below.
+
## Concepts
+This section explains the core concepts of an item help entry in-depth.
+
### Factoids
Basically, a factoid is usually a single sentence telling the player a specific
fact about the item. The task of each factoid is to basically convert parts
@@ -131,28 +144,22 @@ to avoid redundancy and to increase consistency for simple things. Read
* `doc.sub.items.temp.eat`: For eatable items using the `on_use=minetest.item_eat(1)` idiom
* `doc.sub.items.temp.eat_bad`: Same as above, but eating them is considered a bad idea
-### Forced and suppressed items
-By default, an entry for each item is added, except for items without a
-description (`description == nil`). This default behaviour can be changed.
-
-Entries can be forced, which means they will be forcefully added, against the
-default behaviour. Entries can be suppressed which means they will not
-be added at all.
-
-The default behaviour can be overridden by two ways: Groups and a function call.
+### Entry creation
+By default, an entry for each item is added automatically, except for items
+without a description (`description == nil`). This behaviour can be changed
+on a per-item basis.
-Use groups when you can directly define an item (in other words, in **your**
-mods).
+By setting the item definition's field `_doc_items_create_entry` to `true`
+or `false`you can explicitly define whether this item should get its own
+entry.
-To force the entry of an item, add the item to the group `in_doc = 1`.
-To suppress the entry of an item, add the item to the group `not_in_doc = 1`.
-
-There are also the functions `doc.sub.items.add_forced_item_entries` and
-`doc.sub.items.add_suppressed_item_entries` which forces or suppress certain
-item entries. You should **only** use these functions when you can not use groups.
-
-When there are contradictions, forcing a group takes precedence over suppressing
-a group.
+Suppressing an entry is useful for items which aren't supposed to be directly
+seen or obtained by the player or if they are only used for technical
+and/or internal purposes. Another possible reason to suppress an entry is
+to scrub the entry list of lots of very similar related items where the
+difference is too small to justify two seperate entries (e.g.
+burning furnace vs inactive furnace, because the gameplay mechanics are
+identical for both).
### Hidden entries
Hidden entries are entries which are not visible in the list of entries. This
@@ -161,62 +168,16 @@ created, it is just not selectable by normal means. Players might be able to
“unlock” an entry later. Refer to the API documentation of the Documentation
System to learn more.
-To hide an entry, add the item in question to the group `hidden_from_doc = 1`.
-If this is not possible, use `doc.sub.items.add_hidden_item_entries`.
+By default, all entries are hidden except air and the hand.
-## New item fields
-This mod adds support for new fields of the item definition:
-
-* `_doc_items_longdesc`: Long description
-* `_doc_items_usagehelp`: Usage help
-* `_doc_items_image`: Entry image (default: inventory image)
-* `_doc_items_hidden`: Whether entry is hidden (default: `false` for Air, `true` for everything else)
-* `_doc_items_create_entry`: Whether to create an entry for this item (default: `true`)
-* `_doc_items_entry_name`: The title of the entry. By default, this is the same as the `description` field
- of the item, or “Nameless entry” if it is `nil`.
+To mark an entry as hidden, add the field `_doc_items_hidden=true` to its
+item definition. To mark an entry
## Functions
This is the reference of all available functions in this API.
-### `doc.sub.items.set_items_longdesc(longdesc_table)`
-Sets the long description of items. `longdesc_table` is
-a table where the keys are the itemstrings and the values
-are the the description strings for each item.
-
-Note the preferred method to set the long description is by using
-the item definition field `_doc_items_longdesc`.
-
-This function is intended to be used to set the long description
-for items which your mods do not register by themselves.
-
-#### Default long descriptions
-`doc_items` registers two long descriptions by default: For air
-and the hand (default tool).
-By using this function, you can overwrite these default descriptions.
-
-The default hand description is kept very generic, but it might miss
-some information on more complex subgames. In this case, the hand's
-long description might need overwriting.
-
-#### Example
- doc.sub.items.set_items_longdesc({
- ["example:painter"] = "Paints blocks.",
- ["example:flower"] = "Likes to grow on grass when it is near water.",
- })
-
-### `doc.sub.items.set_items_usagehelp(usagehelp_table)`
-Sets the usage help texts of items. The function is completely analog
-to `doc.sub.items.set_items_longdesc` and has the same syntax, it
-only differs in semantics.
-
-#### Example
- doc.sub.items.set_items_usagehelp({
- ["example:painter"] = "Punch any block to paint it red.",
- })
-
### `doc.sub.items.register_factoid(category_id, factoid_type, factoid_generator)`
-***Note***: This function not fully implemented. It currently supports only
-factoids for nodes.
+***Note***: This function not fully implemented. It currently supports group-based factoids.
Add a custom factoid (see above) for the specified category.
@@ -309,56 +270,9 @@ The intention of this function is to give a short rundown of the groups
which are notable as they are important to gameplay in some way yet don't
deserve a full-blown factoid.
-### `doc.sub.items.add_forced_item_entries(itemstrings)`
-Adds items which will be forced to be added to the entry list, even if
-the item is not in creative inventory.
-
-`itemstrings` is a table of itemstrings of items to force the entries for.
-
-***Note***: The recommended way to force item entries is by adding the item
-to the group `in_doc=1` (see above). Only use this function when you can
-not use groups.
-
-### `doc.sub.items.add_suppressed_item_entries(itemstrings)`
-Adds items which will be forced to **not** be added to the entry list.
-
-`itemstrings` is a table of itemstrings of items to force the entries for.
-
-***Note***: The recommended way to suppress item entries is by adding the
-item to the group `not_in_doc=1` (see above). Only use this function when you
-can not use groups.
-
-### `doc.sub.items.add_hidden_item_entries(itemstrings)`
-Adds items which will be hidden from the entry list initially. Note the
-entries still exist and might be unlocked later.
-
-`itemstrings` is a table of itemstrings of items for which their entries should
-be hidden.
-
-***Note***: The recommended way to hide item entries is by adding the
-item to the group `hide_from_doc=1` (see above). Only use this function when you
-can not use groups.
-
-### `doc.sub.items.add_item_name_overrides(itemstrings)`
-Overrides the entry names of entries to the provided names. By default,
-each entry name equals the item's `description` field.
-
-`itemstrings` is a table in which the keys are itemstrings and the values
-are the entry titles you want to use for those items.
-
-#### Preset overrides
-The following item name overrides are defined by default:
-
- { [""] = "Hand",
- ["air"] = "Air" }
-
-It is possible to override **these** names, just use the function normally.
-
-#### Example
- doc.sub.items.add_item_name_overrides({
- ["air"] = "Air", -- original description: “Air (You hacker you!)”
- ["farming:wheat_8"] = "Wheat Plant", -- Item description was empty
- ["example:node"] = "My Custom Name",
- })
+## Dependencies
+If you only add the custom fields to your items, you do *not* need to depend
+on this mod. If you use anything else from this mod (e.g. a function), you
+probably *do* need to depend (optionally or mandatorily) on this mod.
diff --git a/init.lua b/init.lua
index 4ba6f88..f9059ee 100644
--- a/init.lua
+++ b/init.lua
@@ -33,11 +33,6 @@ end
local groupdefs = {}
local mininggroups = {}
local miscgroups = {}
--- List of forcefully added (true) and hidden (false) items
-local forced_items = {
- ["ignore"] = false
-}
-local hidden_items = {}
local item_name_overrides = {
[""] = S("Hand"),
["air"] = S("Air")
@@ -911,25 +906,6 @@ doc.sub.items.help.longdesc = {}
doc.sub.items.help.usagehelp = {}
doc.sub.items.help.image = {}
--- Sets the long description for a table of items
-function doc.sub.items.set_items_longdesc(longdesc_table)
- for k,v in pairs(longdesc_table) do
- doc.sub.items.help.longdesc[k] = v
- end
-end
--- Sets the usage help texts for a table of items
-function doc.sub.items.set_items_usagehelp(usagehelp_table)
- for k,v in pairs(usagehelp_table) do
- doc.sub.items.help.usagehelp[k] = v
- end
-end
-
-function doc.sub.items.add_item_image_overrides(image_overrides)
- for itemstring, new_image in pairs(image_overrides) do
- doc.sub.items.help.image[itemstring] = new_image
- end
-end
-
-- Register group definition stuff
-- More (user-)friendly group names to replace the rather technical names
-- for better understanding
@@ -949,37 +925,6 @@ function doc.sub.items.add_notable_groups(groupnames)
end
end
--- Add items which will be forced to be added to the item list,
--- even if the item is not in creative inventory
-function doc.sub.items.add_forced_item_entries(itemstrings)
- for i=1,#itemstrings do
- forced_items[itemstrings[i]] = true
- end
-end
-
--- Add items which will be forced *not* to be added to the item list
-function doc.sub.items.add_suppressed_item_entries(itemstrings)
- for i=1,#itemstrings do
- forced_items[itemstrings[i]] = false
- end
-end
-
--- Add items which will be hidden from the entry list, but their entries
--- are still created.
-function doc.sub.items.add_hidden_item_entries(itemstrings)
- for i=1,#itemstrings do
- hidden_items[itemstrings[i]] = true
- end
-end
-
--- Register a list of entry names where the entry name should differ
--- from the original item description
-function doc.sub.items.add_item_name_overrides(itemstrings)
- for internal, real in pairs(itemstrings) do
- item_name_overrides[internal] = real
- end
-end
-
local function gather_descs()
local help = doc.sub.items.help
@@ -1004,7 +949,7 @@ local function gather_descs()
-- Custom longdesc and usagehelp may be set by mods through the add_helptexts function
if minetest.registered_items["air"]._doc_items_longdesc then
help.longdesc["air"] = minetest.registered_items["air"]._doc.items_longdesc
- elseif help.longdesc["air"] == nil then
+ else
help.longdesc["air"] = S("A transparent block, basically empty space. It is usually left behind after digging something.")
end
@@ -1013,7 +958,7 @@ local function gather_descs()
for id, def in pairs(deftable) do
local name, ld, uh, im
local forced = false
- if (forced_items[id] == true or def.groups.in_doc or def._doc_items_create_entry == true) and def ~= nil then forced = true end
+ if (def._doc_items_create_entry == true) and def ~= nil then forced = true end
if def._doc_items_entry_name ~= nil then
name = def._doc_items_entry_name
end
@@ -1023,7 +968,7 @@ local function gather_descs()
if name == nil then
name = def.description
end
- if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or def.groups.not_in_doc or forced_items[id] == false or def._doc_items_create_entry == false) or forced then
+ if not (((def.description == nil or def.description == "") and def._doc_items_entry_name == nil) or def._doc_items_create_entry == false) or forced then
if def._doc_items_longdesc then
ld = def._doc_items_longdesc
end
@@ -1072,12 +1017,16 @@ local function gather_descs()
-- Add entry for the default tool (“hand”)
-- Custom longdesc and usagehelp may be set by mods through the add_helptexts function
- if minetest.registered_items[""]._doc_items_longdesc then
- help.longdesc[""] = minetest.registered_items[""]._doc_items_longdesc
- elseif help.longdesc[""] == nil then
+ local handdef = minetest.registered_items[""]
+ if handdef._doc_items_longdesc then
+ help.longdesc[""] = handdef._doc_items_longdesc
+ else
-- Default text
help.longdesc[""] = S("Whenever you are not wielding any item, you use the hand which acts as a tool with its own capabilities. When you are wielding an item which is not a mining tool or a weapon it will behave as if it would be the hand.")
end
+ if handdef._doc_items_entry_name then
+ item_name_overrides[""] = handdef._doc_items.entry_name
+ end
doc.new_entry("tools", "", {
name = item_name_overrides[""],
hidden = false,
@@ -1085,7 +1034,7 @@ local function gather_descs()
longdesc = help.longdesc[""],
usagehelp = help.usagehelp[""],
itemstring = "",
- def = minetest.registered_items[""]
+ def = handdef,
}
})
-- Add tool entries