Add ice and snowblock stair/slab
[minetest_doc_minetest_game.git] / init.lua
blob45d73e7af915db5d9465a83e721ca1557a3bbda1
1 -- Boilerplate to support localized strings if intllib mod is installed.
2 local S
3 if minetest.get_modpath("intllib") then
4 S = intllib.Getter(minetest.get_current_modname())
5 else
6 S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
7 end
9 local groupdefs = {
10 ["book"] = S("Books"),
11 ["vessel"] = S("Vessels"),
12 ["dye"] = S("Dyes"),
13 ["stick"] = S("Sticks"),
14 ["wool"] = S("Wool"),
15 ["sand"] = S("Sand"),
16 ["wood"] = S("Wood"),
17 ["stone"] = S("Stones"),
18 ["metal"] = S("Metal"),
19 ["tree"] = S("Tree Trunks"),
20 ["fence"] = S("Fences"),
21 ["wall"] = S("Walls"),
22 ["leaves"] = S("Leaves and Needles"),
23 ["flower"] = S("Flowers"),
24 ["sapling"] = S("Saplings"),
25 ["water"] = S("Water"),
26 ["lava"] = S("Lava"),
27 ["coal"] = S("Coal"),
28 ["water_bucket"] = S("Water buckets"),
29 ["flora"] = S("Flora"),
31 ["cracky"] = S("Cracky"),
32 ["crumbly"] = S("Crumbly"),
33 ["choppy"] = S("Choppy"),
34 ["snappy"] = S("Snappy"),
35 ["oddly_breakable_by_hand"] = S("Hand-breakable"),
37 ["fleshy"] = S("Flesh"),
40 local miscgroups = {
41 "book", -- for placing in bookshelf
42 "vessel", -- for placing in vessels shelf
43 "sand", -- for cactus growth ABM
44 "flora", -- for the plant spreading ABM
45 "sapling", -- for the sapling growth ABM
46 "water", -- for the obsidian and farming ABMs
49 local forced_items = {
50 "fire:basic_flame",
51 "farming:wheat_8",
52 "farming:cotton_8",
55 local suppressed_items = {
56 "default:water_flowing",
57 "default:river_water_flowing",
58 "default:lava_flowing",
59 "default:dry_grass_2",
60 "default:dry_grass_3",
61 "default:dry_grass_4",
62 "default:dry_grass_5",
63 "default:grass_2",
64 "default:grass_3",
65 "default:grass_4",
66 "default:grass_5",
67 "default:furnace_active",
68 "doors:door_wood",
69 "doors:door_steel",
70 "doors:door_glass",
71 "doors:door_obsidian_glass",
72 "doors:door_wood_a",
73 "doors:door_steel_a",
74 "doors:door_glass_a",
75 "doors:door_obsidian_glass_a",
76 "doors:door_wood_b",
77 "doors:door_steel_b",
78 "doors:door_glass_b",
79 "doors:door_obsidian_glass_b",
80 "doors:gate_wood_open",
81 "doors:gate_junglewood_open",
82 "doors:gate_acacia_wood_open",
83 "doors:gate_aspen_wood_open",
84 "doors:gate_pine_wood_open",
85 "doors:trapdoor_steel_open",
86 "doors:trapdoor_open",
87 "doors:hidden",
88 "xpanes:pane",
89 "xpanes:bar",
92 local hidden_items = {
93 "default:cloud",
94 "default:dirt_with_grass_footsteps",
97 local item_name_overrides = {
98 ["screwdriver:screwdriver"] = S("Screwdriver"),
99 ["carts:cart"] = S("Cart"),
100 ["fire:basic_flame"] = S("Basic Flame"),
101 ["farming:wheat_8"] = S("Wheat Plant"),
102 ["farming:cotton_8"] = S("Cotton Plant"),
103 ["default:lava_source"] = S("Lava"),
104 ["default:water_source"] = S("Water"),
105 ["default:river_water_source"] = S("River Water"),
106 ["doors:door_wood_a"] = minetest.registered_items["doors:door_wood"].description,
107 ["doors:door_steel_a"] = minetest.registered_items["doors:door_steel"].description,
108 ["doors:door_glass_a"] = minetest.registered_items["doors:door_glass"].description,
109 ["doors:door_obsidian_glass_a"] = minetest.registered_items["doors:door_obsidian_glass"].description,
112 local image_overrides = {
113 ["doors:door_wood_a"] = minetest.registered_items["doors:door_wood"].inventory_image,
114 ["doors:door_steel_a"] = minetest.registered_items["doors:door_steel"].inventory_image,
115 ["doors:door_glass_a"] = minetest.registered_items["doors:door_glass"].inventory_image,
116 ["doors:door_obsidian_glass_a"] = minetest.registered_items["doors:door_obsidian_glass"].inventory_image,
119 doc.sub.items.add_friendly_group_names(groupdefs)
120 doc.sub.items.add_notable_groups(miscgroups)
122 for i=1, #hidden_items do
123 local item = minetest.registered_items[hidden_items[i]]
124 if item then
125 minetest.override_item(hidden_items[i], { _doc_items_hidden = true } )
128 for i=1, #forced_items do
129 local item = minetest.registered_items[forced_items[i]]
130 if item then
131 minetest.override_item(forced_items[i], { _doc_items_create_entry = true} )
134 for i=1, #suppressed_items do
135 local item = minetest.registered_items[suppressed_items[i]]
136 if item then
137 minetest.override_item(suppressed_items[i], { _doc_items_create_entry = false} )
140 for itemstring, data in pairs(item_name_overrides) do
141 if minetest.registered_items[itemstring] ~= nil then
142 minetest.override_item(itemstring, { _doc_items_entry_name = data} )
145 for itemstring, data in pairs(image_overrides) do
146 if minetest.registered_items[itemstring] ~= nil then
147 minetest.override_item(itemstring, { _doc_items_image = data} )
151 -- Minetest Game Factoids
153 -- Lava cooling
154 local function f_cools_lava(itemstring, def)
155 if def.groups.cools_lava ~= nil or def.groups.water ~= nil then
156 return S("This block turns adjacent lava sources into obsidian and adjacent flowing lava into stone.")
157 else
158 return ""
162 -- Groups flammable, puts_out_fire
163 local function f_fire(itemstring, def)
164 local s = ""
165 -- Fire
166 if def.groups.flammable ~= nil then
167 s = s .. S("This block is flammable.")
170 if def.groups.puts_out_fire ~= nil then
171 if def.groups.flammable ~= nil then
172 s = s .. "\n"
174 s = s .. S("This block will extinguish nearby fire.")
177 if def.groups.igniter ~= nil then
178 if def.groups.flammable ~= nil or def.groups.puts_out_fire ~= nil then
179 s = s .. "\n"
181 s = s .. S("This block will set flammable blocks within a radius of @1 on fire.", def.groups.igniter)
182 if def.walkable == false then
183 s = s .. S(" It also destroys flammable items which have been dropped inside.")
186 return s
189 -- flora group
190 local function f_flora(itemstring, def)
191 if def.groups.flora == 1 then
192 local groupname = doc.sub.items.get_group_name("flora")
193 return S("This block belongs to the @1 group. It a living organism which likes to grow and spread on dirt with grass or dirt with dry grass when it is in light. Spreading will stop when the surrounding area is too crammed with @2 blocks. On desert sand, it will wither and die and turn into a dry shrub.", groupname, groupname)
194 else
195 return ""
199 -- soil group
200 local function f_soil(itemstring, def)
201 if def.groups.soil == 1 then
202 return S("This block serves as a soil for saplings. Blocks in the “@1” group will grow into trees on this block.", doc.sub.items.get_group_name("sapling"))
203 elseif def.groups.soil == 2 or def.groups.soil == 3 then
204 return S("This block serves as a soil for saplings as well as plants grown from seeds. It supports their growth.")
205 else
206 return ""
210 local function f_leafdecay(itemstring, def)
211 local formstring = ""
212 if def.groups.leafdecay ~= nil then
213 local groupname = doc.sub.items.get_group_name("tree")
214 if def.groups.leafdecay_drop ~= nil then
215 formstring = S("This block may drop as an item when no trunk is nearby. This is prevented if any block of the group “@1” is nearby (up to a distance of @2), the block is completely surrounded by blocks which are neither air or a liquid or it has been manually placed by a player.", groupname, def.groups.leafdecay)
216 else
217 if def.drop ~= "" and def.drop ~= nil and def.drop ~= itemstring then
218 formstring = S("This block may decay when no trunk is nearby. When decaying, it disappears and may drop one of its mining drops (but never itself). Decay is prevented if any block of the group “@1” is nearby (up to a distance of @2), the block is completely surrounded by blocks which are neither air or a liquid or it has been placed by a player.", groupname, def.groups.leafdecay)
219 else
220 formstring = S("This block may decay and disappear when no trunk is nearby. Decay is prevented if any block of the group “@1” is nearby (up to a distance of @2), the block is completely surrounded by blocks which are neither air or a liquid or it has been placed by a player.", groupname, def.groups.leafdecay)
224 return formstring
227 local function f_spreading_dirt_type(itemstring, def)
228 if def.groups.spreading_dirt_type then
229 return S("Under sunlight, this block slowly spreads its dirt cover towards nearby dirt blocks. In the shadows, this block eventually loses its dirt cover and turns into plain dirt.")
230 else
231 return ""
235 local function f_hoe_soil(itemstring, def)
236 if def.soil then
237 local name, node
238 nodedef = minetest.registered_nodes[def.soil.dry]
239 if nodedef then
240 name = nodedef.description
242 if name then
243 return S("This block can be turned into @1 with a hoe.", name)
244 else
245 return S("This block can be cultivated by a hoe.")
247 else
248 return ""
252 --[[ Node defines skeleton key and key callbacks which probably implies that
253 it can be unlocked by keys ]]
254 local function f_key(itemstring, def)
255 if def.on_key_use and def.on_skeleton_key_use then
256 return S("This block is compatible with keys.")
257 else
258 return ""
262 doc.sub.items.register_factoid("nodes", "use", f_key)
263 doc.sub.items.register_factoid("nodes", "use", f_hoe_soil)
264 doc.sub.items.register_factoid("nodes", "groups", f_cools_lava)
265 doc.sub.items.register_factoid("nodes", "groups", f_fire)
266 doc.sub.items.register_factoid("nodes", "groups", f_flora)
267 doc.sub.items.register_factoid("nodes", "groups", f_leafdecay)
268 doc.sub.items.register_factoid("nodes", "groups", f_soil)
269 doc.sub.items.register_factoid("nodes", "groups", f_spreading_dirt_type)
271 -- Add node aliases
272 for i=2,5 do
273 doc.add_entry_alias("nodes", "default:grass_1", "nodes", "default:grass_"..i)
274 doc.add_entry_alias("nodes", "default:dry_grass_1", "nodes", "default:dry_grass_"..i)
276 for i=1,7 do
277 doc.add_entry_alias("nodes", "farming:wheat_8", "nodes", "farming:wheat_"..i)
278 doc.add_entry_alias("nodes", "farming:cotton_8", "nodes", "farming:cotton_"..i)
280 doc.add_entry_alias("nodes", "default:lava_source", "nodes", "default:lava_flowing")
281 doc.add_entry_alias("nodes", "default:water_source", "nodes", "default:water_flowing")
282 doc.add_entry_alias("nodes", "default:river_water_source", "nodes", "default:river_water_flowing")
283 doc.add_entry_alias("nodes", "default:furnace", "nodes", "default:furnace_active")
284 doc.add_entry_alias("nodes", "default:torch", "nodes", "default:torch_wall")
285 doc.add_entry_alias("nodes", "default:torch", "nodes", "default:torch_ceiling")
286 doc.add_entry_alias("nodes", "doors:door_wood_fake", "craftitems", "doors:door_wood")
287 doc.add_entry_alias("nodes", "doors:door_steel_fake", "craftitems", "doors:door_steel")
288 doc.add_entry_alias("nodes", "doors:door_glass_fake", "craftitems", "doors:door_glass")
289 doc.add_entry_alias("nodes", "doors:door_obsidian_glass_fake", "craftitems", "doors:door_obsidian_glass")
290 doc.add_entry_alias("nodes", "doors:door_wood_fake", "nodes", "doors:door_wood_a")
291 doc.add_entry_alias("nodes", "doors:door_steel_fake", "nodes", "doors:door_steel_a")
292 doc.add_entry_alias("nodes", "doors:door_glass_fake", "nodes", "doors:door_glass_a")
293 doc.add_entry_alias("nodes", "doors:door_obsidian_glass_fake", "nodes", "doors:door_obsidian_glass_a")
294 doc.add_entry_alias("nodes", "doors:door_wood_fake", "nodes", "doors:door_wood_b")
295 doc.add_entry_alias("nodes", "doors:door_steel_fake", "nodes", "doors:door_steel_b")
296 doc.add_entry_alias("nodes", "doors:door_glass_fake", "nodes", "doors:door_glass_b")
297 doc.add_entry_alias("nodes", "doors:door_obsidian_glass_fake", "nodes", "doors:door_obsidian_glass_b")
298 doc.add_entry_alias("nodes", "doors:gate_wood_closed", "nodes", "doors:gate_wood_open")
299 doc.add_entry_alias("nodes", "doors:gate_junglewood_closed", "nodes", "doors:gate_junglewood_open")
300 doc.add_entry_alias("nodes", "doors:gate_acacia_wood_closed", "nodes", "doors:gate_acacia_wood_open")
301 doc.add_entry_alias("nodes", "doors:gate_aspen_wood_closed", "nodes", "doors:gate_aspen_wood_open")
302 doc.add_entry_alias("nodes", "doors:gate_pine_wood_closed", "nodes", "doors:gate_pine_wood_open")
303 doc.add_entry_alias("nodes", "doors:trapdoor", "nodes", "doors:trapdoor_open")
304 doc.add_entry_alias("nodes", "doors:trapdoor_steel", "nodes", "doors:trapdoor_steel_open")
305 doc.add_entry_alias("nodes", "tnt:tnt", "nodes", "tnt:tnt_burning")
306 doc.add_entry_alias("nodes", "tnt:gunpowder", "nodes", "tnt:gunpowder_burning")
307 doc.add_entry_alias("nodes", "xpanes:pane_flat", "nodes", "xpanes:pane")
308 doc.add_entry_alias("nodes", "xpanes:bar_flat", "nodes", "xpanes:bar")
310 -- Gather help texts
311 dofile(minetest.get_modpath("doc_minetest_game") .. "/helptexts.lua")
313 -- Register boat object for doc_identifier
314 if minetest.get_modpath("doc_identifier") ~= nil then
315 doc.sub.identifier.register_object("boats:boat", "craftitems", "boats:boat")
316 doc.sub.identifier.register_object("carts:cart", "craftitems", "carts:cart")
320 --[[ Completely create door entries from scratch. We suppressed all normal door entries
321 before. This is quite a hack, but required because of the weird way how door items are
322 implemented in Minetest Game.
323 CHECKME: As doors are sensitive, check this entire section after each Minetest Game release.
326 local doors = { "doors:door_wood", "doors:door_steel", "doors:door_glass", "doors:door_obsidian_glass" }
328 for d=1, #doors do
329 local door = doors[d]
330 local def1 = table.copy(minetest.registered_items[door])
331 local def2 = table.copy(minetest.registered_items[door.."_a"])
333 def2._doc_items_image = def1.inventory_image
334 def2.drop = nil
335 def2.stack_max = def1.stack_max or minetest.nodedef_default.stack_max
336 def2.liquidtype = "none"
337 def2._doc_items_longdesc = def1._doc_items_longdesc
338 def2._doc_items_usagehelp = def1._doc_items_usagehelp
340 doc.add_entry("nodes", door.."_fake", {
341 name = def2.description,
342 hidden = def2._doc_items_hidden == true,
343 data = {
344 itemstring = door,
345 longdesc = def2._doc_items_longdesc,
346 usagehelp = def2._doc_items_usagehelp,
347 def = def2
352 -- Remove the superficial “help” comment from screwdriver and cart description as redundant
353 minetest.override_item("screwdriver:screwdriver", {description = item_name_overrides["screwdriver:screwdriver"]})
354 minetest.override_item("carts:cart", {description = item_name_overrides["carts:cart"]})