update fork (again) #8

Merged
chmodsayshello merged 2270 commits from VoxeLibre/VoxeLibre:master into master 2023-01-06 20:13:54 +01:00
3 changed files with 66 additions and 4 deletions
Showing only changes of commit a4ef367708 - Show all commits

View File

@ -74,6 +74,8 @@ Please read <http://minecraft.gamepedia.com/Breaking> to learn how digging times
* `coral_species=X`: Specifies the species of a coral; equal X means equal species * `coral_species=X`: Specifies the species of a coral; equal X means equal species
* `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching * `set_on_fire=X`: Sets any (not fire-resistant) mob or player on fire for X seconds when touching
* `compostability=X`: Item can be used on a composter block; X (1-100) is the % chance of adding a level of compost * `compostability=X`: Item can be used on a composter block; X (1-100) is the % chance of adding a level of compost
* `leaves=X`: Node will spotaneously decay if no tree trunk nodes remain within 6 blocks distance.
* `leaves_orphan`: See above, these nodes are in the process of decayed.
#### Footnotes #### Footnotes

View File

@ -8,6 +8,40 @@ if mod_screwdriver then
on_rotate = screwdriver.rotate_3way on_rotate = screwdriver.rotate_3way
end end
-- Check dug/destroyed tree trunks for orphaned leaves.
--
-- This function is meant to be called by the `after_destruct` handler of
-- treetrunk nodes.
--
-- Whenever a trunk node is removed, all `group:leaves` nodes in a sphere
-- with radius 6 are checked. Every such node that does not have a trunk
-- node within a distance of 6 blocks is converted into a orphan leaf node.
-- An ABM will gradually decay these nodes.
--
-- If param2 of the node is set to a nonzero value, the node will always
-- be preserved. This is set automatically when leaves are placed manually.
--
-- @param pos the position of the removed trunk node.
-- @param oldnode the node table of the removed trunk node.
function mcl_core.update_leaves(pos, oldnode)
local pos1, pos2 = vector.offset(pos, -6, -6, -6), vector.offset(pos, 6, 6, 6)
local lnode
local leaves = minetest.find_nodes_in_area(pos1, pos2, "group:leaves")
for _, lpos in pairs(leaves) do
lnode = minetest.get_node(lpos)
-- skip already decaying leaf nodes
if minetest.get_item_group(lnode.name, "orphan_leaves") ~= 1 then
if not minetest.find_node_near(lpos, 6, "group:tree") then
-- manually placed leaf nodes have param2
-- set and will never decay automatically
if lnode.param2 == 0 then
minetest.swap_node(lpos, {name = lnode.name .. "_orphan"})
end
end
end
end
end
-- Register tree trunk (wood) and bark -- Register tree trunk (wood) and bark
local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant) local function register_tree_trunk(subname, description_trunk, description_bark, longdesc, tile_inner, tile_bark, stripped_variant)
minetest.register_node("mcl_core:"..subname, { minetest.register_node("mcl_core:"..subname, {
@ -17,6 +51,7 @@ local function register_tree_trunk(subname, description_trunk, description_bark,
tiles = {tile_inner, tile_inner, tile_bark}, tiles = {tile_inner, tile_inner, tile_bark},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
after_destruct = mcl_core.update_leaves,
stack_max = 64, stack_max = 64,
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = mcl_sounds.node_sound_wood_defaults(), sounds = mcl_sounds.node_sound_wood_defaults(),
@ -141,7 +176,7 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
return drop return drop
end end
minetest.register_node("mcl_core:"..subname, { local l_def = {
description = description, description = description,
_doc_items_longdesc = longdesc, _doc_items_longdesc = longdesc,
_doc_items_hidden = false, _doc_items_hidden = false,
@ -164,7 +199,19 @@ local function register_leaves(subname, description, longdesc, tiles, sapling, d
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
_mcl_silk_touch_drop = true, _mcl_silk_touch_drop = true,
_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) },
}) }
minetest.register_node("mcl_core:" .. subname, l_def)
local o_def = table.copy(l_def)
o_def._doc_items_create_entry = false
o_def.place_param2 = nil
o_def.groups.not_in_creative_inventory = 1
o_def.groups.orphan_leaves = 1
o_def._mcl_shears_drop = {"mcl_core:" .. subname}
o_def._mcl_silk_touch_drop = {"mcl_core:" .. subname}
minetest.register_node("mcl_core:" .. subname .. "_orphan", o_def)
end end
local function register_sapling(subname, description, longdesc, tt_help, texture, selbox) local function register_sapling(subname, description, longdesc, tt_help, texture, selbox)

View File

@ -52,6 +52,7 @@ minetest.register_node("mcl_mangrove:mangrove_tree", {
tiles = {"mcl_mangrove_log_top.png", "mcl_mangrove_log_top.png", "mcl_mangrove_log.png"}, tiles = {"mcl_mangrove_log_top.png", "mcl_mangrove_log_top.png", "mcl_mangrove_log.png"},
paramtype2 = "facedir", paramtype2 = "facedir",
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
after_destruct = mcl_core.update_leaves,
groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5}, groups = {handy=1,axey=1, tree=1, flammable=2, building_block=1, material_wood=1, fire_encouragement=5, fire_flammability=5},
sounds = mcl_sounds.node_sound_wood_defaults(), sounds = mcl_sounds.node_sound_wood_defaults(),
on_place = mcl_util.rotate_axis, on_place = mcl_util.rotate_axis,
@ -86,7 +87,7 @@ minetest.register_node("mcl_mangrove:mangrove_wood", {
_mcl_hardness = 2, _mcl_hardness = 2,
}) })
minetest.register_node("mcl_mangrove:mangroveleaves", { local l_def = {
description = S("Mangrove Leaves"), description = S("Mangrove Leaves"),
_doc_items_longdesc = S("mangrove leaves are grown from mangrove trees."), _doc_items_longdesc = S("mangrove leaves are grown from mangrove trees."),
_doc_items_hidden = false, _doc_items_hidden = false,
@ -103,7 +104,19 @@ minetest.register_node("mcl_mangrove:mangroveleaves", {
_mcl_hardness = 0.2, _mcl_hardness = 0.2,
_mcl_silk_touch_drop = true, _mcl_silk_touch_drop = true,
_mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) }, _mcl_fortune_drop = { get_drops(1), get_drops(2), get_drops(3), get_drops(4) },
}) }
minetest.register_node("mcl_mangrove:mangroveleaves", l_def)
local o_def = table.copy(l_def)
o_def._doc_items_create_entry = false
o_def.place_param2 = nil
o_def.groups.not_in_creative_inventory = 1
o_def.groups.orphan_leaves = 1
o_def._mcl_shears_drop = {"mcl_mangrove:mangroveleaves"}
o_def._mcl_silk_touch_drop = {"mcl_mangrove:mangroveleaves"}
minetest.register_node("mcl_mangrove:mangroveleaves_orphan", o_def)
minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", { minetest.register_node("mcl_mangrove:mangrove_stripped_trunk", {
description = S("Stripped Mangrove Wood"), description = S("Stripped Mangrove Wood"),