255 lines
7.7 KiB
Lua
255 lines
7.7 KiB
Lua
fun_caves.water_plants = {}
|
|
local function register_water_plant(desc)
|
|
if not (desc and type(desc) == 'table') then
|
|
return
|
|
end
|
|
|
|
fun_caves.water_plants[#fun_caves.water_plants+1] = desc
|
|
end
|
|
|
|
|
|
minetest.register_node("fun_caves:pillar_coral", {
|
|
description = "Pillar Coral",
|
|
tiles = {"fun_caves_pillar_coral.png"},
|
|
paramtype = "light",
|
|
light_source = 2,
|
|
groups = {cracky = 3, stone=1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
|
|
minetest.register_node("fun_caves:brain_coral", {
|
|
description = "Brain Coral",
|
|
tiles = {"fun_caves_brain_coral.png"},
|
|
light_source = 4,
|
|
groups = {cracky = 3, stone=1,},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
|
|
minetest.register_node("fun_caves:dragon_eye", {
|
|
description = "Dragon Eye",
|
|
tiles = {"fun_caves_dragon_eye.png"},
|
|
light_source = 4,
|
|
groups = {cracky = 3, stone=1,},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
|
|
plantlist = {
|
|
{name="staghorn_coral",
|
|
desc="Staghorn Coral",
|
|
water=true,
|
|
light_source=1,
|
|
coral=true,
|
|
sounds = default.node_sound_stone_defaults(),
|
|
},
|
|
|
|
{name="precious_coral",
|
|
desc="Precious Coral",
|
|
water=true,
|
|
light_source=2,
|
|
coral=true,
|
|
sounds = default.node_sound_stone_defaults(),
|
|
},
|
|
|
|
{name="water_plant_1",
|
|
desc="Water Plant",
|
|
water=true,
|
|
},
|
|
|
|
{name="bird_of_paradise",
|
|
desc="Bird of Paradise",
|
|
light=true,
|
|
groups={flower=1},
|
|
},
|
|
|
|
{name="gerbera",
|
|
desc="Gerbera",
|
|
light=true,
|
|
groups={flower=1, color_pink=1},
|
|
},
|
|
|
|
{name="hibiscus",
|
|
desc="Hibiscus",
|
|
wave=true,
|
|
groups={flower=1, color_white=1},
|
|
},
|
|
|
|
{name="orchid",
|
|
desc="Orchid",
|
|
wave=true,
|
|
light=true,
|
|
groups={flower=1, color_white=1},
|
|
},
|
|
}
|
|
|
|
|
|
for _, plant in ipairs(plantlist) do
|
|
if plant.coral then
|
|
groups = {cracky=3, stone=1, attached_node=1}
|
|
else
|
|
groups = {snappy=3,flammable=2,flora=1,attached_node=1}
|
|
end
|
|
if plant.groups then
|
|
for k,v in pairs(plant.groups) do
|
|
groups[k] = v
|
|
end
|
|
end
|
|
|
|
minetest.register_node("fun_caves:"..plant.name, {
|
|
description = plant.desc,
|
|
drawtype = "plantlike",
|
|
tiles = {"fun_caves_"..plant.name..".png"},
|
|
waving = plant.wave,
|
|
sunlight_propagates = plant.light,
|
|
paramtype = "light",
|
|
walkable = false,
|
|
groups = groups,
|
|
sounds = default.node_sound_leaves_defaults(),
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
|
},
|
|
})
|
|
|
|
if plant.water then
|
|
local def = {
|
|
description = plant.desc,
|
|
drawtype = "nodebox",
|
|
node_box = {type='fixed', fixed={{-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, {-0.5, 0.5, -0.001, 0.5, 1.5, 0.001}, {-0.001, 0.5, -0.5, 0.001, 1.5, 0.5}}},
|
|
drop = "fun_caves:"..plant.name,
|
|
tiles = { "default_sand.png", "fun_caves_"..plant.name..".png",},
|
|
--tiles = { "default_dirt.png", "fun_caves_"..plant.name..".png",},
|
|
sunlight_propagates = plant.light,
|
|
--light_source = 14,
|
|
paramtype = "light",
|
|
light_source = plant.light_source,
|
|
walkable = true,
|
|
groups = groups,
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = {-0.5, 0.5, -0.5, 0.5, 11/16, 0.5},
|
|
},
|
|
sounds = plant.sounds or default.node_sound_leaves_defaults(),
|
|
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
|
if not (pos and oldnode) then
|
|
return
|
|
end
|
|
|
|
local replacement = oldnode.name:gsub('.*_water_(.*)', 'default:%1')
|
|
if replacement:find('cloud$') then
|
|
replacement = replacement:gsub('^default', 'fun_caves')
|
|
end
|
|
minetest.set_node(pos, {name = replacement})
|
|
end,
|
|
}
|
|
minetest.register_node("fun_caves:"..plant.name.."_water_sand", def)
|
|
def2 = table.copy(def)
|
|
def2.tiles = { "default_dirt.png", "fun_caves_"..plant.name..".png",}
|
|
minetest.register_node("fun_caves:"..plant.name.."_water_dirt", def2)
|
|
def2 = table.copy(def)
|
|
def2.tiles = { "fun_caves_cloud.png", "fun_caves_"..plant.name..".png",}
|
|
minetest.register_node("fun_caves:"..plant.name.."_water_cloud", def2)
|
|
def2 = table.copy(def)
|
|
def2.tiles = { "fun_caves_storm_cloud.png", "fun_caves_"..plant.name..".png",}
|
|
minetest.register_node("fun_caves:"..plant.name.."_water_storm_cloud", def2)
|
|
end
|
|
end
|
|
|
|
|
|
local function register_flower(name, seed, biomes)
|
|
if not (name and seed and biomes and type(name) == 'string' and type(seed) == 'number' and type(biomes) == 'table') then
|
|
return
|
|
end
|
|
|
|
local param = {
|
|
deco_type = "simple",
|
|
place_on = {"default:dirt_with_grass"},
|
|
sidelen = 16,
|
|
noise_params = {
|
|
offset = -0.02,
|
|
scale = 0.03,
|
|
spread = {x = 200, y = 200, z = 200},
|
|
seed = seed,
|
|
octaves = 3,
|
|
persist = 0.6
|
|
},
|
|
biomes = biomes,
|
|
y_min = 6,
|
|
y_max = 31000,
|
|
decoration = "fun_caves:"..name,
|
|
}
|
|
|
|
if not fun_caves.use_bi_hi then
|
|
param.biomes = nil
|
|
end
|
|
|
|
-- Let rainforest plants show up more often.
|
|
local key1 = table.contains(biomes, "rainforest")
|
|
local key2 = table.contains(biomes, "desertstone_grassland")
|
|
if fun_caves.use_bi_hi and (key1 or key2) then
|
|
if key1 then
|
|
table.remove(param.biomes, key1)
|
|
else
|
|
table.remove(param.biomes, key2)
|
|
end
|
|
if #param.biomes > 0 then
|
|
minetest.register_decoration(param)
|
|
end
|
|
|
|
local param2 = table.copy(param)
|
|
param2.biomes = {"rainforest", "desertstone_grassland", }
|
|
param2.noise_params.seed = param2.noise_params.seed + 20
|
|
param2.noise_params.offset = param2.noise_params.offset + 0.01
|
|
minetest.register_decoration(param2)
|
|
else
|
|
minetest.register_decoration(param)
|
|
end
|
|
end
|
|
|
|
register_flower("bird_of_paradise", 8402, {"rainforest", "desertstone_grassland", })
|
|
register_flower("orchid", 3944, {"sandstone_grassland", "tundra", "taiga", "stone_grassland", "coniferous_forest", "deciduous_forest", "savanna", "rainforest", "rainforest_swamp", "desertstone_grassland", })
|
|
register_flower("hibiscus", 7831, {"sandstone_grassland", "deciduous_forest", "savanna", "rainforest", "rainforest_swamp", "desertstone_grassland", })
|
|
--register_flower("calla_lily", 7985, {"sandstone_grassland", "stone_grassland", "deciduous_forest", "rainforest", "desertstone_grassland", })
|
|
register_flower("gerbera", 1976, {"savanna", "rainforest", "desertstone_grassland", })
|
|
|
|
do
|
|
-- Water Plant
|
|
local water_plant_1_def_sand = {
|
|
fill_ratio = 0.05,
|
|
place_on = {"group:sand"},
|
|
decoration = {"fun_caves:water_plant_1_water_sand"},
|
|
--biomes = {"sandstone_grassland", "stone_grassland", "coniferous_forest", "deciduous_forest", "desert", "savanna", "rainforest", "rainforest_swamp", },
|
|
biomes = {"sandstone_grassland", "stone_grassland", "coniferous_forest", "deciduous_forest", "savanna", "rainforest", "rainforest_swamp","sandstone_grassland_ocean", "stone_grassland_ocean", "coniferous_forest_ocean", "deciduous_forest_ocean", "desert_ocean", "savanna_ocean", "desertstone_grassland", },
|
|
y_max = 60,
|
|
}
|
|
if not fun_caves.use_bi_hi then
|
|
water_plant_1_def_sand.biomes = nil
|
|
end
|
|
|
|
local water_plant_1_def_dirt = table.copy(water_plant_1_def_sand)
|
|
water_plant_1_def_dirt.place_on = {"group:soil"}
|
|
water_plant_1_def_dirt.decoration = {"fun_caves:water_plant_1_water_dirt",}
|
|
local water_plant_1_def_cloud = table.copy(water_plant_1_def_sand)
|
|
water_plant_1_def_cloud.place_on = {"group:cloud"}
|
|
water_plant_1_def_cloud.decoration = {"fun_caves:water_plant_1_water_cloud",}
|
|
local water_plant_1_def_storm_cloud = table.copy(water_plant_1_def_sand)
|
|
water_plant_1_def_storm_cloud.place_on = {"group:cloud"}
|
|
water_plant_1_def_storm_cloud.decoration = {"fun_caves:water_plant_1_water_storm_cloud",}
|
|
|
|
register_water_plant(water_plant_1_def_sand)
|
|
register_water_plant(water_plant_1_def_dirt)
|
|
register_water_plant(water_plant_1_def_cloud)
|
|
register_water_plant(water_plant_1_def_storm_cloud)
|
|
end
|
|
|
|
|
|
-- Get the content ids for all registered water plants.
|
|
for _, desc in pairs(fun_caves.water_plants) do
|
|
if type(desc.decoration) == 'string' then
|
|
desc.content_id = minetest.get_content_id(desc.decoration)
|
|
elseif type(desc.decoration) == 'table' then
|
|
desc.content_id = minetest.get_content_id(desc.decoration[1])
|
|
end
|
|
end
|