VoxeLibre/mods/ITEMS/mcl_mangrove/init.lua
Doods c1971b662a Fireproof certain wood nodes & add planks crafting recipes (#4166)
* Make Crimson and Warped Planks, Double Slab Planks, Fences, Fence Gates, Doors, Trapdoors, Pressure Plates, Wood, Bark, Stripped Wood, Stripped Bark, and Stairs Immune to fire by removing them from the 'flammable', 'fire_encouragement', and 'fire_flammability' groups.
* Add crafting recipes which allow Cherry, Mangrove, Crimson, and Warped planks to be crafted from Wood, Bark, Stripped Wood, and Stripped Bark variants, to make them consistent with with all other planks.

Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/4166
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Doods <yusufalishabaka@tutanota.com>
Co-committed-by: Doods <yusufalishabaka@tutanota.com>
2024-04-13 23:52:46 +00:00

490 lines
17 KiB
Lua

local S = minetest.get_translator("mcl_mangrove")
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local propagule_allowed_nodes = {
"mcl_core:dirt",
"mcl_core:coarse_dirt",
"mcl_core:dirt_with_grass",
"mcl_core:podzol",
"mcl_core:mycelium",
"mcl_lush_caves:rooted_dirt",
"mcl_lush_caves:moss",
"mcl_farming:soil",
"mcl_farming:soil_wet",
"mcl_core:clay",
"mcl_mud:mud",
}
local propagule_water_nodes = {"mcl_mud:mud","mcl_core:dirt","mcl_core:coarse_dirt","mcl_core:clay"}
--"mcl_lush_caves:moss","mcl_lush_caves:rooted_dirt
mcl_core.register_tree_trunk("mangrove_tree", S("Mangrove Wood"), S("Mangrove Bark"),
S("The trunk of a Mangrove tree."),
"mcl_mangrove_log_top.png", "mcl_mangrove_log.png", "mcl_mangrove:mangrove_stripped")
mcl_core.register_wooden_planks("mangrove_wood", S("Mangrove Wood Planks"), {"mcl_mangrove_planks.png"})
mcl_core.register_leaves("mangroveleaves", S("Mangrove Leaves"), S("Mangrove leaves are grown from mangrove trees."),
{"mcl_mangrove_leaves.png"}, "#48B518", "color", "mcl_core_palette_foliage.png", "mcl_mangrove:propagule", true, {20, 16, 12, 10}, 1)
mcl_core.register_stripped_trunk("mangrove_stripped", S("Stripped Mangrove Log"), S("Stripped Mangrove Wood"),
S("The stripped wood of a Mangrove tree"), S("The stripped bark of a Mangrove tree"),
"mcl_stripped_mangrove_log_top.png", "mcl_stripped_mangrove_log_side.png")
minetest.register_alias("mcl_mangrove:mangrove_stripped_trunk", "mcl_mangrove:mangrove_stripped")
minetest.register_node("mcl_mangrove:mangrove_roots", {
description = S("Mangrove Roots"),
_doc_items_longdesc = S("Mangrove roots are decorative blocks that form as part of mangrove trees."),
_doc_items_hidden = false,
waving = 0,
place_param2 = 1, -- Prevent leafdecay for placed nodes
tiles = {
"mcl_mangrove_roots_top.png",
"mcl_mangrove_roots_side.png",
"mcl_mangrove_roots_side.png",
},
paramtype = "light",
drawtype = "allfaces_optional",
groups = {
handy = 1, hoey = 1, shearsy = 1, axey = 1, swordy = 1, dig_by_piston = 0,
flammable = 10, fire_encouragement = 30, fire_flammability = 60,
deco_block = 1, compostability = 30
},
drop = "mcl_mangrove:mangrove_roots",
_mcl_shears_drop = true,
sounds = mcl_sounds.node_sound_leaves_defaults(),
_mcl_blast_resistance = 0.7,
_mcl_hardness = 0.7,
_mcl_silk_touch_drop = true,
_mcl_fortune_drop = { "mcl_mangrove:mangrove_roots 1", "mcl_mangrove:mangrove_roots 2", "mcl_mangrove:mangrove_roots 3", "mcl_mangrove:mangrove_roots 4" },
})
minetest.register_node("mcl_mangrove:propagule", {
description = S("Mangrove Propagule"),
_tt_help = S("Needs soil and light to grow"),
_doc_items_longdesc = S("When placed on soil (such as dirt) and exposed to light, an propagule will grow into an mangrove after some time."),
_doc_items_hidden = false,
drawtype = "plantlike",
waving = 1,
visual_scale = 1.0,
tiles = {"mcl_mangrove_propagule_item.png"},
inventory_image = "mcl_mangrove_propagule_item.png",
wield_image = "mcl_mangrove_propagule_item.png",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-5/16, -0.5, -5/16, 5/16, 0.5, 5/16}
},
groups = {
plant = 1, sapling = 1, non_mycelium_plant = 1, attached_node = 1,
deco_block = 1, dig_immediate = 3, dig_by_water = 0, dig_by_piston = 1,
destroy_by_lava_flow = 1, compostability = 30
},
sounds = mcl_sounds.node_sound_leaves_defaults(),
on_construct = function(pos)
local meta = minetest.get_meta(pos)
meta:set_int("stage", 0)
end,
node_placement_prediction = "",
_mcl_blast_resistance = 0,
_mcl_hardness = 0,
on_place = mcl_util.generate_on_place_plant_function(function(place_pos, place_node,stack)
local under = vector.offset(place_pos,0,-1,0)
local snn = minetest.get_node_or_nil(under).name
if not snn then return false end
if table.indexof(propagule_allowed_nodes,snn) ~= -1 then
local n = minetest.get_node(place_pos)
if minetest.get_item_group(n.name,"water") > 0 and table.indexof(propagule_water_nodes,snn) ~= -1 then
minetest.set_node(under,{name="mcl_mangrove:propagule_"..snn:split(":")[2]})
stack:take_item()
return stack
end
return true
end
end)
})
minetest.register_node("mcl_mangrove:hanging_propagule_1", {
description = S("Hanging Propagule"),
_tt_help = S("Grows on Mangrove leaves"),
_doc_items_longdesc = "",
_doc_items_usagehelp = "",
groups = {
plant = 1, not_in_creative_inventory=1, non_mycelium_plant = 1,
deco_block = 1, dig_immediate = 3, dig_by_water = 0, dig_by_piston = 1,
destroy_by_lava_flow = 1, compostability = 30
},
paramtype = "light",
paramtype2 = "",
on_rotate = false,
walkable = false,
drop = "mcl_mangrove:propagule",
use_texture_alpha = "clip",
drawtype = 'mesh',
mesh = 'propagule_hanging.obj',
selection_box = {
type = "fixed",
fixed = {
{-0.125, -0.5, -0.125, 0.125, 0.5, 0.125}, -- Base
},
},
tiles = {"mcl_mangrove_propagule_hanging.png"},
inventory_image = "mcl_mangrove_propagule.png",
wield_image = "mcl_mangrove_propagule.png",
})
local propagule_rooted_nodes = {}
for _,root in pairs(propagule_water_nodes) do
local r = root:split(":")[2]
local def = minetest.registered_nodes[root]
local tx = def.tiles
local n = "mcl_mangrove:propagule_"..r
table.insert(propagule_rooted_nodes,n)
minetest.register_node(n, {
drawtype = "plantlike_rooted",
paramtype = "light",
place_param2 = 1,
tiles = tx,
special_tiles = { { name = "mcl_mangrove_propagule_item.png" } },
inventory_image = "mcl_mangrove_propagule_item.png",
wield_image = "mcl_mangrove_propagule.png",
selection_box = {
type = "fixed",
fixed = {
{ -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
{ -0.5, 0.5, -0.5, 0.5, 1.0, 0.5 },
}
},
groups = {
plant = 1, sapling = 1, non_mycelium_plant = 1, attached_node = 1,not_in_creative_inventory=1,
deco_block = 1, dig_immediate = 3, dig_by_piston = 1,
destroy_by_lava_flow = 1, compostability = 30
},
sounds = mcl_sounds.node_sound_leaves_defaults(),
drop = "mcl_mangrove:propagule",
node_placement_prediction = "",
node_dig_prediction = "",
after_dig_node = function(pos)
minetest.set_node(pos, {name=root})
end,
_mcl_hardness = 0,
_mcl_blast_resistance = 0,
_mcl_silk_touch_drop = true,
})
end
mcl_flowerpots.register_potted_flower("mcl_mangrove:propagule", {
name = "propagule",
desc = S("Mangrove Propagule"),
image = "mcl_mangrove_propagule.png",
})
local water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#3F76E4"
local wlroots = {
description = S("water logged mangrove roots"),
_doc_items_entry_name = S("water logged mangrove roots"),
_doc_items_longdesc =
S("Mangrove roots are decorative blocks that form as part of mangrove trees.").."\n\n"..
S("Mangrove roots, despite being a full block, can be waterlogged and do not flow water out").."\n\n"..
S("These cannot be crafted yet only occure when get in contact of water."),
_doc_items_hidden = false,
tiles = {
{name="mcl_core_water_source_animation.png", animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0}}
},
special_tiles = {
-- New-style water source material (mostly unused)
{
name="mcl_core_water_source_animation.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=5.0},
backface_culling = false,
}
},
overlay_tiles = {
"mcl_mangrove_roots_top.png",
"mcl_mangrove_roots_side.png",
"mcl_mangrove_roots_side.png",
},
sounds = mcl_sounds.node_sound_water_defaults(),
drawtype = "allfaces_optional",
use_texture_alpha = "blend",
is_ground_content = false,
paramtype = "light",
walkable = true,
pointable = true,
diggable = true,
buildable_to = false,
liquids_pointable = true,
drop = "mcl_mangrove:mangrove_roots",
groups = {
handy = 1, hoey = 1, water=3, liquid=3, puts_out_fire=1, dig_by_piston = 1, deco_block = 1, waterlogged = 1, not_in_creative_inventory=1 },
_mcl_blast_resistance = 100,
_mcl_hardness = -1, -- Hardness intentionally set to infinite instead of 100 (Minecraft value) to avoid problems in creative mode
on_construct = function(pos)
local dim = mcl_worlds.pos_to_dimension(pos)
if dim == "nether" then
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
minetest.set_node(pos, {name="mcl_mangrove:mangrove_roots"})
end
end,
after_dig_node = function(pos)
local node = minetest.get_node(pos)
local dim = mcl_worlds.pos_to_dimension(pos)
if minetest.get_item_group(node.name, "water") == 0 and dim ~= "nether" then
minetest.set_node(pos, {name="mcl_core:water_source"})
else
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end
end,
}
local rwlroots = table.copy(wlroots)
-- FIXME luacheck complains that this is a repeated definition of water_tex.
-- Maybe the tiles definition below should be replaced with the animated tile
-- definition as per above?
water_tex = "mcl_core_water_source_animation.png^[verticalframe:16:0^[multiply:#0084FF"
rwlroots.tiles = {
"("..water_tex..")^mcl_mangrove_roots_top.png",
"("..water_tex..")^mcl_mangrove_roots_side.png",
"("..water_tex..")^mcl_mangrove_roots_side.png",
}
rwlroots.after_dig_node = function(pos)
local node = minetest.get_node(pos)
local dim = mcl_worlds.pos_to_dimension(pos)
if minetest.get_item_group(node.name, "water") == 0 and dim ~= "nether" then
minetest.set_node(pos, {name="mclx_core:river_water_source"})
else
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end
end
minetest.register_node("mcl_mangrove:water_logged_roots", wlroots)
minetest.register_node("mcl_mangrove:river_water_logged_roots",rwlroots)
minetest.register_node("mcl_mangrove:mangrove_mud_roots", {
description = S("Muddy Mangrove Roots"),
_tt_help = S("crafted with Mud and Mangrove roots"),
_doc_items_longdesc = S("Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it."),
tiles = {
"mcl_mud.png^mcl_mangrove_roots_top.png",
"mcl_mud.png^mcl_mangrove_roots_side.png",
"mcl_mud.png^mcl_mangrove_roots_side.png",
},
is_ground_content = true,
groups = {handy = 1, shovely = 1, axey = 1, building_block = 1},
sounds = mcl_sounds.node_sound_sand_defaults(),
_mcl_blast_resistance = 0.7,
_mcl_hardness = 0.7,
})
mcl_doors:register_door("mcl_mangrove:mangrove_door", {
description = S("Mangrove Door"),
_doc_items_longdesc = S("Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal."),
_doc_items_usagehelp = S("To open or close a wooden door, rightclick it or supply its lower half with a redstone signal."),
inventory_image = "mcl_mangrove_doors.png",
groups = {handy=1,axey=1, material_wood=1, flammable=-1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
tiles_bottom = "mcl_mangrove_door_bottom.png",
tiles_top = "mcl_mangrove_door_top.png",
sounds = mcl_sounds.node_sound_wood_defaults(),
})
mcl_doors:register_trapdoor("mcl_mangrove:mangrove_trapdoor", {
description = S("Mangrove Trapdoor"),
_doc_items_longdesc = S("Wooden trapdoors are horizontal barriers which can be opened and closed by hand or a redstone signal. They occupy the upper or lower part of a block, depending on how they have been placed. When open, they can be climbed like a ladder."),
_doc_items_usagehelp = S("To open or close the trapdoor, rightclick it or send a redstone signal to it."),
tile_front = "mcl_mangrove_trapdoor.png",
tile_side = "mcl_mangrove_trapdoor_side.png",
wield_image = "mcl_mangrove_trapdoor.png",
groups = {handy=1,axey=1, mesecon_effector_on=1, material_wood=1, flammable=-1},
_mcl_hardness = 3,
_mcl_blast_resistance = 3,
sounds = mcl_sounds.node_sound_wood_defaults(),
})
mcl_fences.register_fence_and_fence_gate(
"mangrove_wood_fence",
S("Mangrove Wood Fence"),
S("Mangrove Wood Fence Gate"),
"mcl_mangrove_fence.png",
{handy=1,axey=1, flammable=2,fence_wood=1, fire_encouragement=5, fire_flammability=20},
minetest.registered_nodes["mcl_core:wood"]._mcl_hardness,
minetest.registered_nodes["mcl_core:wood"]._mcl_blast_resistance,
{"group:fence_wood"},
mcl_sounds.node_sound_wood_defaults(), "mcl_mangrove_mangrove_wood_fence_gate_open", "mcl_mangrove_mangrove_wood_fence_gate_close", 1, 1,
"mcl_mangrove_fence_gate.png")
mcl_stairs.register_stair("mangrove_wood", "mcl_mangrove:mangrove_wood",
{handy=1,axey=1, flammable=3,wood_stairs=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
{"mcl_mangrove_planks.png"},
S("Mangrove Wood Stairs"),
mcl_sounds.node_sound_wood_defaults(), 3, 2,
"woodlike")
mcl_stairs.register_slab("mangrove_wood", "mcl_mangrove:mangrove_wood",
{handy=1,axey=1, flammable=3,wood_slab=1, material_wood=1, fire_encouragement=5, fire_flammability=20},
{"mcl_mangrove_planks.png"},
S("Mangrove Wood Slab"),
mcl_sounds.node_sound_wood_defaults(), 3, 2,
S("Double Mangrove Wood Slab"))
minetest.register_craft({
output = "mcl_mangrove:mangrove_tree_bark 3",
recipe = {
{ "mcl_mangrove:mangrove_tree", "mcl_mangrove:mangrove_tree" },
{ "mcl_mangrove:mangrove_tree", "mcl_mangrove:mangrove_tree" },
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_mud_roots",
recipe = {
{"mcl_mangrove:mangrove_roots", "mcl_mud:mud",},
}
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_mangrove:mangrove_door",
burntime = 15,
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_door 3",
recipe = {
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
{"mcl_mangrove:mangrove_wood", "mcl_mangrove:mangrove_wood"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_trapdoor 2",
recipe = {
{"mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood"},
{"mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood","mcl_mangrove:mangrove_wood"},
}
})
minetest.register_craft({
type = "fuel",
recipe = "mcl_mangrove:mangrove_trapdoor",
burntime = 15,
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood_fence_gate",
recipe = {
{"mcl_core:stick", "mcl_mangrove:mangrove_wood", "mcl_core:stick"},
{"mcl_core:stick", "mcl_mangrove:mangrove_wood", "mcl_core:stick"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood_fence 3",
recipe = {
{"mcl_mangrove:mangrove_wood", "mcl_core:stick", "mcl_mangrove:mangrove_wood"},
{"mcl_mangrove:mangrove_wood", "mcl_core:stick", "mcl_mangrove:mangrove_wood"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood 4",
recipe = {
{"mcl_mangrove:mangrove_tree"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood 4",
recipe = {
{"mcl_mangrove:mangrove_tree_bark"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood 4",
recipe = {
{"mcl_mangrove:mangrove_stripped"},
}
})
minetest.register_craft({
output = "mcl_mangrove:mangrove_wood 4",
recipe = {
{"mcl_mangrove:mangrove_stripped_bark"},
}
})
minetest.register_craft({
type = "fuel",
recipe = "group:fence_wood",
burntime = 15,
})
local adjacents = {
vector.new(1,0,0),
vector.new(-1,0,0),
vector.new(0,0,1),
vector.new(0,0,-1),
}
minetest.register_abm({
label = "Waterlog mangrove roots",
nodenames = {"mcl_mangrove:mangrove_roots"},
neighbors = {"group:water"},
interval = 5,
chance = 5,
action = function(pos,value)
for _,v in pairs(adjacents) do
local n = minetest.get_node(vector.add(pos,v)).name
if minetest.get_item_group(n,"water") > 0 then
if n:find("river") then
minetest.swap_node(pos,{name="mcl_mangrove:river_water_logged_roots"})
return
else
minetest.swap_node(pos,{name="mcl_mangrove:water_logged_roots"})
return
end
end
end
end
})
local abm_nodes = table.copy(propagule_rooted_nodes)
table.insert(abm_nodes,"mcl_mangrove:propagule")
minetest.register_abm({
label = "Mangrove_tree_growth",
nodenames = abm_nodes,
interval = 30,
chance = 5,
action = function(pos,node)
local pr = PseudoRandom(pos.x+pos.y+pos.z)
local r = pr:next(1,5)
local path = modpath .."/schematics/mcl_mangrove_tree_"..tostring(r)..".mts"
local w = 5
local h = 10
local fp = true
pos.y = pos.y - 1
if table.indexof(propagule_rooted_nodes,node.name) ~= -1 then
local nn = minetest.find_nodes_in_area(vector.offset(pos,0,-1,0),vector.offset(pos,0,h,0),{"group:water","air"})
if #nn >= h then
minetest.place_schematic(pos, path, "random", function()
mcl_core.update_sapling_foliage_colors(pos)
local nnv = minetest.find_nodes_in_area(vector.offset(pos,-5,-1,-5),vector.offset(pos,5,h/2,5),{"mcl_core:vine"})
minetest.bulk_set_node(nnv,{"air"})
end, true, "place_center_x, place_center_z")
end
return
end
if r > 3 then h = 18 end
if mcl_core.check_growth_width(pos,w,h) then
minetest.place_schematic(pos, path, "random", nil, true, "place_center_x, place_center_z")
mcl_core.update_sapling_foliage_colors(pos)
end
end,
})