fun_caves/deco_plants.lua
2016-07-15 04:18:54 -05:00

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