mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2024-12-27 19:20:37 +01:00
6b9b127804
- Turned all the 'print' calls at server's boot to 'minetest.log' in order to render it more clearly
539 lines
16 KiB
Lua
Executable File
539 lines
16 KiB
Lua
Executable File
local S = plantslib.intllib
|
|
|
|
-- This file supplies a few additional plants and some related crafts
|
|
-- for the plantlife modpack. Last revision: 2013-04-24
|
|
|
|
flowers_plus = {}
|
|
|
|
local SPAWN_DELAY = 1000
|
|
local SPAWN_CHANCE = 200
|
|
local flowers_seed_diff = 329
|
|
local lilies_max_count = 320
|
|
local lilies_rarity = 33
|
|
local seaweed_max_count = 320
|
|
local seaweed_rarity = 33
|
|
local sunflowers_max_count = 10
|
|
local sunflowers_rarity = 25
|
|
|
|
-- register the various rotations of waterlilies
|
|
|
|
local lilies_list = {
|
|
{ nil , nil , 1 },
|
|
{ "225", "22.5" , 2 },
|
|
{ "45" , "45" , 3 },
|
|
{ "675", "67.5" , 4 },
|
|
{ "s1" , "small_1" , 5 },
|
|
{ "s2" , "small_2" , 6 },
|
|
{ "s3" , "small_3" , 7 },
|
|
{ "s4" , "small_4" , 8 },
|
|
}
|
|
|
|
for i in ipairs(lilies_list) do
|
|
local deg1 = ""
|
|
local deg2 = ""
|
|
local lily_groups = {snappy = 3,flammable=2,flower=1}
|
|
|
|
if lilies_list[i][1] ~= nil then
|
|
deg1 = "_"..lilies_list[i][1]
|
|
deg2 = "_"..lilies_list[i][2]
|
|
lily_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
|
|
end
|
|
|
|
minetest.register_node(":flowers:waterlily"..deg1, {
|
|
description = S("Waterlily"),
|
|
drawtype = "nodebox",
|
|
tiles = {
|
|
"flowers_waterlily"..deg2..".png",
|
|
"flowers_waterlily"..deg2..".png^[transformFY"
|
|
},
|
|
inventory_image = "flowers_waterlily.png",
|
|
wield_image = "flowers_waterlily.png",
|
|
sunlight_propagates = true,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
walkable = false,
|
|
groups = lily_groups,
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
|
|
},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
|
|
},
|
|
buildable_to = true,
|
|
|
|
liquids_pointable = true,
|
|
drop = "flowers:waterlily",
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
local keys=placer:get_player_control()
|
|
local pt = pointed_thing
|
|
|
|
local place_pos = nil
|
|
local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
|
local under_node = minetest.get_node(pt.under)
|
|
local above_node = minetest.get_node(pt.above)
|
|
local top_node = minetest.get_node(top_pos)
|
|
|
|
if plantslib:get_nodedef_field(under_node.name, "buildable_to") then
|
|
if under_node.name ~= "default:water_source" then
|
|
place_pos = pt.under
|
|
elseif top_node.name ~= "default:water_source"
|
|
and plantslib:get_nodedef_field(top_node.name, "buildable_to") then
|
|
place_pos = top_pos
|
|
else
|
|
return
|
|
end
|
|
elseif plantslib:get_nodedef_field(above_node.name, "buildable_to") then
|
|
place_pos = pt.above
|
|
end
|
|
|
|
if place_pos and not minetest.is_protected(place_pos, placer:get_player_name()) then
|
|
|
|
local nodename = "default:cobble" -- if this block appears, something went....wrong :-)
|
|
|
|
if not keys["sneak"] then
|
|
local node = minetest.get_node(pt.under)
|
|
local waterlily = math.random(1,8)
|
|
if waterlily == 1 then
|
|
nodename = "flowers:waterlily"
|
|
elseif waterlily == 2 then
|
|
nodename = "flowers:waterlily_225"
|
|
elseif waterlily == 3 then
|
|
nodename = "flowers:waterlily_45"
|
|
elseif waterlily == 4 then
|
|
nodename = "flowers:waterlily_675"
|
|
elseif waterlily == 5 then
|
|
nodename = "flowers:waterlily_s1"
|
|
elseif waterlily == 6 then
|
|
nodename = "flowers:waterlily_s2"
|
|
elseif waterlily == 7 then
|
|
nodename = "flowers:waterlily_s3"
|
|
elseif waterlily == 8 then
|
|
nodename = "flowers:waterlily_s4"
|
|
end
|
|
minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) })
|
|
else
|
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
|
minetest.set_node(place_pos, {name = "flowers:waterlily", param2 = fdir})
|
|
end
|
|
|
|
if not plantslib.expect_infinite_stacks then
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
|
|
local algae_list = { {nil}, {2}, {3}, {4} }
|
|
|
|
for i in ipairs(algae_list) do
|
|
local num = ""
|
|
local algae_groups = {snappy = 3,flammable=2,flower=1}
|
|
|
|
if algae_list[i][1] ~= nil then
|
|
num = "_"..algae_list[i][1]
|
|
algae_groups = { snappy = 3,flammable=2,flower=1, not_in_creative_inventory=1 }
|
|
end
|
|
|
|
minetest.register_node(":flowers:seaweed"..num, {
|
|
description = S("Seaweed"),
|
|
drawtype = "nodebox",
|
|
tiles = {
|
|
"flowers_seaweed"..num..".png",
|
|
"flowers_seaweed"..num..".png^[transformFY"
|
|
},
|
|
inventory_image = "flowers_seaweed_2.png",
|
|
wield_image = "flowers_seaweed_2.png",
|
|
sunlight_propagates = true,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
walkable = false,
|
|
groups = algae_groups,
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.4, -0.5, -0.4, 0.4, -0.45, 0.4 },
|
|
},
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.49, -0.5, 0.5, -0.49, 0.5 },
|
|
},
|
|
buildable_to = true,
|
|
|
|
liquids_pointable = true,
|
|
drop = "flowers:seaweed",
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
local keys=placer:get_player_control()
|
|
local pt = pointed_thing
|
|
|
|
local place_pos = nil
|
|
local top_pos = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z}
|
|
local under_node = minetest.get_node(pt.under)
|
|
local above_node = minetest.get_node(pt.above)
|
|
local top_node = minetest.get_node(top_pos)
|
|
|
|
if plantslib:get_nodedef_field(under_node.name, "buildable_to") then
|
|
if under_node.name ~= "default:water_source" then
|
|
place_pos = pt.under
|
|
elseif top_node.name ~= "default:water_source"
|
|
and plantslib:get_nodedef_field(top_node.name, "buildable_to") then
|
|
place_pos = top_pos
|
|
else
|
|
return
|
|
end
|
|
elseif plantslib:get_nodedef_field(above_node.name, "buildable_to") then
|
|
place_pos = pt.above
|
|
end
|
|
|
|
if not minetest.is_protected(place_pos, placer:get_player_name()) then
|
|
|
|
local nodename = "default:cobble" -- :D
|
|
|
|
if place_pos == nil then return itemstack end -- pour éviter crash avec nénuphare
|
|
if not keys["sneak"] then
|
|
--local node = minetest.get_node(pt.under)
|
|
local seaweed = math.random(1,4)
|
|
if seaweed == 1 then
|
|
nodename = "flowers:seaweed"
|
|
elseif seaweed == 2 then
|
|
nodename = "flowers:seaweed_2"
|
|
elseif seaweed == 3 then
|
|
nodename = "flowers:seaweed_3"
|
|
elseif seaweed == 4 then
|
|
nodename = "flowers:seaweed_4"
|
|
end
|
|
minetest.set_node(place_pos, {name = nodename, param2 = math.random(0,3) })
|
|
else
|
|
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
|
|
minetest.set_node(place_pos, {name = "flowers:seaweed", param2 = fdir})
|
|
end
|
|
|
|
if not plantslib.expect_infinite_stacks then
|
|
itemstack:take_item()
|
|
end
|
|
return itemstack
|
|
end
|
|
end,
|
|
})
|
|
end
|
|
|
|
-- register all potted plant nodes, crafts, and most backward-compat aliases
|
|
-- Description, base node name, item to craft flowerpot with
|
|
|
|
local flowers_list = {
|
|
{ "Rose", "rose", "flowers:rose" },
|
|
{ "Tulip", "tulip", "flowers:tulip" },
|
|
{ "Yellow Dandelion", "dandelion_yellow", "flowers:dandelion_yellow" },
|
|
{ "White Dandelion", "dandelion_white", "flowers:dandelion_white" },
|
|
{ "Blue Geranium", "geranium", "flowers:geranium" },
|
|
{ "Viola", "viola", "flowers:viola" },
|
|
{ "Cactus", "cactus", "default:cactus" },
|
|
{ "Bonsai", "bonsai", "default:sapling" }
|
|
}
|
|
|
|
for i in ipairs(flowers_list) do
|
|
local flowerdesc = flowers_list[i][1]
|
|
local flower = flowers_list[i][2]
|
|
local craftwith = flowers_list[i][3]
|
|
|
|
minetest.register_node(":flowers:potted_"..flower, {
|
|
description = S("Potted "..flowerdesc),
|
|
drawtype = "mesh",
|
|
mesh = "flowers_potted.obj",
|
|
tiles = { "flowers_potted_"..flower..".png", "flowers_potted.png" },
|
|
sunlight_propagates = true,
|
|
paramtype = "light",
|
|
walkable = false,
|
|
groups = { snappy = 3, flammable=2 },
|
|
sounds = default.node_sound_glass_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.2, -0.5, -0.2, 0.2, 0.4, 0.2 },
|
|
},
|
|
})
|
|
|
|
minetest.register_craft( {
|
|
type = "shapeless",
|
|
output = "flowers:potted_"..flower,
|
|
recipe = {
|
|
craftwith,
|
|
"flowers:flower_pot"
|
|
}
|
|
})
|
|
|
|
minetest.register_alias("flowers:flower_"..flower.."_pot", "flowers:potted_"..flower)
|
|
end
|
|
|
|
local box = {
|
|
type="fixed",
|
|
fixed = { { -0.2, -0.5, -0.2, 0.2, 0.5, 0.2 } },
|
|
}
|
|
|
|
minetest.register_node(":flowers:sunflower", {
|
|
description = "Sunflower",
|
|
drawtype = "mesh",
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
inventory_image = "flowers_sunflower_inv.png",
|
|
mesh = "flowers_sunflower.obj",
|
|
tiles = { "flowers_sunflower.png" },
|
|
walkable = false,
|
|
buildable_to = true,
|
|
is_ground_content = true,
|
|
groups = { dig_immediate=3, flora=1, flammable=3 },
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = box,
|
|
collision_box = box,
|
|
})
|
|
|
|
minetest.override_item("flowers:sunflower", {drop = {
|
|
max_items = 1,
|
|
items = {
|
|
{items = {"farming:seed_wheat"}, rarity = 8},
|
|
{items = {"flowers:sunflower"}},
|
|
}
|
|
}})
|
|
|
|
local extra_aliases = {
|
|
"waterlily",
|
|
"waterlily_225",
|
|
"waterlily_45",
|
|
"waterlily_675",
|
|
"seaweed"
|
|
}
|
|
|
|
for i in ipairs(extra_aliases) do
|
|
local flower = extra_aliases[i]
|
|
minetest.register_alias("flowers:flower_"..flower, "flowers:"..flower)
|
|
end
|
|
|
|
minetest.register_alias( "trunks:lilypad" , "flowers:waterlily_s1" )
|
|
minetest.register_alias( "along_shore:lilypads_1" , "flowers:waterlily_s1" )
|
|
minetest.register_alias( "along_shore:lilypads_2" , "flowers:waterlily_s2" )
|
|
minetest.register_alias( "along_shore:lilypads_3" , "flowers:waterlily_s3" )
|
|
minetest.register_alias( "along_shore:lilypads_4" , "flowers:waterlily_s4" )
|
|
minetest.register_alias( "along_shore:pondscum_1" , "flowers:seaweed" )
|
|
minetest.register_alias( "along_shore:seaweed_1" , "flowers:seaweed" )
|
|
minetest.register_alias( "along_shore:seaweed_2" , "flowers:seaweed_2" )
|
|
minetest.register_alias( "along_shore:seaweed_3" , "flowers:seaweed_3" )
|
|
minetest.register_alias( "along_shore:seaweed_4" , "flowers:seaweed_4" )
|
|
|
|
-- ongen registrations
|
|
|
|
flowers_plus.grow_waterlily = function(pos)
|
|
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
for i in ipairs(lilies_list) do
|
|
local chance = math.random(1,8)
|
|
local ext = ""
|
|
local num = lilies_list[i][3]
|
|
|
|
if lilies_list[i][1] ~= nil then
|
|
ext = "_"..lilies_list[i][1]
|
|
end
|
|
|
|
if chance == num then
|
|
minetest.set_node(right_here, {name="flowers:waterlily"..ext, param2=math.random(0,3)})
|
|
end
|
|
end
|
|
end
|
|
|
|
plantslib:register_generate_plant({
|
|
surface = {"default:water_source"},
|
|
max_count = lilies_max_count,
|
|
rarity = lilies_rarity,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
near_nodes = {"default:dirt_with_grass"},
|
|
near_nodes_size = 4,
|
|
near_nodes_vertical = 1,
|
|
near_nodes_count = 1,
|
|
plantlife_limit = -0.9,
|
|
temp_max = -0.22,
|
|
temp_min = 0.22,
|
|
},
|
|
flowers_plus.grow_waterlily
|
|
)
|
|
|
|
flowers_plus.grow_seaweed = function(pos)
|
|
local right_here = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
minetest.set_node(right_here, {name="along_shore:seaweed_"..math.random(1,4), param2=math.random(1,3)})
|
|
end
|
|
|
|
plantslib:register_generate_plant({
|
|
surface = {"default:water_source"},
|
|
max_count = seaweed_max_count,
|
|
rarity = seaweed_rarity,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
near_nodes = {"default:dirt_with_grass"},
|
|
near_nodes_size = 4,
|
|
near_nodes_vertical = 1,
|
|
near_nodes_count = 1,
|
|
plantlife_limit = -0.9,
|
|
},
|
|
flowers_plus.grow_seaweed
|
|
)
|
|
|
|
-- seaweed at beaches
|
|
-- MM: not satisfied with it, but IMHO some beaches should have some algae
|
|
plantslib:register_generate_plant({
|
|
surface = {"default:water_source"},
|
|
max_count = seaweed_max_count,
|
|
rarity = seaweed_rarity,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
near_nodes = {"default:sand"},
|
|
near_nodes_size = 1,
|
|
near_nodes_vertical = 0,
|
|
near_nodes_count = 3,
|
|
plantlife_limit = -0.9,
|
|
temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
|
|
temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
|
|
},
|
|
flowers_plus.grow_seaweed
|
|
)
|
|
plantslib:register_generate_plant({
|
|
surface = {"default:sand"},
|
|
max_count = seaweed_max_count*2,
|
|
rarity = seaweed_rarity/2,
|
|
min_elevation = 1,
|
|
max_elevation = 40,
|
|
near_nodes = {"default:water_source"},
|
|
near_nodes_size = 1,
|
|
near_nodes_vertical = 0,
|
|
near_nodes_count = 3,
|
|
plantlife_limit = -0.9,
|
|
temp_max = -0.64, -- MM: more or less random values, just to make sure it's not everywhere
|
|
temp_min = -0.22, -- MM: more or less random values, just to make sure it's not everywhere
|
|
},
|
|
flowers_plus.grow_seaweed
|
|
)
|
|
|
|
plantslib:register_generate_plant({
|
|
surface = {"default:dirt_with_grass"},
|
|
avoid_nodes = { "flowers:sunflower" },
|
|
max_count = sunflowers_max_count,
|
|
rarity = sunflowers_rarity,
|
|
min_elevation = 0,
|
|
plantlife_limit = -0.9,
|
|
temp_max = 0.53,
|
|
random_facedir = {0,3},
|
|
},
|
|
"flowers:sunflower"
|
|
)
|
|
|
|
-- spawn ABM registrations
|
|
|
|
plantslib:spawn_on_surfaces({
|
|
spawn_delay = SPAWN_DELAY/2,
|
|
spawn_plants = {
|
|
"flowers:waterlily",
|
|
"flowers:waterlily_225",
|
|
"flowers:waterlily_45",
|
|
"flowers:waterlily_675",
|
|
"flowers:waterlily_s1",
|
|
"flowers:waterlily_s2",
|
|
"flowers:waterlily_s3",
|
|
"flowers:waterlily_s4"
|
|
},
|
|
avoid_radius = 2.5,
|
|
spawn_chance = SPAWN_CHANCE*4,
|
|
spawn_surfaces = {"default:water_source"},
|
|
avoid_nodes = {"group:flower", "group:flora" },
|
|
seed_diff = flowers_seed_diff,
|
|
light_min = 9,
|
|
depth_max = 2,
|
|
random_facedir = {0,3}
|
|
})
|
|
|
|
plantslib:spawn_on_surfaces({
|
|
spawn_delay = SPAWN_DELAY*2,
|
|
spawn_plants = {"flowers:seaweed"},
|
|
spawn_chance = SPAWN_CHANCE*2,
|
|
spawn_surfaces = {"default:water_source"},
|
|
avoid_nodes = {"group:flower", "group:flora"},
|
|
seed_diff = flowers_seed_diff,
|
|
light_min = 4,
|
|
light_max = 10,
|
|
neighbors = {"default:dirt_with_grass"},
|
|
facedir = 1
|
|
})
|
|
|
|
plantslib:spawn_on_surfaces({
|
|
spawn_delay = SPAWN_DELAY*2,
|
|
spawn_plants = {"flowers:seaweed"},
|
|
spawn_chance = SPAWN_CHANCE*2,
|
|
spawn_surfaces = {"default:dirt_with_grass"},
|
|
avoid_nodes = {"group:flower", "group:flora" },
|
|
seed_diff = flowers_seed_diff,
|
|
light_min = 4,
|
|
light_max = 10,
|
|
neighbors = {"default:water_source"},
|
|
ncount = 1,
|
|
facedir = 1
|
|
})
|
|
|
|
plantslib:spawn_on_surfaces({
|
|
spawn_delay = SPAWN_DELAY*2,
|
|
spawn_plants = {"flowers:seaweed"},
|
|
spawn_chance = SPAWN_CHANCE*2,
|
|
spawn_surfaces = {"default:stone"},
|
|
avoid_nodes = {"group:flower", "group:flora" },
|
|
seed_diff = flowers_seed_diff,
|
|
light_min = 4,
|
|
light_max = 10,
|
|
neighbors = {"default:water_source"},
|
|
ncount = 6,
|
|
facedir = 1
|
|
})
|
|
|
|
plantslib:spawn_on_surfaces({
|
|
spawn_delay = SPAWN_DELAY*2,
|
|
spawn_plants = {"flowers:sunflower"},
|
|
spawn_chance = SPAWN_CHANCE*2,
|
|
spawn_surfaces = {"default:dirt_with_grass"},
|
|
avoid_nodes = {"group:flower", "flowers:sunflower"},
|
|
seed_diff = flowers_seed_diff,
|
|
light_min = 11,
|
|
light_max = 14,
|
|
min_elevation = 0,
|
|
plantlife_limit = -0.9,
|
|
temp_max = 0.53,
|
|
random_facedir = {0,3},
|
|
avoid_radius = 5
|
|
})
|
|
|
|
-- crafting recipes!
|
|
|
|
minetest.register_craftitem(":flowers:flower_pot", {
|
|
description = S("Flower Pot"),
|
|
inventory_image = "flowers_flowerpot.png",
|
|
})
|
|
|
|
minetest.register_craft( {
|
|
output = "flowers:flower_pot",
|
|
recipe = {
|
|
{ "default:clay_brick", "", "default:clay_brick" },
|
|
{ "", "default:clay_brick", "" }
|
|
},
|
|
})
|
|
|
|
-- Cotton plants are now provided by the default "farming" mod.
|
|
-- old cotton plants -> farming cotton stage 8
|
|
-- cotton wads -> string (can be crafted into wool blocks)
|
|
-- potted cotton plants -> potted white dandelions
|
|
|
|
minetest.register_alias("flowers:cotton_plant", "farming:cotton_8")
|
|
minetest.register_alias("flowers:flower_cotton", "farming:cotton_8")
|
|
minetest.register_alias("flowers:flower_cotton_pot", "flowers:potted_dandelion_white")
|
|
minetest.register_alias("flowers:potted_cotton_plant", "flowers:potted_dandelion_white")
|
|
minetest.register_alias("flowers:cotton", "farming:string")
|
|
minetest.register_alias("flowers:cotton_wad", "farming:string")
|
|
minetest.register_alias("sunflower:sunflower", "flowers:sunflower")
|
|
|
|
minetest.log("action", S("[Flowers] Loaded."))
|