forked from mtcontrib/plantlife_modpack
a6c8e4a9d3
* Remove biome_lib dep from pl_seaweed * Push changes (new approach tomorrow) * no.2 Co-authored-by: wsor4035 <24964441+wsor4035@users.noreply.github.com>
442 lines
14 KiB
Lua
442 lines
14 KiB
Lua
-- NOTES (from wikipedia, some of this might get implemented)
|
|
-- rhizomes are edible
|
|
-- outer portion of young plants can be peeled and the heart can be eaten raw or boiled and eaten like asparagus
|
|
-- leaf bases can be eaten raw or cooked
|
|
-- sheath can be removed from the developing green flower spike, which can then be boiled and eaten like corn on the cob
|
|
-- pollen can be collected and used as a flour supplement or thickener
|
|
-- Typha stems and leaves can be used to make paper
|
|
-- The seed hairs were used by some Native American groups as tinder for starting fires
|
|
|
|
-- support for i18n
|
|
local S = minetest.get_translator("dryplants")
|
|
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE SHAPES
|
|
-----------------------------------------------------------------------------------------------
|
|
|
|
local function grow_reedmace(pos)
|
|
local size = math.random(1,3)
|
|
local spikes = math.random(1,3)
|
|
local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z}
|
|
local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z}
|
|
|
|
local nodename = minetest.get_node(pos_01).name
|
|
if nodename == "air" -- bug fix
|
|
or nodename == "dryplants:reedmace_sapling" then
|
|
if minetest.get_node(pos_02).name ~= "air" then
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_top"})
|
|
elseif minetest.get_node(pos_03).name ~= "air" then
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_height_2"})
|
|
elseif size == 1 then
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_top"})
|
|
elseif size == 2 then
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_height_2"})
|
|
elseif size == 3 then
|
|
if spikes == 1 then
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_height_3_spikes"})
|
|
else
|
|
minetest.swap_node(pos_01, {name="dryplants:reedmace_height_3"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
local function grow_reedmace_water(pos)
|
|
local size = math.random(1,3)
|
|
local spikes = math.random(1,3)
|
|
local pos_01 = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local pos_02 = {x = pos.x, y = pos.y + 2, z = pos.z}
|
|
local pos_03 = {x = pos.x, y = pos.y + 3, z = pos.z}
|
|
local pos_04 = {x = pos.x, y = pos.y + 4, z = pos.z}
|
|
|
|
minetest.add_entity(pos_01, "dryplants:reedmace_water_entity")
|
|
|
|
if minetest.get_node(pos_02).name == "air" then -- bug fix
|
|
if minetest.get_node(pos_03).name ~= "air" then
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_top"})
|
|
elseif minetest.get_node(pos_04).name ~= "air" then
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_height_2"})
|
|
elseif size == 1 then
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_top"})
|
|
elseif size == 2 then
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_height_2"})
|
|
elseif size == 3 then
|
|
if spikes == 1 then
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_height_3_spikes"})
|
|
else
|
|
minetest.swap_node(pos_02, {name="dryplants:reedmace_height_3"})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
abstract_dryplants.grow_reedmace = grow_reedmace -- compatibility
|
|
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE SPIKES
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_spikes", {
|
|
description = S("Reedmace"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_spikes.png"},
|
|
inventory_image = "dryplants_reedmace_spikes.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE height: 1
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_top", {
|
|
description = S("Reedmace, height: 1"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_top.png"},
|
|
inventory_image = "dryplants_reedmace_top.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE height: 2
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_height_2", {
|
|
description = S("Reedmace, height: 2"),
|
|
drawtype = "plantlike",
|
|
visual_scale = math.sqrt(8),
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_height_2.png"},
|
|
inventory_image = "dryplants_reedmace_top.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2--,
|
|
--not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE height: 3
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_height_3", {
|
|
description = S("Reedmace, height: 3"),
|
|
drawtype = "plantlike",
|
|
visual_scale = math.sqrt(8),
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_height_3.png"},
|
|
inventory_image = "dryplants_reedmace_top.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2--,
|
|
--not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE height: 3 & Spikes
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_height_3_spikes", {
|
|
description = S("Reedmace, height: 3 & Spikes"),
|
|
drawtype = "plantlike",
|
|
visual_scale = math.sqrt(8),
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_height_3_spikes.png"},
|
|
inventory_image = "dryplants_reedmace_top.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2--,
|
|
--not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE STEMS
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace", {
|
|
description = S("Reedmace"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace.png"},
|
|
inventory_image = "dryplants_reedmace.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
after_destruct = function(pos,oldnode)
|
|
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
|
if node.name == "dryplants:reedmace_top"
|
|
or node.name == "dryplants:reedmace_spikes" then
|
|
minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
|
|
minetest.add_item(pos,"dryplants:reedmace_sapling")
|
|
end
|
|
end,
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE BOTTOM
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_bottom", {
|
|
description = S("Reedmace"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_bottom.png"},
|
|
inventory_image = "dryplants_reedmace_bottom.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
not_in_creative_inventory=1
|
|
},
|
|
drop = 'dryplants:reedmace_sapling',
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
after_destruct = function(pos,oldnode)
|
|
local node = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
|
if node.name == "dryplants:reedmace"
|
|
or node.name == "dryplants:reedmace_top"
|
|
or node.name == "dryplants:reedmace_spikes" then
|
|
minetest.dig_node({x=pos.x,y=pos.y+1,z=pos.z})
|
|
minetest.add_item(pos,"dryplants:reedmace_sapling")
|
|
end
|
|
end,
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE "SAPLING" (the drop from the above)
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_sapling", {
|
|
description = S("Reedmace"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_sapling.png"},
|
|
inventory_image = "dryplants_reedmace_sapling.png",
|
|
walkable = false,
|
|
groups = {
|
|
snappy=3,
|
|
flammable=2,
|
|
attached_node=1,
|
|
sapling=1,
|
|
},
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-- abm
|
|
minetest.register_abm({
|
|
nodenames = "dryplants:reedmace_sapling",
|
|
interval = 600,
|
|
chance = 100/5,
|
|
action = function(pos, node, _, _)
|
|
if string.find(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z }).name, "default:water")
|
|
or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}).name, "default:water")
|
|
or string.find(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z }).name, "default:water")
|
|
or string.find(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}).name, "default:water") then
|
|
if minetest.get_node({x = pos.x, y = pos.y + 1, z = pos.z}).name == "air" then
|
|
grow_reedmace_water({x = pos.x, y = pos.y - 1, z = pos.z})
|
|
end
|
|
minetest.swap_node({x=pos.x, y=pos.y, z=pos.z}, {name="default:water_source"})
|
|
else
|
|
grow_reedmace({x = pos.x, y = pos.y - 1, z = pos.z})
|
|
end
|
|
end
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE WATER (for entity)
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_node("dryplants:reedmace_water", {
|
|
description = S("Reedmace"),
|
|
drawtype = "plantlike",
|
|
paramtype = "light",
|
|
tiles = {"dryplants_reedmace_water.png"},
|
|
inventory_image = "dryplants_reedmace_water.png",
|
|
groups = {not_in_creative_inventory=1},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
},
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- REEDMACE WATER ENTITY
|
|
-----------------------------------------------------------------------------------------------
|
|
minetest.register_entity("dryplants:reedmace_water_entity",{
|
|
visual = "mesh",
|
|
mesh = "plantlike.obj",
|
|
visual_size = {x=10, y=10},
|
|
textures = {"dryplants_reedmace_water.png"},
|
|
collisionbox = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3},
|
|
on_punch = function(self, puncher)
|
|
if puncher:is_player() and puncher:get_inventory() then
|
|
if not minetest.is_creative_enabled(puncher:get_player_name()) then
|
|
puncher:get_inventory():add_item("main", "dryplants:reedmace_sapling")
|
|
end
|
|
self.object:remove()
|
|
end
|
|
end,
|
|
})
|
|
-----------------------------------------------------------------------------------------------
|
|
-- GENERATE REEDMACE
|
|
-----------------------------------------------------------------------------------------------
|
|
-- near water or swamp
|
|
minetest.register_decoration({
|
|
name = "dryplants:reedmace_swamp",
|
|
decoration = {"air"},
|
|
fill_ratio = "0.05",
|
|
y_min = 1,
|
|
y_max = 40,
|
|
place_on = {
|
|
"default:dirt_with_grass",
|
|
"default:desert_sand",
|
|
"stoneage:grass_with_silex",
|
|
"sumpf:peat",
|
|
"sumpf:sumpf"
|
|
},
|
|
deco_type = "simple",
|
|
flags = "all_floors",
|
|
spawn_by = {
|
|
"default:water_source",
|
|
"sumpf:dirtywater_source",
|
|
"sumpf:sumpf"
|
|
},
|
|
check_offset = -1,
|
|
num_spawn_by = 1
|
|
})
|
|
|
|
-- in water
|
|
minetest.register_decoration({
|
|
name = "dryplants:reedmace_water",
|
|
decoration = {"air"},
|
|
fill_ratio = "0.01",
|
|
y_min = 0,
|
|
y_max = 0,
|
|
place_on = {
|
|
"default:dirt",
|
|
"default:dirt_with_grass",
|
|
"stoneage:sand_with_silex",
|
|
"sumpf:peat",
|
|
"sumpf:sumpf"
|
|
},
|
|
deco_type = "simple",
|
|
flags = "all_floors",
|
|
spawn_by = {
|
|
"default:water_source",
|
|
"sumpf:dirtywater_source"
|
|
},
|
|
check_offset = -1,
|
|
num_spawn_by = 1
|
|
})
|
|
|
|
-- for oases & tropical beaches & tropical swamps
|
|
minetest.register_decoration({
|
|
name = "dryplants:reedmace_beach",
|
|
decoration = {"air"},
|
|
fill_ratio = "0.05",
|
|
y_min = 1,
|
|
y_max = 40,
|
|
place_on = {
|
|
"default:sand",
|
|
"sumpf:sumpf"
|
|
},
|
|
deco_type = "simple",
|
|
flags = "all_floors",
|
|
spawn_by = {
|
|
"default:water_source",
|
|
"sumpf:dirtywater_source",
|
|
"sumpf:sumpf",
|
|
"default:desert_sand"
|
|
},
|
|
check_offset = -1,
|
|
num_spawn_by = 1
|
|
})
|
|
|
|
local did, did2, did3
|
|
minetest.register_on_mods_loaded(function()
|
|
did = minetest.get_decoration_id("dryplants:reedmace_swamp")
|
|
did2 = minetest.get_decoration_id("dryplants:reedmace_water")
|
|
did3 = minetest.get_decoration_id("dryplants:reedmace_beach")
|
|
minetest.set_gen_notify("decoration", {did, did2, did3})
|
|
end)
|
|
|
|
minetest.register_on_generated(function(minp, maxp, blockseed)
|
|
local g = minetest.get_mapgen_object("gennotify")
|
|
local locations = {}
|
|
|
|
local deco_locations_1 = g["decoration#" .. did] or {}
|
|
local deco_locations_3 = g["decoration#" .. did3] or {}
|
|
|
|
for _, pos in pairs(deco_locations_1) do
|
|
locations[#locations+1] = pos
|
|
end
|
|
for _, pos in pairs(deco_locations_3) do
|
|
locations[#locations+1] = pos
|
|
end
|
|
|
|
if #locations == 0 then return end
|
|
for _, pos in ipairs(locations) do
|
|
grow_reedmace(pos)
|
|
end
|
|
end)
|
|
|
|
minetest.register_on_generated(function(minp, maxp, blockseed)
|
|
local g = minetest.get_mapgen_object("gennotify")
|
|
local locations = {}
|
|
|
|
local deco_locations_2 = g["decoration#" .. did2] or {}
|
|
|
|
for _, pos in pairs(deco_locations_2) do
|
|
locations[#locations+1] = pos
|
|
end
|
|
|
|
if #locations == 0 then return end
|
|
for _, pos in ipairs(locations) do
|
|
grow_reedmace_water(pos)
|
|
end
|
|
end)
|