Add extended tooltips

This commit is contained in:
Wuzzy 2020-02-19 04:54:17 +01:00
parent 71cee9920a
commit ba74546d48
81 changed files with 647 additions and 22 deletions

@ -279,7 +279,7 @@ local images = { "oak", "spruce", "birch", "jungle", "acacia", "dark_oak" }
for b=1, #boat_ids do
local itemstring = "mcl_boats:"..boat_ids[b]
local longdesc, usagehelp, help, helpname
local longdesc, usagehelp, tt_help, help, helpname
help = false
-- Only create one help entry for all boats
if b == 1 then
@ -288,9 +288,11 @@ for b=1, #boat_ids do
usagehelp = S("Rightclick on a water source to place the boat. Rightclick the boat to enter it. Use [Left] and [Right] to steer, [Forwards] to speed up and [Backwards] to slow down or move backwards. Rightclick the boat again to leave it, punch the boat to make it drop as an item.")
helpname = S("Boat")
end
tt_help = S("Water vehicle")
minetest.register_craftitem(itemstring, {
description = names[b],
_tt_help = tt_help,
_doc_items_create_entry = help,
_doc_items_entry_name = helpname,
_doc_items_longdesc = longdesc,

@ -526,7 +526,7 @@ mcl_minecarts.place_minecart = function(itemstack, pointed_thing)
end
local register_craftitem = function(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
local register_craftitem = function(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
entity_mapping[itemstring] = entity_id
local groups = { minecart = 1, transport = 1 }
@ -566,6 +566,7 @@ local register_craftitem = function(itemstring, entity_id, description, longdesc
groups = groups,
}
def.description = description
def._tt_help = tt_help
def._doc_items_longdesc = longdesc
def._doc_items_usagehelp = usagehelp
def.inventory_image = icon
@ -588,9 +589,9 @@ Register a minecart
* on_activate_by_rail: Called when above activator rail
* creative: If false, don't show in Creative Inventory
]]
local function register_minecart(itemstring, entity_id, description, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
local function register_minecart(itemstring, entity_id, description, tt_help, longdesc, usagehelp, mesh, textures, icon, drop, on_rightclick, on_activate_by_rail, creative)
register_entity(entity_id, mesh, textures, drop, on_rightclick, on_activate_by_rail)
register_craftitem(itemstring, entity_id, description, longdesc, usagehelp, icon, creative)
register_craftitem(itemstring, entity_id, description, tt_help, longdesc, usagehelp, icon, creative)
if minetest.get_modpath("doc_identifier") ~= nil then
doc.sub.identifier.register_object(entity_id, "craftitems", itemstring)
end
@ -601,6 +602,7 @@ register_minecart(
"mcl_minecarts:minecart",
"mcl_minecarts:minecart",
S("Minecart"),
S("Vehicle for fast travel on rails"),
S("Minecarts can be used for a quick transportion on rails.") .. "\n" ..
S("Minecarts only ride on rails and always follow the tracks. At a T-junction with no straight way ahead, they turn left. The speed is affected by the rail type."),
S("You can place the minecart on rails. Right-click it to enter it. Punch it to get it moving.") .. "\n" ..
@ -640,7 +642,7 @@ register_minecart(
"mcl_minecarts:chest_minecart",
"mcl_minecarts:chest_minecart",
S("Minecart with Chest"),
nil, nil,
nil, nil, nil,
"mcl_minecarts_minecart_chest.b3d",
{ "mcl_chests_normal.png", "mcl_minecarts_minecart.png" },
"mcl_minecarts_minecart_chest.png",
@ -652,6 +654,7 @@ register_minecart(
"mcl_minecarts:furnace_minecart",
"mcl_minecarts:furnace_minecart",
S("Minecart with Furnace"),
nil,
S("A minecart with furnace is a vehicle that travels on rails. It can propel itself with fuel."),
S("Place it on rails. If you give it some coal, the furnace will start burning for a long time and the minecart will be able to move itself. Punch it to get it moving.") .. "\n" ..
S("To obtain the minecart and furnace, punch them while holding down the sneak key."),
@ -705,7 +708,7 @@ register_minecart(
"mcl_minecarts:command_block_minecart",
"mcl_minecarts:command_block_minecart",
S("Minecart with Command Block"),
nil, nil,
nil, nil, nil,
"mcl_minecarts_minecart_block.b3d",
{
"jeija_commandblock_off.png^[verticalframe:2:0",
@ -726,7 +729,7 @@ register_minecart(
"mcl_minecarts:hopper_minecart",
"mcl_minecarts:hopper_minecart",
S("Minecart with Hopper"),
nil, nil,
nil, nil, nil,
"mcl_minecarts_minecart_hopper.b3d",
{
"mcl_hoppers_hopper_inside.png",
@ -744,6 +747,7 @@ register_minecart(
"mcl_minecarts:tnt_minecart",
"mcl_minecarts:tnt_minecart",
S("Minecart with TNT"),
S("Vehicle for fast travel on rails").."\n"..S("Can be ignited by tools or powered activator rail"),
S("A minecart with TNT is an explosive vehicle that travels on rail."),
S("Place it on rails. Punch it to move it. The TNT is ignited with a flint and steel or when the minecart is on an powered activator rail.") .. "\n" ..
S("To obtain the minecart and TNT, punch them while holding down the sneak key. You can't do this if the TNT was ignited."),

@ -73,6 +73,7 @@ register_rail("mcl_minecarts:rail",
{"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
{
description = S("Rail"),
_tt_help = S("Track for minecarts"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Normal rails slightly slow down minecarts due to friction."),
_doc_items_usagehelp = railuse,
}
@ -83,6 +84,7 @@ register_rail("mcl_minecarts:golden_rail",
{"mcl_minecarts_rail_golden.png", "mcl_minecarts_rail_golden_curved.png", "mcl_minecarts_rail_golden_t_junction.png", "mcl_minecarts_rail_golden_crossing.png"},
{
description = S("Powered Rail"),
_tt_help = S("Track for minecarts").."\n"..S("Speed up when powered, slow down when not powered"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Powered rails are able to accelerate and brake minecarts."),
_doc_items_usagehelp = railuse .. "\n" .. S("Without redstone power, the rail will brake minecarts. To make this rail accelerate minecarts, power it with redstone power."),
_rail_acceleration = -3,
@ -121,6 +123,7 @@ register_rail("mcl_minecarts:activator_rail",
{"mcl_minecarts_rail_activator.png", "mcl_minecarts_rail_activator_curved.png", "mcl_minecarts_rail_activator_t_junction.png", "mcl_minecarts_rail_activator_crossing.png"},
{
description = S("Activator Rail"),
_tt_help = S("Track for minecarts").."\n"..S("Activates minecarts when powered"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. Activator rails are used to activate special minecarts."),
_doc_items_usagehelp = railuse .. "\n" .. S("To make this rail activate minecarts, power it with redstone power and send a minecart over this piece of rail."),
mesecons = {
@ -172,6 +175,7 @@ register_rail("mcl_minecarts:detector_rail",
{"mcl_minecarts_rail_detector.png", "mcl_minecarts_rail_detector_curved.png", "mcl_minecarts_rail_detector_t_junction.png", "mcl_minecarts_rail_detector_crossing.png"},
{
description = S("Detector Rail"),
_tt_help = S("Track for minecarts").."\n"..S("Emits redstone power when a minecart is detected"),
_doc_items_longdesc = S("Rails can be used to build transport tracks for minecarts. A detector rail is able to detect a minecart above it and powers redstone mechanisms."),
_doc_items_usagehelp = railuse .. "\n" .. S("To detect a minecart and provide redstone power, connect it to redstone trails or redstone mechanisms and send any minecart over the rail."),
mesecons = {

@ -4,6 +4,7 @@ local S = minetest.get_translator("mcl_mobs")
-- name tag
minetest.register_craftitem("mcl_mobs:nametag", {
description = S("Name Tag"),
_tt_help = S("Give names to mobs").."\n"..S("Set name at anvil"),
_doc_items_longdesc = S("A name tag is an item to name a mob."),
_doc_items_usagehelp = S("Before you use the name tag, you need to set a name at an anvil. Then you can use the name tag to name a mob. This uses up the name tag."),
inventory_image = "mobs_nametag.png",

@ -532,6 +532,7 @@ if c("totem") then
-- Totem of Undying
minetest.register_craftitem("mobs_mc:totem", {
description = S("Totem of Undying"),
_tt_help = S("Protects you from death while wielding it"),
_doc_items_longdesc = S("A totem of undying is a rare artifact which may safe you from certain death."),
_doc_items_usagehelp = S("The totem only works while you hold it in your hand. If you receive fatal damage, you are saved from death and you get a second chance with 1 HP. The totem is destroyed in the process, however."),
inventory_image = "mcl_totems_totem.png",

@ -161,6 +161,7 @@ end
minetest.register_tool("doc_identifier:identifier_solid", {
description = S("Lookup Tool"),
_tt_help = S("Show help for pointed thing"),
_doc_items_longdesc = S("This useful little helper can be used to quickly learn more about about one's closer environment. It identifies and analyzes blocks, items and other things and it shows extensive information about the thing on which it is used."),
_doc_items_usagehelp = S("Punch any block, item or other thing about you wish to learn more about. This will open up the appropriate help entry. The tool comes in two modes which are changed by using. In liquid mode, this tool points to liquids as well while in solid mode this is not the case."),
_doc_items_hidden = false,

@ -0,0 +1 @@
tt

103
mods/HELP/mcl_tt/init.lua Normal file

@ -0,0 +1,103 @@
local S = minetest.get_translator("mcl_tt")
-- Armor
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local s = ""
local head = minetest.get_item_group(itemstring, "armor_head")
local torso = minetest.get_item_group(itemstring, "armor_torso")
local legs = minetest.get_item_group(itemstring, "armor_legs")
local feet = minetest.get_item_group(itemstring, "armor_feet")
if head > 0 then
s = s .. S("Head armor")
end
if torso > 0 then
s = s .. S("Torso armor")
end
if legs > 0 then
s = s .. S("Legs armor")
end
if feet > 0 then
s = s .. S("Feet armor")
end
if s == "" then
s = nil
end
return s
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local s = ""
local use = minetest.get_item_group(itemstring, "mcl_armor_uses")
local pts = minetest.get_item_group(itemstring, "mcl_armor_points")
if pts > 0 then
s = s .. S("Armor points: @1", pts)
s = s .. "\n"
end
if use > 0 then
s = s .. S("Armor durability: @1", use)
end
if s == "" then
s = nil
end
return s
end)
-- Horse armor
tt.register_snippet(function(itemstring)
local armor_g = minetest.get_item_group(itemstring, "horse_armor")
if armor_g and armor_g > 0 then
return S("Protection: @1%", 100 - armor_g)
end
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local s = ""
if def.groups.eatable and def.groups.eatable > 0 then
s = s .. S("Hunger points: +@1", def.groups.eatable)
end
if def._mcl_saturation and def._mcl_saturation > 0 then
if s ~= "" then
s = s .. "\n"
end
s = s .. S("Saturation points: +@1", string.format("%.1f", def._mcl_saturation))
end
if s == "" then
s = nil
end
return s
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if minetest.get_item_group(itemstring, "crush_after_fall") == 1 then
return S("Deals damage when falling")
end
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if def.groups.place_flowerlike == 1 then
return S("Grows on grass blocks or dirt")
elseif def.groups.place_flowerlike == 2 then
return S("Grows on grass blocks, podzol, dirt or coarse dirt")
end
end)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if def.groups.flammable then
return S("Flammable")
end
end)
tt.register_snippet(function(itemstring)
if itemstring == "mcl_heads:zombie" then
return S("Zombie view range: -50%")
elseif itemstring == "mcl_heads:skeleton" then
return S("Skeleton view range: -50%")
elseif itemstring == "mcl_heads:creeper" then
return S("Creeper view range: -50%")
end
end)

33
mods/HELP/tt/API.md Normal file

@ -0,0 +1,33 @@
# Tooltip API
This API explains how to handle the extended item tooltips (`description` field).
## Fields
Add these to the item definition.
* `_tt_ignore`: If `true`, the `description` of this item won't be altered at all
* `_tt_help`: Custom help text
* `_tt_food`: If `true`, item is a food item that can be consumed by the player
* `_tt_food_hp`: Health increase (in HP) for player when consuming food item
Once this mod had overwritten the `description` field of an item was overwritten, it will save the original (unaltered) `description` in the `_tt_original_description` field.
## `tt.register_snippet(func)`
Register a custom snippet function.
`func` is a function of the form `func(itemstring)`.
It will be called for (nearly) every itemstring.
Returns: Two values, the first one is required.
1st return value: A string you want to append to this item or `nil` if nothing shall be appended.
2nd return value: If nil, `tt` will take of the text color. If a ColorString in `"#RRGGBB"` format, entire text is colorized in this color. Return `false` to force `tt` to not apply text any colorization (useful if you want to call `minetest.colorize` yourself.
Example:
```
tt.register_snippet(function(itemstring)
if minetest.get_item_group(itemstring, "magic") == 1 then
return "This item is magic"
end
end)
```

12
mods/HELP/tt/README.md Normal file

@ -0,0 +1,12 @@
# Extended Tooltip (`tt`)
This mod extends the tooltip of items to add more informative texts.
It displays the following useful information:
* Weapon damage and speed
* Tool properties
* Noteworthy block properties
* Food satiation
* Custom help text (added by mods)
## License
MIT License.

55
mods/HELP/tt/init.lua Normal file

@ -0,0 +1,55 @@
local S = minetest.get_translator("tt")
tt = {}
tt.COLOR_DEFAULT = "#d0ffd0"
tt.COLOR_DANGER = "#ffff00"
tt.COLOR_GOOD = "#00ff00"
-- API
tt.registered_snippets = {}
tt.register_snippet = function(func)
table.insert(tt.registered_snippets, func)
end
-- Register core snippets
dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets_core.lua")
dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets_builtin.lua")
-- Apply item description updates
local function append_snippets()
for itemstring, def in pairs(minetest.registered_items) do
if itemstring ~= "" and itemstring ~= "air" and itemstring ~= "ignore" and itemstring ~= "unknown" and def ~= nil and def.description ~= nil and def.description ~= "" and def._tt_ignore ~= true then
local desc = def.description
local orig_desc = desc
local first = true
-- Apply snippets
for s=1, #tt.registered_snippets do
local str, snippet_color = tt.registered_snippets[s](itemstring)
if snippet_color == nil then
snippet_color = tt.COLOR_DEFAULT
elseif snippet_color == false then
snippet_color = false
end
if str then
if first then
first = false
end
desc = desc .. "\n"
if snippet_color then
desc = desc .. minetest.colorize(snippet_color, str)
else
desc = desc .. str
end
end
end
if desc ~= def.description then
minetest.override_item(itemstring, { description = desc, _tt_original_description = orig_desc })
end
end
end
end
minetest.register_on_mods_loaded(append_snippets)

@ -0,0 +1,27 @@
# textdomain:tt
Damage: @1=
Damage (@1): @2=
Healing: @1=
Healing (@1): @2=
Full punch interval: @1s=
Food item=
+@1 satiation=
@1 satiation=
+@1 food points=
Contact damage: @1 per second=
Contact healing: @1 per second=
Drowning damage: @1=
Bouncy (@1%)=
Luminance: @1=
Slippery=
Climbable=
Climbable (only downwards)=
No jumping=
No swimming upwards=
No rising=
Fall damage: @1%=
Fall damage: +@1%=
No fall damage=
Digs @1 blocks=
Digs @1 blocks instantly=
Minimum dig time: @1s=

@ -0,0 +1,27 @@
# textdomain:tt
Damage: @1=Schaden: @1
Damage (@1): @2=Schaden (@1): @2
Healing: @1=Heilung: @1
Healing (@1): @2=Heilung (@1): @2
Full punch interval: @1s=Zeit zum Ausholen: @1s
Food item=Lebensmittel
+@1 satiation=+@1 Sättigung
@1 satiation=@1 Sättigung
+@1 food points=+@1 Nahrungspunkte
Contact damage: @1 per second=Kontaktschaden: @1 pro Sekunde
Contact healing: @1 per second=Kontaktheilung: @1 pro Sekunde
Drowning damage: @1=Ertrinkensschaden: @1
Bouncy (@1%)=Sprunghaft (@1%)
Luminance: @1=Lichtstärke: @1
Slippery=Rutschig
Climbable=Erkletterbar
Climbable (only downwards)=Erkletterbar (nur nach unten)
No jumping=Kein Springen
No swimming upwards=Kein nach oben schwimmen
No rising=Kein Aufsteigen
Fall damage: @1%=Fallschaden: @1%
Fall damage: +@1%=Fallschaden: +@1%
No fall damage=Kein Fallschaden
Digs @1 blocks=Gräbt „@1“-Blöcke
Digs @1 blocks instantly=Gräbt „@1“-Blöcke sofort
Minimum dig time: @1s=Minimale Grabezeit: @1s

2
mods/HELP/tt/mod.conf Normal file

@ -0,0 +1,2 @@
name = tt
description = Appends a helpful tooltip to the item description

@ -0,0 +1,210 @@
local S = minetest.get_translator("tt")
local function get_min_digtime(caps)
local mintime
local unique = true
local maxlevel = caps.maxlevel
if not maxlevel then
maxlevel = 1
end
if maxlevel > 1 then
unique = false
end
if caps.times then
for r=1,3 do
local time = caps.times[r]
if time and maxlevel > 1 then
time = time / maxlevel
end
if time and ((not mintime) or (time < mintime)) then
if mintime and (time < mintime) then
unique = false
end
mintime = time
end
end
end
return mintime, unique
end
local function newline(str)
if str ~= "" then
str = str .. "\n"
end
return str
end
-- Digging capabilities of tool
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if not def.tool_capabilities then
return
end
local groupcaps = def.tool_capabilities.groupcaps
if not groupcaps then
return
end
local formstring = ""
local capstr = ""
local caplines = 0
for k,v in pairs(groupcaps) do
local speedstr = ""
local miningusesstr = ""
-- Mining capabilities
caplines = caplines + 1
local maxlevel = v.maxlevel
if not maxlevel then
-- Default from tool.h
maxlevel = 1
end
-- Digging speed
local speed_class = def.groups and def.groups.dig_speed_class
if speed_class == 1 then
speedstr = S("Painfully slow")
elseif speed_class == 2 then
speedstr = S("Very slow")
elseif speed_class == 3 then
speedstr = S("Slow")
elseif speed_class == 4 then
speedstr = S("Fast")
elseif speed_class == 5 then
speedstr = S("Very fast")
elseif speed_class == 6 then
speedstr = S("Extremely fast")
elseif speed_class == 7 then
speedstr = S("Instantaneous")
end
-- Number of mining uses
local base_uses = v.uses
if not base_uses then
-- Default from tool.h
base_uses = 20
end
if def._doc_items_durability == nil and base_uses > 0 then
local real_uses = base_uses * math.pow(3, maxlevel)
if real_uses < 65535 then
miningusesstr = S("@1 uses", real_uses)
else
miningusesstr = S("Unlimited uses")
end
end
if speedstr ~= "" then
capstr = capstr .. S("Mining speed: @1", speedstr) .. "\n"
end
if miningusesstr ~= "" then
capstr = capstr .. S("Mining durability: @1", miningusesstr) .. "\n"
end
-- Only show one group at max
break
end
if caplines > 0 then
-- Capabilities
formstring = formstring .. capstr
-- Max. drop level
local mdl = def.tool_capabilities.max_drop_level
if not def.tool_capabilities.max_drop_level then
mdl = 0
end
formstring = formstring .. S("Block breaking strength: @1", mdl)
end
if formstring == "" then
formstring = nil
end
return formstring
end)
-- Food
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc
if def._tt_food then
desc = S("Food item")
if def._tt_food_hp then
local msg = S("+@1 food points", def._tt_food_hp)
desc = desc .. "\n" .. msg
end
end
return desc
end)
-- Node info
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
local desc = ""
-- Health-related node facts
if def.damage_per_second then
if def.damage_per_second > 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Contact damage: @1 per second", def.damage_per_second))
elseif def.damage_per_second < 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("Contact healing: @1 per second", math.abs(def.damage_per_second)))
end
end
if def.drowning and def.drowning ~= 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Drowning damage: @1", def.drowning))
end
local tmp = minetest.get_item_group(itemstring, "fall_damage_add_percent")
if tmp > 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DANGER, S("Fall damage: +@1%", tmp))
elseif tmp == -100 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_GOOD, S("No fall damage"))
elseif tmp < 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Fall damage: @1%", tmp))
end
-- Movement-related node facts
if minetest.get_item_group(itemstring, "disable_jump") == 1 and not def.climbable then
if def.liquidtype == "none" then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No jumping"))
elseif minetest.get_item_group(itemstring, "fake_liquid") == 0 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No swimming upwards"))
else
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("No rising"))
end
end
if def.climbable then
if minetest.get_item_group(itemstring, "disable_jump") == 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable (only downwards)"))
else
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Climbable"))
end
end
if minetest.get_item_group(itemstring, "slippery") >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Slippery"))
end
local tmp = minetest.get_item_group(itemstring, "bouncy")
if tmp >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Bouncy (@1%)", tmp))
end
-- Node appearance
tmp = def.light_source
if tmp and tmp >= 1 then
desc = newline(desc)
desc = desc .. minetest.colorize(tt.COLOR_DEFAULT, S("Luminance: @1", tmp))
end
if desc == "" then
desc = nil
end
return desc, false
end)

@ -0,0 +1,11 @@
-- CORE SNIPPETS --
-- Custom text (_tt_help)
tt.register_snippet(function(itemstring)
local def = minetest.registered_items[itemstring]
if def._tt_help then
return def._tt_help
end
end)

@ -283,6 +283,7 @@ local dispenserdef = {
local horizontal_def = table.copy(dispenserdef)
horizontal_def.description = S("Dispenser")
horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Launches item when powered with redstone power")
horizontal_def._doc_items_longdesc = S("A dispenser is a block which acts as a redstone component which, when powered with redstone power, dispenses an item. It has a container with 9 inventory slots.")
horizontal_def._doc_items_usagehelp = S("Place the dispenser in one of 6 possible directions. The “hole” is where items will fly out of the dispenser. Use the dispenser to access its inventory. Insert the items you wish to dispense. Supply the dispenser with redstone energy once to dispense a random item.").."\n\n"..

@ -148,6 +148,7 @@ local dropperdef = {
local horizontal_def = table.copy(dropperdef)
horizontal_def.description = S("Dropper")
horizontal_def._tt_help = S("9 inventory slots").."\n"..S("Drops item when powered with redstone power")
horizontal_def._doc_items_longdesc = S("A dropper is a redstone component and a container with 9 inventory slots which, when supplied with redstone power, drops an item or puts it into a container in front of it.")
horizontal_def._doc_items_usagehelp = S("Droppers can be placed in 6 possible directions, items will be dropped out of the hole. Use the dropper to access its inventory. Supply it with redstone energy once to make the dropper drop or transfer a random item.")
horizontal_def.after_place_node = function(pos, placer, itemstack, pointed_thing)

@ -87,6 +87,7 @@ mesecon.register_node("mcl_observers:observer",
},
{
description = S("Observer"),
_tt_help = S("Observes block in front of it and sends a brief redstone pulse when it changes"),
_doc_items_longdesc = S("An observer is a redstone component which observes the block in front of it and sends a very short redstone pulse whenever this block changes."),
_doc_items_usagehelp = S("Place the observer directly in front of the block you want to observe with the “face” looking at the block. The arrow points to the side of the output, which is at the opposite side of the “face”. You can place your redstone dust or any other component here."),

@ -97,7 +97,11 @@ mesecon.register_button = function(basename, description, texture, recipeitem, s
groups_off.button_push_by_arrow = 1
groups_on.button_push_by_arrow = 1
end
local tt = S("Provides redstone power when pushed")
tt = tt .. "\n" .. S("Push duration: @1s", string.format("%.1f", button_timer))
if push_by_arrow then
tt = tt .. "\n" .. S("Pushable by arrow")
end
minetest.register_node("mesecons_button:button_"..basename.."_off", {
drawtype = "nodebox",
tiles = {texture},
@ -113,6 +117,7 @@ mesecon.register_button = function(basename, description, texture, recipeitem, s
node_box = boxes_off,
groups = groups_off,
description = description,
_tt_help = tt,
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = buttonuse,
on_place = on_button_place,

@ -204,6 +204,7 @@ end
minetest.register_node("mesecons_commandblock:commandblock_off", {
description = S("Command Block"),
_tt_help = S("Executes server commands when powered by redstone power"),
_doc_items_longdesc =
S("Command blocks are mighty redstone components which are able to alter reality itself. In other words, they cause the server to execute server commands when they are supplied with redstone power."),
_doc_items_usagehelp =

@ -181,9 +181,10 @@ boxes = {
}
end
local help, longdesc, usagehelp, icon, on_construct
local help, tt, longdesc, usagehelp, icon, on_construct
if i == 1 then
help = true
tt = S("Redstone component").."\n"..S("Restricts power to one direction").."\n"..S("Delays signal").."\n"..S("Output can be locked")
longdesc = S("Redstone repeaters are versatile redstone components with multiple purposes: 1. They only allow signals to travel in one direction. 2. They delay the signal. 3. Optionally, they can lock their output in one state.")
usagehelp = S("To power a redstone repeater, send a signal in “arrow” direction (the input). The signal goes out on the opposite side (the output) with a delay. To change the delay, use the redstone repeater. The delay is between 0.1 and 0.4 seconds long and can be changed in steps of 0.1 seconds. It is indicated by the position of the moving redstone torch.").."\n"..
S("To lock a repeater, send a signal from an adjacent repeater into one of its sides. While locked, the moving redstone torch disappears, the output doesn't change and the input signal is ignored.")
@ -231,6 +232,7 @@ minetest.register_node("mesecons_delayer:delayer_off_"..tostring(i), {
description = desc_off,
inventory_image = icon,
wield_image = icon,
_tt_help = tt,
_doc_items_create_entry = help,
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp,

@ -7,6 +7,7 @@ minetest.register_node("mesecons_lightstone:lightstone_off", {
groups = {handy=1, mesecon_effector_off = 1, mesecon = 2},
is_ground_content = false,
description= S("Redstone Lamp"),
_tt_help = S("Glows when powered by redstone power"),
_doc_items_longdesc = S("Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.", light),
sounds = mcl_sounds.node_sound_glass_defaults(),
mesecons = {effector = {

@ -2,6 +2,7 @@ local S = minetest.get_translator("mesecons_noteblock")
minetest.register_node("mesecons_noteblock:noteblock", {
description = S("Note Block"),
_tt_help = S("Plays a musical note when powered by redstone power"),
_doc_items_longdesc = S("A note block is a musical block which plays one of many musical notes and different intruments when it is punched or supplied with redstone power."),
_doc_items_usagehelp = S("Use the note block to choose the next musical note (there are 25 semitones, or 2 octaves). The intrument played depends on the material of the block below the note block:").."\n\n"..

@ -178,6 +178,7 @@ local usagehelp_piston = S("This block can have one of 6 possible orientations."
-- offstate
minetest.register_node("mesecons_pistons:piston_normal_off", {
description = S("Piston"),
_tt_help = S("Pushes block when powered by redstone power"),
_doc_items_longdesc = S("A piston is a redstone component with a pusher which pushes the block or blocks in front of it when it is supplied with redstone power. Not all blocks can be pushed, however."),
_doc_items_usagehelp = usagehelp_piston,
tiles = {
@ -280,6 +281,7 @@ local pistonspec_sticky = {
-- offstate
minetest.register_node("mesecons_pistons:piston_sticky_off", {
description = S("Sticky Piston"),
_tt_help = S("Pushes or pulls block when powered by redstone power"),
_doc_items_longdesc = S("A sticky piston is a redstone component with a sticky pusher which can be extended and retracted. It extends when it is supplied with redstone power. When the pusher extends, it pushes the block or blocks in front of it. When it retracts, it pulls back the single block in front of it. Note that not all blocks can be pushed or pulled."),
_doc_items_usagehelp = usagehelp_piston,

@ -99,6 +99,16 @@ function mesecon.register_pressure_plate(basename, description, textures_off, te
if not longdesc then
longdesc = S("A pressure plate is a redstone component which supplies its surrounding blocks with redstone power while someone or something rests on top of it.")
end
local tt = S("Provides redstone power when pushed")
if not activated_by then
tt = tt .. "\n" .. S("Pushed by players, mobs and objects")
elseif activated_by.mob and activated_by.player then
tt = tt .. "\n" .. S("Pushed by players and mobs")
elseif activated_by.mob then
tt = tt .. "\n" .. S("Pushed by mobs")
elseif activated_by.player then
tt = tt .. "\n" .. S("Pushed by players")
end
mesecon.register_node(basename, {
drawtype = "nodebox",
@ -125,6 +135,7 @@ function mesecon.register_pressure_plate(basename, description, textures_off, te
mesecons = {receptor = { state = mesecon.state.off, rules = mesecon.rules.pplate }},
_doc_items_longdesc = longdesc,
_tt_help = tt,
},{
node_box = pp_box_on,
selection_box = pp_box_on,

@ -58,6 +58,7 @@ minetest.register_node("mesecons_solarpanel:solar_panel_off", {
},
groups = {handy=1,axey=1, material_wood=1},
description=S("Daylight Sensor"),
_tt_help = S("Provides redstone power when in sunlight") .. "\n" ..S("Can be inverted"),
_doc_items_longdesc = S("Daylight sensors are redstone components which provide redstone power when they are in sunlight and no power otherwise. They can also be inverted.").."\n"..
S("In inverted state, they provide redstone power when they are not in sunlight and no power otherwise."),
_doc_items_usagehelp = S("Use the daylight sensor to toggle its state."),

@ -192,6 +192,7 @@ mcl_torches.register_torch("mesecon_torch_on", S("Redstone Torch"),
minetest.register_node("mesecons_torch:redstoneblock", {
description = S("Block of Redstone"),
_tt_help = S("Provides redstone power"),
_doc_items_longdesc = S("A block of redstone permanently supplies redstone power to its surrounding blocks."),
tiles = {"redstone_redstone_block.png"},
stack_max = 64,

@ -47,6 +47,7 @@ minetest.register_node("mesecons_walllever:wall_lever_off", {
groups = {handy=1, dig_by_water=1, destroy_by_lava_flow=1, dig_by_piston=1, attached_node_facedir=1},
is_ground_content = false,
description=S("Lever"),
_tt_help = S("Provides redstone power when flipped on"),
_doc_items_longdesc = S("A lever is a redstone component which can be flipped on and off. It supplies redstone power to adjacent blocks while it is in the “on” state."),
_doc_items_usagehelp = S("Use the lever to flip it on or off."),
on_rightclick = function (pos, node)

@ -217,7 +217,7 @@ local function register_wires()
local tiles_off = { crossing_off, crossing_off, straight0_off, straight1_off, straight0_off, straight1_off }
local tiles_on = { crossing_on, crossing_on, straight0_on, straight1_on, straight0_on, straight1_on }
local wirehelp, longdesc, usagehelp, img, desc_off, desc_on
local wirehelp, tt, longdesc, usagehelp, img, desc_off, desc_on
if nodeid == "00000000" then
-- Non-connected redstone wire
nodebox.fixed = {-8/16, -.5, -8/16, 8/16, -.5+1/64, 8/16}
@ -225,6 +225,7 @@ local function register_wires()
tiles_off = { dot_off, dot_off, "blank.png", "blank.png", "blank.png", "blank.png" }
tiles_on = { dot_on, dot_on, "blank.png", "blank.png", "blank.png", "blank.png" }
tt = S("Transmits redstone power, powers mechanisms")
longdesc = S("Redstone is a versatile conductive mineral which transmits redstone power. It can be placed on the ground as a trail.").."\n"..
S("A redstone trail can be in two states: Powered or not powered. A powered redstone trail will power (and thus activate) adjacent redstone components.").."\n"..
S("Redstone power can be received from various redstone components, such as a block of redstone or a button. Redstone power is used to activate numerous mechanisms, such as redstone lamps or pistons.")
@ -259,6 +260,7 @@ S("Read the help entries on the other redstone components to learn how redstone
description = desc_off,
inventory_image = img,
wield_image = img,
_tt_help = tt,
_doc_items_create_entry = wirehelp,
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp,

@ -449,6 +449,7 @@ S("• Tool + Tool: Place two tools of the same type in the input slots. The “
S("• Tool + Material: Some tools can also be repaired by combining them with an item that it's made of. For example, iron pickaxes can be repaired with iron ingots. This repairs the tool by 25%.").."\n"..
S("Armor counts as a tool. It is possible to repair and rename a tool in a single step.").."\n\n"..
S("The anvil has limited durability and 3 damage levels: undamaged, slightly damaged and very damaged. Each time you repair or rename something, there is a 12% chance the anvil gets damaged. Anvils also have a chance of being damaged when they fall by more than 1 block. If a very damaged anvil is damaged again, it is destroyed.")
anvildef0._tt_help = S("Repair and rename items")
local anvildef1 = table.copy(anvildef)
anvildef1.description = S("Slightly Damaged Anvil")

@ -89,6 +89,7 @@ end
-- TODO: The armor stand should be an entity
minetest.register_node("mcl_armor_stand:armor_stand", {
description = S("Armor Stand"),
_tt_help = S("Display pieces of armor"),
_doc_items_longdesc = S("An armor stand is a decorative object which can display different pieces of armor. Anything which players can wear as armor can also be put on an armor stand."),
_doc_items_usagehelp = S("Just place an armor item on the armor stand. To take the top piece of armor from the armor stand, select your hand and use the place key on the armor stand."),
drawtype = "mesh",

@ -195,6 +195,7 @@ end
-- Standing banner node
-- This one is also used for the help entry to avoid spamming the help with 16 entries.
minetest.register_node("mcl_banners:standing_banner", {
_tt_help = S("Paintable"),
_doc_items_entry_name = "Banner",
_doc_items_image = "mcl_banners_item_base.png^mcl_banners_item_overlay.png",
_doc_items_longdesc = S("Banners are tall colorful decorative blocks. They can be placed on the floor and at walls. Banners can be emblazoned with a variety of patterns using a lot of dye in crafting."),

@ -66,6 +66,7 @@ function mcl_beds.register_bed(name, def)
end
minetest.register_node(name .. "_bottom", {
description = def.description,
_tt_help = S("Allows you to sleep"),
_doc_items_longdesc = def._doc_items_longdesc or beddesc,
_doc_items_usagehelp = def._doc_items_usagehelp or beduse,
_doc_items_create_entry = def._doc_items_create_entry,

@ -110,6 +110,7 @@ end
-- Book and Quill
minetest.register_craftitem("mcl_books:writable_book", {
description = S("Book and Quill"),
_tt_help = S("Write down some notes"),
_doc_items_longdesc = S("This item can be used to write down some notes."),
_doc_items_usagehelp = S("Hold it in the hand, then rightclick to read the current notes and edit then. You can edit the text as often as you like. You can also sign the book which turns it into a written book which you can stack, but it can't be edited anymore.").."\n"..
S("A book can hold up to 4500 characters. The title length is limited to 64 characters."),

@ -20,6 +20,7 @@ local mod_button = minetest.get_modpath("mesecons_button")
minetest.register_craftitem("mcl_bows:arrow", {
description = S("Arrow"),
_tt_help = S("Ammunition").."\n"..S("Damage from bow: 1-10").."\n"..S("Damage from dispenser: 3"),
_doc_items_longdesc = S("Arrows are ammunition for bows and dispensers.").."\n"..
S("An arrow fired from a bow has a regular damage of 1-9. At full charge, there's a 20% chance of a critical hit dealing 10 damage instead. An arrow fired from a dispenser always deals 3 damage.").."\n"..
S("Arrows might get stuck on solid blocks and can be retrieved again. They are also capable of pushing wooden buttons."),

@ -98,6 +98,7 @@ end
-- Bow item, uncharged state
minetest.register_tool("mcl_bows:bow", {
description = S("Bow"),
_tt_help = S("Launch arrows"),
_doc_items_longdesc = S("Bows are ranged weapons to shoot arrows at your foes.").."\n"..
S("The speed and damage of the arrow increases the longer you charge. The regular damage of the arrow is between 1 and 9. At full charge, there's also a 20% of a critical hit, dealing 10 damage instead."),
_doc_items_usagehelp = S("To use the bow, you first need to have at least one arrow anywhere in your inventory (unless in Creative Mode). Hold down the right mouse button to charge, release to shoot."),

@ -3,6 +3,8 @@
#!#!#!#Released under CC Attribution-ShareAlike 3.0 Unported #!#!#
]]--
local CAKE_HUNGER_POINTS = 2
local S = minetest.get_translator("mcl_cake")
local cake_texture = {"cake_top.png","cake_bottom.png","cake_inner.png","cake_side.png","cake_side.png","cake_side.png"}
@ -31,6 +33,7 @@ minetest.register_craft({
minetest.register_node("mcl_cake:cake", {
description = S("Cake"),
_tt_help = S("With 7 tasty slices!").."\n"..S("Hunger points: +@1 per slice", CAKE_HUNGER_POINTS),
_doc_items_longdesc = S("Cakes can be placed and eaten to restore hunger points. A cake has 7 slices. Each slice restores 2 hunger points and 0.4 saturation points. Cakes will be destroyed when dug or when the block below them is broken."),
_doc_items_usagehelp = S("Place the cake anywhere, then rightclick it to eat a single slice. You can't eat from the cake when your hunger bar is full."),
tiles = {"cake_top.png","cake_bottom.png","cake_side.png","cake_side.png","cake_side.png","cake_side.png"},
@ -82,7 +85,7 @@ local register_slice = function(level, nodebox, desc)
minetest.record_protection_violation(pos, name)
return
end
local newcake = minetest.do_item_eat(2, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack(after_eat), ItemStack(this), clicker, {type="nothing"})
-- Check if we were allowed to eat
if newcake:get_name() ~= this or minetest.settings:get_bool("creative_mode") == true then
minetest.add_node(pos,{type="node",name=after_eat,param2=0})
@ -96,7 +99,7 @@ local register_slice = function(level, nodebox, desc)
minetest.record_protection_violation(pos, name)
return
end
local newcake = minetest.do_item_eat(2, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
local newcake = minetest.do_item_eat(CAKE_HUNGER_POINTS, ItemStack("mcl:cake:cake 0"), ItemStack("mcl_cake:cake_1"), clicker, {type="nothing"})
-- Check if we were allowed to eat
if newcake:get_name() ~= this or minetest.settings:get_bool("creative_mode") == true then
minetest.remove_node(pos)

@ -45,6 +45,7 @@ end
-- Empty cauldron
minetest.register_node("mcl_cauldrons:cauldron", {
description = S("Cauldron"),
_tt_help = S("Stores water"),
_doc_items_longdesc = S("Cauldrons are used to store water and slowly fill up under rain."),
_doc_items_usagehelp = S("Place a water pucket into the cauldron to fill it with water. Place an empty bucket on a full cauldron to retrieve the water. Place a water bottle into the cauldron to fill the cauldron to one third with water. Place a glass bottle in a cauldron with water to retrieve one third of the water."),
wield_image = "mcl_cauldrons_cauldron.png",

@ -54,13 +54,15 @@ function watch.register_item(name, image, creative, frame)
if doc_mod and not use_doc then
doc.add_entry_alias("craftitems", mcl_clock.stereotype, "craftitems", name)
end
local longdesc, usagehelp
local longdesc, usagehelp, tt
if use_doc then
longdesc = S("Clocks are tools which shows the current time of day in the Overworld.")
usagehelp = S("The clock contains a rotating disc with a sun symbol (yellow disc) and moon symbol and a little “pointer” which shows the current time of day by estimating the real position of the sun and the moon in the sky. Noon is represented by the sun symbol and midnight is represented by the moon symbol.")
tt = S("Displays time of day in the Overworld")
end
minetest.register_craftitem(name, {
description = S("Clock"),
_tt_help = tt,
_doc_items_create_entry = use_doc,
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp,

@ -28,6 +28,7 @@ local hc_desc = S("Terracotta is a basic building material. It comes in many dif
local gt_desc = S("Glazed terracotta is a decorative block with a complex pattern. It can be rotated by placing it in different directions.")
local cp_desc = S("Concrete powder is used for creating concrete, but it can also be used as decoration itself. It comes in different colors. Concrete powder turns into concrete of the same color when it comes in contact with water.")
local c_desc = S("Concrete is a decorative block which comes in many different colors. It is notable for having a very strong and clean color.")
local cp_tt = S("Turns into concrete on water contact")
minetest.register_node("mcl_colorblocks:hardened_clay", {
description = S("Terracotta"),
@ -62,6 +63,7 @@ for _, row in ipairs(block.dyes) do
local ldesc_hc, ldesc_gt, ldesc_cp, ldesc_c
local create_entry
local ename_hc, ename_gt, ename_cp, ename_c
local ltt_cp = cp_tt
if is_canonical then
ldesc_hc = hc_desc
ldesc_gt = gt_desc
@ -91,6 +93,7 @@ for _, row in ipairs(block.dyes) do
minetest.register_node("mcl_colorblocks:concrete_powder_"..name, {
description = sdesc_cp,
_tt_help = ltt_cp,
_doc_items_longdesc = ldesc_cp,
_doc_items_create_entry = create_entry,
_doc_items_entry_name = ename_cp,

@ -78,14 +78,16 @@ for i,img in ipairs(images) do
if i == stereotype_frame then
inv = 0
end
local use_doc, longdesc, usagehelp
local use_doc, longdesc, usagehelp, tt
use_doc = i == stereotype_frame
if use_doc then
tt = S("Points to the world origin")
longdesc = S("Compasses are tools which point to the world origin (X=0, Z=0) or the spawn point in the Overworld.")
end
local itemstring = "mcl_compass:"..(i-1)
minetest.register_craftitem(itemstring, {
description = S("Compass"),
_tt_help = tt,
_doc_items_create_entry = use_doc,
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = usagehelp,

@ -4,6 +4,7 @@ local S = minetest.get_translator("mcl_core")
minetest.register_node("mcl_core:cactus", {
description = S("Cactus"),
_tt_help = S("Grows on sand").."\n"..S("Contact damage: @1 per half second", 1),
_doc_items_longdesc = S("This is a piece of cactus commonly found in dry areas, especially deserts. Over time, cacti will grow up to 3 blocks high on sand or red sand. A cactus hurts living beings touching it with a damage of 1 HP every half second. When a cactus block is broken, all cactus blocks connected above it will break as well."),
_doc_items_usagehelp = S("A cactus can only be placed on top of another cactus or any sand."),
drawtype = "nodebox",
@ -47,6 +48,7 @@ minetest.register_node("mcl_core:cactus", {
minetest.register_node("mcl_core:reeds", {
description = S("Sugar Canes"),
_tt_help = S("Grows on sand or dirt next to water"),
_doc_items_longdesc = S("Sugar canes are a plant which has some uses in crafting. Sugar canes will slowly grow up to 3 blocks when they are next to water and are placed on a grass block, dirt, sand, red sand, podzol or coarse dirt. When a sugar cane is broken, all sugar canes connected above will break as well."),
_doc_items_usagehelp = S("Sugar canes can only be placed top of other sugar canes and on top of blocks on which they would grow."),
drawtype = "plantlike",

@ -56,6 +56,7 @@ minetest.register_node("mcl_core:slimeblock", {
minetest.register_node("mcl_core:cobweb", {
description = S("Cobweb"),
_tt_help = S("Slows down movement"),
_doc_items_longdesc = S("Cobwebs can be walked through, but significantly slow you down."),
drawtype = "plantlike",
paramtype2 = "degrotate",

@ -2,6 +2,7 @@ local S = minetest.get_translator("mcl_crafting_table")
minetest.register_node("mcl_crafting_table:crafting_table", {
description = S("Crafting Table"),
_tt_help = S("Gives access to 3×3 crafting grid"),
_doc_items_longdesc = S("A crafting table is a block which grants you access to a 3×3 crafting grid which allows you to perform advanced crafts."),
_doc_items_usagehelp = S("Rightclick the crafting table to access the 3×3 crafting grid."),
_doc_items_hidden = false,

@ -322,6 +322,7 @@ end
minetest.register_craftitem("mcl_dye:white", {
inventory_image = "mcl_dye_white.png",
description = S("Bone Meal"),
_tt_help = S("Speeds up plant growth"),
_doc_items_longdesc = S("Bone meal is a white dye and also useful as a fertilizer to speed up the growth of many plants."),
_doc_items_usagehelp = S("Rightclick a sheep to turn its wool white. Rightclick a plant to speed up its growth. Note that not all plants can be fertilized like this. When you rightclick a grass block, tall grass and flowers will grow all over the place."),
stack_max = 64,
@ -359,6 +360,7 @@ minetest.register_craftitem("mcl_dye:white", {
minetest.register_craftitem("mcl_dye:brown", {
inventory_image = "mcl_dye_brown.png",
_tt_help = S("Grows at the side of jungle trees"),
_doc_items_longdesc = S("Cocoa beans are a brown dye and can be used to plant cocoas."),
_doc_items_usagehelp = S("Rightclick a sheep to turn its wool brown. Rightclick on the side of a jungle tree trunk (Jungle Wood) to plant a young cocoa."),
description = S("Cocoa Beans"),

@ -116,6 +116,7 @@ end
minetest.register_node("mcl_end:chorus_flower", {
description = S("Chorus Flower"),
_tt_help = S("Grows on end stone"),
_doc_items_longdesc = S("A chorus flower is the living part of a chorus plant. It can grow into a tall chorus plant, step by step. When it grows, it may die on old age eventually. It also dies when it is unable to grow."),
_doc_items_usagehelp = S("Place it and wait for it to grow. It can only be placed on top of end stone, on top of a chorus plant stem, or at the side of exactly one chorus plant stem."),
tiles = {
@ -205,6 +206,7 @@ minetest.register_node("mcl_end:chorus_flower", {
minetest.register_node("mcl_end:chorus_flower_dead", {
description = S("Dead Chorus Flower"),
_tt_help = S("Grows on end stone"),
_doc_items_longdesc = S("This is a part of a chorus plant. It doesn't grow. Chorus flowers die of old age or when they are unable to grow. A dead chorus flower can be harvested to obtain a fresh chorus flower which is able to grow again."),
tiles = {
"mcl_end_chorus_flower_dead.png",
@ -543,6 +545,7 @@ end
minetest.register_craftitem("mcl_end:chorus_fruit", {
description = S("Chorus Fruit"),
_tt_help = S("Randomly teleports you when eaten"),
_doc_items_longdesc = S("A chorus fruit is an edible fruit from the chorus plant which is home to the End. Eating it teleports you to the top of a random solid block nearby, provided you won't end up inside a liquid, solid or harmful blocks. Teleportation might fail if there are very few or no places to teleport to."),
wield_image = "mcl_end_chorus_fruit.png",
inventory_image = "mcl_end_chorus_fruit.png",

@ -74,6 +74,7 @@ minetest.register_entity("mcl_end:ender_eye", {
minetest.register_craftitem("mcl_end:ender_eye", {
description = S("Eye of Ender"),
_tt_help = S("Guides you to an End portal shrine"),
_doc_items_longdesc = S("This item is used to locate End portal shrines in the Overworld and to activate End portals.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."),
_doc_items_usagehelp = S("Use the attack key to release the eye of ender. It will rise and fly in the horizontal direction of the closest end portal shrine. If you're very close, the eye of ender will take the direct path to the End portal shrine instead. After a few seconds, it stops. It may drop as an item, but there's a 20% chance it shatters.") .. "\n" .. S("To activate an End portal, eyes of ender need to be placed into each block of an intact End portal frame."),
wield_image = "mcl_end_ender_eye.png",

@ -2,6 +2,7 @@ local S = minetest.get_translator("mcl_farming")
minetest.register_craftitem("mcl_farming:beetroot_seeds", {
description = S("Beetroot Seeds"),
_tt_help = S("Can be sown on farmland"),
_doc_items_longdesc = S("Grows into a beetroot plant. Chickens like beetroot seeds."),
_doc_items_usagehelp = S("Place the beetroot seeds on farmland (which can be created with a hoe) to plant a beetroot plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it beetroot seeds."),
groups = { craftitem=1 },

@ -82,6 +82,7 @@ minetest.register_node("mcl_farming:carrot", {
minetest.register_craftitem("mcl_farming:carrot_item", {
description = S("Carrot"),
_tt_help = S("Can be planted on farmland"),
_doc_items_longdesc = S("Carrots can be eaten and planted. Pigs and rabbits like carrots."),
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant the carrot. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
inventory_image = "farming_carrot.png",

@ -49,16 +49,26 @@ local hoe_on_place_function = function(wear_divisor)
end
end
local uses = {
wood = 60,
stone = 132,
iron = 251,
gold = 33,
diamond = 1562,
}
local hoe_tt = S("Turns block into farmland")
local hoe_longdesc = S("Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.")
local hoe_usagehelp = S("Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.")
minetest.register_tool("mcl_farming:hoe_wood", {
description = S("Wood Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.wood),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
_doc_items_hidden = false,
inventory_image = "farming_tool_woodhoe.png",
on_place = hoe_on_place_function(60),
on_place = hoe_on_place_function(uses.wood),
groups = { tool=1, hoe=1 },
tool_capabilities = {
full_punch_interval = 1,
@ -91,10 +101,11 @@ minetest.register_craft({
minetest.register_tool("mcl_farming:hoe_stone", {
description = S("Stone Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.stone),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "farming_tool_stonehoe.png",
on_place = hoe_on_place_function(132),
on_place = hoe_on_place_function(uses.stone),
groups = { tool=1, hoe=1 },
tool_capabilities = {
full_punch_interval = 0.5,
@ -122,10 +133,11 @@ minetest.register_craft({
minetest.register_tool("mcl_farming:hoe_iron", {
description = S("Iron Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.iron),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "farming_tool_steelhoe.png",
on_place = hoe_on_place_function(251),
on_place = hoe_on_place_function(uses.iron),
groups = { tool=1, hoe=1 },
tool_capabilities = {
-- 1/3
@ -161,10 +173,11 @@ minetest.register_craft({
minetest.register_tool("mcl_farming:hoe_gold", {
description = S("Golden Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.gold),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "farming_tool_goldhoe.png",
on_place = hoe_on_place_function(33),
on_place = hoe_on_place_function(uses.gold),
groups = { tool=1, hoe=1 },
tool_capabilities = {
full_punch_interval = 1,
@ -201,10 +214,11 @@ minetest.register_craft({
minetest.register_tool("mcl_farming:hoe_diamond", {
description = S("Diamond Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.diamond),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "farming_tool_diamondhoe.png",
on_place = hoe_on_place_function(1562),
on_place = hoe_on_place_function(uses.diamond),
groups = { tool=1, hoe=1 },
tool_capabilities = {
full_punch_interval = 0.25,

@ -3,6 +3,7 @@ local S = minetest.get_translator("mcl_farming")
-- Seeds
minetest.register_craftitem("mcl_farming:melon_seeds", {
description = S("Melon Seeds"),
_tt_help = S("Can be sown on farmland"),
_doc_items_longdesc = S("Grows into a melon stem which in turn grows melons. Chickens like melon seeds."),
_doc_items_usagehelp = S("Place the melon seeds on farmland (which can be created with a hoe) to plant a melon stem. Melon stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem will attempt to grow a melon at the side. Rightclick an animal to feed it melon seeds."),
stack_max = 64,

@ -87,6 +87,7 @@ minetest.register_node("mcl_farming:potato", {
minetest.register_craftitem("mcl_farming:potato_item", {
description = S("Potato"),
_tt_help = S("Can be planted on farmland"),
_doc_items_longdesc = S("Potatoes are food items which can be eaten, cooked in the furnace and planted. Pigs like potatoes."),
_doc_items_usagehelp = S("Hold it in your hand and rightclick to eat it. Place it on top of farmland to plant it. It grows in sunlight and grows faster on hydrated farmland. Rightclick an animal to feed it."),
inventory_image = "farming_potato.png",

@ -9,6 +9,7 @@ end
-- Seeds
minetest.register_craftitem("mcl_farming:pumpkin_seeds", {
description = S("Pumpkin Seeds"),
_tt_help = S("Can be sown on farmland"),
_doc_items_longdesc = S("Grows into a pumpkin stem which in turn grows pumpkins. Chickens like pumpkin seeds."),
_doc_items_usagehelp = S("Place the pumpkin seeds on farmland (which can be created with a hoe) to plant a pumpkin stem. Pumpkin stems grow in sunlight and grow faster on hydrated farmland. When mature, the stem attempts to grow a pumpkin next to it. Rightclick an animal to feed it pumpkin seeds."),
stack_max = 64,

@ -3,6 +3,7 @@ local S = minetest.get_translator("mcl_farming")
minetest.register_node("mcl_farming:soil", {
tiles = {"mcl_farming_farmland_dry.png", "default_dirt.png"},
description = S("Farmland"),
_tt_help = S("Surface for farming plants").."\n"..S("Can become wet"),
_doc_items_longdesc = S("Farmland is used for farming, a necessary surface to plant crops. It is created when a hoe is used on dirt or a similar block. Plants are able to grow on farmland, but slowly. Farmland will become hydrated farmland (on which plants grow faster) when it rains or a water source is nearby. This block will turn back to dirt when a solid block appears above it or a piston arm extends above it."),
drop = "mcl_core:dirt",
drawtype = "nodebox",

@ -3,6 +3,7 @@ local S = minetest.get_translator("mcl_farming")
minetest.register_craftitem("mcl_farming:wheat_seeds", {
-- Original Minecraft name: “Seeds”
description = S("Wheat Seeds"),
_tt_help = S("Can be sown on farmland"),
_doc_items_longdesc = S("Grows into a wheat plant. Chickens like wheat seeds."),
_doc_items_usagehelp = S("Place the wheat seeds on farmland (which can be created with a hoe) to plant a wheat plant. They grow in sunlight and grow faster on hydrated farmland. Rightclick an animal to feed it wheat seeds."),
groups = { craftitem=1 },

@ -3,6 +3,7 @@ local S = minetest.get_translator("mcl_fire")
-- Fire Charge
minetest.register_craftitem("mcl_fire:fire_charge", {
description = S("Fire Charge"),
_tt_help = S("Dispenser projectile").."\n"..S("Starts fires and ignites blocks"),
_doc_items_longdesc = S("Fire charges are primarily projectiles which can be launched from dispensers, they will fly in a straight line and burst into a fire on impact. Alternatively, they can be used to ignite fires directly."),
_doc_items_usagehelp = S("Put the fire charge into a dispenser and supply it with redstone power to launch it. To ignite a fire directly, simply place the fire charge on the ground, which uses it up."),
inventory_image = "mcl_fire_fire_charge.png",

@ -3,6 +3,7 @@ local S = minetest.get_translator("mcl_fire")
-- Flint and Steel
minetest.register_tool("mcl_fire:flint_and_steel", {
description = S("Flint and Steel"),
_tt_help = S("Starts fires and ignites blocks"),
_doc_items_longdesc = S("Flint and steel is a tool to start fires and ignite blocks."),
_doc_items_usagehelp = S("Rightclick the surface of a block to attempt to light a fire in front of it or ignite the block. A few blocks have an unique reaction when ignited."),
inventory_image = "mcl_fire_flint_and_steel.png",

@ -308,6 +308,7 @@ end)
-- Fishing Rod
minetest.register_tool("mcl_fishing:fishing_rod", {
description = S("Fishing Rod"),
_tt_help = S("Catch fish in water"),
_doc_items_longdesc = S("Fishing rods can be used to catch fish."),
_doc_items_usagehelp = S("Rightclick to launch the bobber. When it sinks right-click again to reel in an item. Who knows what you're going to catch?"),
groups = { tool=1 },

@ -29,6 +29,7 @@ local cubes = {
minetest.register_node("mcl_flowerpots:flower_pot", {
description = S("Flower Pot"),
_tt_help = S("Can holds a small flower or plant"),
_doc_items_longdesc = S("Flower pots are decorative blocks in which flowers and other small plants can be placed."),
_doc_items_usagehelp = S("Just place a plant on the flower pot. Flower pots can hold small flowers (not higher than 1 block), saplings, ferns, dead bushes, mushrooms and cacti. Rightclick a potted plant to retrieve the plant."),
drawtype = "mesh",

@ -295,6 +295,7 @@ end
minetest.register_node("mcl_furnaces:furnace", {
description = S("Furnace"),
_tt_help = S("Uses fuel to smelt or cook items"),
_doc_items_longdesc = S("Furnaces cook or smelt several items, using a furnace fuel, into something else."),
_doc_items_usagehelp =
S("Use the furnace to open the furnace menu. Place a furnace fuel in the lower slot and the source material in the upper slot. The furnace will slowly use its fuel to smelt the item. The result will be placed into the output slot at the right side.").."\n"..

@ -125,6 +125,7 @@ local def_hopper = {
-- Enabled downwards hopper
local def_hopper_enabled = table.copy(def_hopper)
def_hopper_enabled.description = S("Hopper")
def_hopper_enabled._tt_help = S("5 inventory slots").."\n"..S("Collects items from above, moves items to container below").."\n"..S("Can be disabled with redstone power")
def_hopper_enabled._doc_items_longdesc = S("Hoppers are containers with 5 inventory slots. They collect dropped items from above, take items from a container above and attempt to put its items it into an adjacent container. Hoppers can go either downwards or sideways. Hoppers interact with chests, droppers, dispensers, shulker boxes, furnaces and hoppers.").."\n\n"..
S("Hoppers interact with containers the following way:").."\n"..

@ -101,6 +101,7 @@ end
minetest.register_node("mcl_itemframes:item_frame",{
description = S("Item Frame"),
_tt_help = S("Holds an item"),
_doc_items_longdesc = S("Item frames are decorative blocks in which items can be placed."),
_doc_items_usagehelp = S("Just place any item on the item frame. Use the item frame again to retrieve the item."),
drawtype = "mesh",

@ -126,6 +126,7 @@ end
-- Jukebox
minetest.register_node("mcl_jukebox:jukebox", {
description = S("Jukebox"),
_tt_help = S("Uses music discs to play music"),
_doc_items_longdesc = S("Jukeboxes play music when they're supplied with a music disc."),
_doc_items_usagehelp = S("Place a music disc into an empty jukebox to insert the music disc and play music. If the jukebox already has a music disc, you will retrieve this music disc first. The music can only be heard by you, not by other players."),
tiles = {"mcl_jukebox_top.png", "mcl_jukebox_side.png", "mcl_jukebox_side.png"},

@ -34,6 +34,7 @@ minetest.register_craftitem("mcl_maps:empty_map", {
-- has a very greatly zoomed-out version and even a radar mode
minetest.register_craftitem("mcl_maps:filled_map", {
description = S("Map"),
_tt_help = S("Enables minimap"),
_doc_items_longdesc = S("Maps show your surroundings as you explore the world."),
_doc_items_usagehelp = S("Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).").."\n"..
S("In Creative Mode, you don't need this item; the minimap is always available."),

@ -146,6 +146,7 @@ end
-- TODO: Clear *all* status effects
minetest.register_craftitem("mcl_mobitems:milk_bucket", {
description = S("Milk"),
_tt_help = S("Cures poison"),
_doc_items_longdesc = S("Milk is very refreshing and can be obtained by using a bucket on a cow. Drinking it will cure all forms of poisoning, but restores no hunger points."),
_doc_items_usagehelp = "Rightclick to drink the milk.",
inventory_image = "mcl_mobitems_bucket_milk.png",
@ -272,6 +273,7 @@ minetest.register_craftitem("mcl_mobitems:rabbit_foot", {
minetest.register_craftitem("mcl_mobitems:saddle", {
description = S("Saddle"),
_tt_help = S("Can be placed on animals to ride them"),
_doc_items_longdesc = S("Saddles can be put on some animals in order to mount them."),
_doc_items_usagehelp = "Rightclick an animal (with the saddle in your hand) to try put on the saddle. Saddles fit on horses, mules, donkeys and pigs. Horses, mules and donkeys need to be tamed first, otherwise they'll reject the saddle. Saddled animals can be mounted by rightclicking them again.",
wield_image = "mcl_mobitems_saddle.png",
@ -316,6 +318,7 @@ minetest.register_craftitem("mcl_mobitems:gunpowder", {
minetest.register_tool("mcl_mobitems:carrot_on_a_stick", {
description = S("Carrot on a Stick"),
_tt_help = S("Lets you ride a saddled pig"),
_doc_items_longdesc = S("A carrot on a stick can be used on saddled pigs to ride them."),
_doc_items_usagehelp = S("Place it on a saddled pig to mount it. You can now ride the pig like a horse. Pigs will also walk towards you when you just wield the carrot on a stick."),
wield_image = "mcl_mobitems_carrot_on_a_stick.png",

@ -266,6 +266,7 @@ minetest.register_node("mcl_mobspawners:spawner", {
paramtype = "light",
walkable = true,
description = S("Mob Spawner"),
_tt_help = S("Makes mobs appear"),
_doc_items_longdesc = S("A mob spawner regularily causes mobs to appear around it while a player is nearby. Some mob spawners are disabled while in light."),
_doc_items_usagehelp = S("If you have a spawn egg, you can use it to change the mob to spawn. Just place the item on the mob spawner. Player-set mob spawners always spawn mobs regardless of the light level."),
groups = {pickaxey=1, material_stone=1, deco_block=1},

@ -23,6 +23,7 @@ local register_block = function(subname, description, tiles, is_ground_content)
is_ground_content = false,
sounds = mcl_sounds.node_sound_stone_defaults(),
after_dig_node = spawn_silverfish,
_tt_help = S("Hides a silverfish"),
_doc_items_longdesc = S("An infested block is a block from which a silverfish will pop out when it is broken. It looks identical to its normal counterpart."),
_mcl_hardness = 0,
_mcl_blast_resistance = 3.75,

@ -23,12 +23,15 @@ local longdesc_intro_red = S("Red mushrooms are fungi which grow and spread in d
local longdesc_append = S("A single mushroom of this species will slowly spread over time towards a random solid opaque block with a light level of 12 or lower in a 3×3×3 cube around the mushroom. It stops spreading when there are 5 or more mushrooms of the same species within an area of 9×3×9 blocks around the mushroom.").."\n"..
S("Mushrooms will eventually uproot at a light level of 12 or higher. On mycelium or podzol, they survive and spread at any light level.")
local tt_help = S("Grows on podzol, mycelium and other blocks").."\n"..S("Spreads in darkness")
local usagehelp = S("This mushroom can be placed on mycelium and podzol at any light level. It can also be placed on blocks which are both solid and opaque, as long as the light level at daytime is not higher than 12.")
minetest.register_node("mcl_mushrooms:mushroom_brown", {
description = S("Brown Mushroom"),
_doc_items_longdesc = longdesc_intro_brown .. "\n\n" .. longdesc_append,
_doc_items_usagehelp = usagehelp,
_tt_help = tt_help,
drawtype = "plantlike",
tiles = { "farming_mushroom_brown.png" },
inventory_image = "farming_mushroom_brown.png",
@ -52,6 +55,7 @@ minetest.register_node("mcl_mushrooms:mushroom_red", {
description = S("Red Mushroom"),
_doc_items_longdesc = longdesc_intro_red .. "\n\n" .. longdesc_append,
_doc_items_usagehelp = usagehelp,
_tt_help = tt_help,
drawtype = "plantlike",
tiles = { "farming_mushroom_red.png" },
inventory_image = "farming_mushroom_red.png",

@ -85,6 +85,7 @@ minetest.register_node("mcl_nether:netherrack", {
minetest.register_node("mcl_nether:magma", {
description = S("Magma Block"),
_tt_help = S("Deals damage when standing on it"),
_doc_items_longdesc = S("Magma blocks are hot solid blocks which hurt anyone standing on it, unless they have fire resistance. Starting a fire on this block will create an eternal fire."),
stack_max = 64,
tiles = {{name="mcl_nether_magma.png", animation={type="vertical_frames", aspect_w=32, aspect_h=32, length=1.5}}},
@ -113,6 +114,7 @@ minetest.register_node("mcl_nether:magma", {
minetest.register_node("mcl_nether:soul_sand", {
description = S("Soul Sand"),
_tt_help = S("Reduces walking speed"),
_doc_items_longdesc = S("Soul sand is a block from the Nether. One can only slowly walk on soul sand. The slowing effect is amplified when the soul sand is on top of ice, packed ice or a slime block."),
stack_max = 64,
tiles = {"mcl_nether_soul_sand.png"},

@ -97,6 +97,7 @@ minetest.register_node("mcl_nether:nether_wart", {
minetest.register_craftitem("mcl_nether:nether_wart_item", {
description = S("Nether Wart"),
_tt_help = S("Grows on soul sand"),
_doc_items_longdesc = S("Nether warts are plants home to the Nether. They can be planted on soul sand and grow in 4 stages."),
_doc_items_usagehelp = S("Place this item on soul sand to plant it and watch it grow."),
inventory_image = "mcl_nether_nether_wart.png",

@ -76,11 +76,15 @@ for c=1, #corals do
local doc_desc_block = S("Coral blocks live in the oceans and need a water source next to them to survive. Without water, they die off.")
local doc_desc_coral = S("Corals grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.")
local doc_desc_fan = S("Corals fans grow on top of coral blocks and need to be inside a water source to survive. Without water, it will die off, as well as the coral block below.")
local tt_block = S("Needs water to live")
local tt_coral_dead = S("Grows on coral block of same species")
local tt_coral = tt_coral_dead .. S("Needs water to live")
-- Coral Block
minetest.register_node("mcl_ocean:"..id.."_coral_block", {
description = corals[c][2],
_doc_items_longdesc = doc_desc_block,
_tt_help = tt_block,
tiles = { "mcl_ocean_"..id.."_coral_block.png" },
groups = { pickaxey = 1, building_block = 1, coral=1, coral_block=1, coral_species=c, },
sounds = mcl_sounds.node_sound_dirt_defaults(),
@ -102,6 +106,7 @@ for c=1, #corals do
minetest.register_node("mcl_ocean:"..id.."_coral", {
description = corals[c][4],
_doc_items_longdesc = doc_desc_coral,
_tt_help = tt_coral,
drawtype = "plantlike_rooted",
paramtype = "light",
paramtype2 = "meshoptions",
@ -134,6 +139,7 @@ for c=1, #corals do
minetest.register_node("mcl_ocean:dead_"..id.."_coral", {
description = corals[c][5],
_doc_items_create_entry = false,
_tt_help = tt_coral_dead,
drawtype = "plantlike_rooted",
paramtype = "light",
paramtype2 = "meshoptions",
@ -167,6 +173,7 @@ for c=1, #corals do
minetest.register_node("mcl_ocean:"..id.."_coral_fan", {
description = corals[c][6],
_doc_items_longdesc = doc_desc_fan,
_tt_help = tt_coral,
drawtype = "plantlike_rooted",
paramtype = "light",
paramtype2 = "meshoptions",
@ -199,6 +206,7 @@ for c=1, #corals do
minetest.register_node("mcl_ocean:dead_"..id.."_coral_fan", {
description = corals[c][7],
_doc_items_create_entry = false,
_tt_help = tt_coral_dead,
drawtype = "plantlike_rooted",
paramtype = "light",
paramtype2 = "meshoptions",

@ -152,9 +152,10 @@ for s=1, #surfaces do
sounds.dig = leaf_sounds.dig
sounds.dug = leaf_sounds.dug
sounds.place = leaf_sounds.place
local doc_longdesc, doc_img, desc
local tt_help, doc_longdesc, doc_img, desc
if surfaces[s][1] == "dirt" then
doc_longdesc = S("Kelp grows inside water on top of dirt, sand or gravel.")
tt_help = S("Grows in water on dirt, sand, gravel")
desc = S("Kelp")
doc_create = true
doc_img = "mcl_ocean_kelp_item.png"
@ -162,6 +163,7 @@ for s=1, #surfaces do
doc_create = false
end
minetest.register_node("mcl_ocean:kelp_"..surfaces[s][1], {
_tt_help = tt_help,
_doc_items_entry_name = desc,
_doc_items_longdesc = doc_longdesc,
_doc_items_create_entry = doc_create,

@ -67,11 +67,12 @@ local ontop = "dead_brain_coral_block"
local canonical = "mcl_ocean:sea_pickle_1_"..ontop
for s=1,4 do
local desc, doc_desc, doc_use, doc_create, nici, img, img_off, on_place
local desc, doc_desc, doc_use, doc_create, tt_help, nici, img, img_off, on_place
if s == 1 then
desc = S("Sea Pickle")
doc_desc = S("Sea pickles grow on dead brain coral blocks and provide light when underwater. They come in 4 sizes that vary in brightness.")
doc_use = S("It can only be placed on top of dead brain coral blocks. Placing a sea pickle on another sea pickle will make it grow and brighter.")
tt_help = S("Glows when underwater").."\n"..S("4 possible sizes").."\n"..S("Grows on dead brain coral block")
img = "mcl_ocean_sea_pickle_item.png"
on_place = sea_pickle_on_place
else
@ -88,6 +89,7 @@ for s=1,4 do
minetest.register_node("mcl_ocean:sea_pickle_"..s.."_"..ontop, {
description = desc,
_tt_help = tt_help,
_doc_items_create_entry = doc_create,
_doc_items_longdesc = doc_desc,
_doc_items_usagehelp = doc_use,

@ -99,9 +99,10 @@ for s=1, #surfaces do
sounds.dig = leaf_sounds.dig
sounds.dug = leaf_sounds.dug
sounds.place = leaf_sounds.place
local doc_longdesc, doc_img, desc
local tt_help, doc_longdesc, doc_img, desc
if surfaces[s][1] == "dirt" then
doc_longdesc = S("Seagrass grows inside water on top of dirt, sand or gravel.")
tt_help = S("Grows in water on dirt, sand, gravel")
desc = S("Seagrass")
doc_create = true
doc_img = "mcl_ocean_seagrass.png"
@ -109,6 +110,7 @@ for s=1, #surfaces do
doc_create = false
end
minetest.register_node("mcl_ocean:seagrass_"..surfaces[s][1], {
_tt_help = tt_help,
_doc_items_entry_name = desc,
_doc_items_longdesc = doc_longdesc,
_doc_items_create_entry = doc_create,

@ -24,6 +24,7 @@ end
-- End portal
minetest.register_node("mcl_portals:portal_end", {
description = S("End Portal"),
_tt_help = S("Used to construct end portals"),
_doc_items_longdesc = S("An End portal teleports creatures and objects to the mysterious End dimension (and back!)."),
_doc_items_usagehelp = S("Hop into the portal to teleport. Entering an End portal in the Overworld teleports you to a fixed position in the End dimension and creates a 5×5 obsidian platform at your destination. End portals in the End will lead back to your spawn point in the Overworld."),
tiles = {
@ -309,6 +310,7 @@ end
minetest.register_node("mcl_portals:end_portal_frame", {
description = S("End Portal Frame"),
_tt_help = S("Used to construct end portals"),
_doc_items_longdesc = S("End portal frames are used in the construction of End portals. Each block has a socket for an eye of ender.") .. "\n" .. S("NOTE: The End dimension is currently incomplete and might change in future versions."),
_doc_items_usagehelp = S("To create an End portal, you need 12 end portal frames and 12 eyes of ender. The end portal frames have to be arranged around a horizontal 3×3 area with each block facing inward. Any other arrangement will fail.") .. "\n" .. S("Place an eye of ender into each block. The end portal appears in the middle after placing the final eye.") .. "\n" .. S("Once placed, an eye of ender can not be taken back."),
groups = { creative_breakable = 1, deco_block = 1, end_portal_frame = 1 },

@ -20,6 +20,7 @@ minetest.register_craft({
minetest.register_craftitem("mcl_potions:glass_bottle", {
description = S("Glass Bottle"),
_tt_help = S("Liquid container"),
_doc_items_longdesc = S("A glass bottle is used as a container for liquids and can be used to collect water directly."),
_doc_items_usagehelp = S("To collect water, it on a cauldron with water (which removes a level of water) or any water source (which removes no water)."),
inventory_image = "mcl_potions_potion_bottle_empty.png",
@ -159,6 +160,7 @@ end
minetest.register_craftitem("mcl_potions:potion_water", {
description = S("Water Bottle"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("Water bottles can be used to fill cauldrons. Drinking water has no effect."),
_doc_items_usagehelp = S("Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron."),
stack_max = 1,
@ -203,6 +205,7 @@ minetest.register_craftitem("mcl_potions:potion_water", {
minetest.register_craftitem("mcl_potions:potion_river_water", {
description = S("River Water Bottle"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("River water bottles can be used to fill cauldrons. Drinking it has no effect."),
_doc_items_usagehelp = S("Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron."),
@ -252,6 +255,7 @@ local how_to_drink = S("Use the “Place” key to drink it.")
minetest.register_craftitem("mcl_potions:potion_awkward", {
description = S("Awkward Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has an awkward taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
@ -264,6 +268,7 @@ minetest.register_craftitem("mcl_potions:potion_awkward", {
})
minetest.register_craftitem("mcl_potions:potion_mundane", {
description = S("Mundane Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a clean taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,
@ -276,6 +281,7 @@ minetest.register_craftitem("mcl_potions:potion_mundane", {
})
minetest.register_craftitem("mcl_potions:potion_thick", {
description = S("Thick Potion"),
_tt_help = S("No effect"),
_doc_items_longdesc = S("This potion has a bitter taste and is used for brewing more potions. Drinking it has no effect."),
_doc_items_usagehelp = how_to_drink,
stack_max = 1,

@ -278,6 +278,7 @@ end
minetest.register_node("mcl_signs:wall_sign", {
description = S("Sign"),
_tt_help = S("Can be written"),
_doc_items_longdesc = S("Signs can be written and come in two variants: Wall sign and sign on a sign post. Signs can be placed on the top and the sides of other blocks, but not below them."),
_doc_items_usagehelp = S("After placing the sign, you can write something on it. You have 4 lines of text with up to 15 characters for each line; anything beyond these limits is lost. Not all characters are supported. The text can not be changed once it has been written; you have to break and place the sign again."),
inventory_image = "default_sign.png",

@ -37,6 +37,7 @@ end
minetest.register_node("mcl_sponges:sponge", {
description = S("Sponge"),
_tt_help = S("Removes water on contact"),
_doc_items_longdesc = S("Sponges are blocks which remove water around them when they are placed or come in contact with water, turning it into a wet sponge."),
drawtype = "normal",
is_ground_content = false,
@ -95,6 +96,7 @@ minetest.register_node("mcl_sponges:sponge", {
minetest.register_node("mcl_sponges:sponge_wet", {
description = S("Waterlogged Sponge"),
_tt_help = S("Can be dried in furnace"),
_doc_items_longdesc = S("A waterlogged sponge can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of a furnace, the water will pour into the bucket."),
drawtype = "normal",
is_ground_content = false,
@ -113,6 +115,7 @@ minetest.register_node("mcl_sponges:sponge_wet", {
if minetest.get_modpath("mclx_core") then
minetest.register_node("mcl_sponges:sponge_wet_river_water", {
description = S("Riverwaterlogged Sponge"),
_tt_help = S("Can be dried in furnace"),
_doc_items_longdesc = S("This is a sponge soaking wet with river water. It can be dried in the furnace to turn it into (dry) sponge. When there's an empty bucket in the fuel slot of the furnace, the river water will pour into the bucket.") .. "\n" .. S("A sponge becomes riverwaterlogged (instead of waterlogged) if it sucks up more river water than (normal) water."),
drawtype = "normal",
is_ground_content = false,

@ -393,6 +393,7 @@ local how_to_throw = S("Use the punch key to throw.")
-- Snowball
minetest.register_craftitem("mcl_throwing:snowball", {
description = S("Snowball"),
_tt_help = S("Throwable"),
_doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."),
_doc_items_usagehelp = how_to_throw,
inventory_image = "mcl_throwing_snowball.png",
@ -405,6 +406,7 @@ minetest.register_craftitem("mcl_throwing:snowball", {
-- Egg
minetest.register_craftitem("mcl_throwing:egg", {
description = S("Egg"),
_tt_help = S("Throwable").."\n"..S("Chance to hatch chicks when broken"),
_doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."),
_doc_items_usagehelp = how_to_throw,
inventory_image = "mcl_throwing_egg.png",
@ -417,6 +419,7 @@ minetest.register_craftitem("mcl_throwing:egg", {
-- Ender Pearl
minetest.register_craftitem("mcl_throwing:ender_pearl", {
description = S("Ender Pearl"),
_tt_help = S("Throwable").."\n"..S("Teleports you on impact for cost of 5 HP"),
_doc_items_longdesc = S("An ender pearl is an item which can be used for teleportation at the cost of health. It can be thrown and teleport the thrower to its impact location when it hits a solid block or a plant. Each teleportation hurts the user by 5 hit points."),
_doc_items_usagehelp = how_to_throw,
wield_image = "mcl_throwing_ender_pearl.png",

@ -98,6 +98,7 @@ minetest.register_node("mcl_tnt:tnt", {
description = S("TNT"),
paramtype = "light",
sunlight_propagates = true,
_tt_help = S("Ignited by tools, explosions, fire, lava, redstone").."\n"..S("Explosion radius: @1", tostring(TNT_RANGE)),
_doc_items_longdesc = longdesc,
_doc_items_usagehelp = S("Place the TNT and ignite it with one of the methods above. Quickly get in safe distance. The TNT will start to be affected by gravity and explodes in 4 seconds."),
groups = { dig_immediate = 3, tnt = 1, enderman_takable=1 },