2013-01-10 03:33:37 +01:00
|
|
|
-- Plantlife library mod by Vanessa Ezekowitz
|
2014-05-15 12:09:59 +02:00
|
|
|
-- last revision, 2014-05-15
|
2012-12-05 01:29:23 +01:00
|
|
|
--
|
2013-01-10 03:33:37 +01:00
|
|
|
-- License: WTFPL
|
2013-01-12 06:47:50 +01:00
|
|
|
--
|
|
|
|
-- I got the temperature map idea from "hmmmm", values used for it came from
|
2013-01-19 06:45:46 +01:00
|
|
|
-- Splizard's snow mod.
|
2013-01-12 06:47:50 +01:00
|
|
|
--
|
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
-- Various settings - most of these probably won't need to be changed
|
|
|
|
|
2013-01-19 06:45:46 +01:00
|
|
|
plantslib = {}
|
2013-01-05 00:56:09 +01:00
|
|
|
|
2013-10-26 23:29:50 +02:00
|
|
|
plantslib.modpath = minetest.get_modpath("plants_lib")
|
|
|
|
plantslib.intllib_modpath = minetest.get_modpath("intllib")
|
|
|
|
|
|
|
|
local S
|
|
|
|
if plantslib.intllib_modpath then
|
|
|
|
dofile(plantslib.intllib_modpath.."/intllib.lua")
|
|
|
|
S = intllib.Getter(minetest.get_current_modname())
|
|
|
|
else
|
|
|
|
S = function ( s ) return s end
|
|
|
|
end
|
|
|
|
|
2013-03-31 07:07:45 +02:00
|
|
|
local DEBUG = false --... except if you want to spam the console with debugging info :-)
|
2013-01-20 19:51:09 +01:00
|
|
|
|
2013-11-16 02:38:52 +01:00
|
|
|
function plantslib:dbg(msg)
|
|
|
|
if DEBUG then
|
|
|
|
print("[Plantlife] "..msg)
|
|
|
|
minetest.log("verbose", "[Plantlife] "..msg)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-01-19 06:45:46 +01:00
|
|
|
plantslib.plantlife_seed_diff = 329 -- needs to be global so other mods can see it
|
2012-12-05 01:29:23 +01:00
|
|
|
|
|
|
|
local perlin_octaves = 3
|
2013-01-05 00:56:09 +01:00
|
|
|
local perlin_persistence = 0.6
|
|
|
|
local perlin_scale = 100
|
2012-12-05 01:29:23 +01:00
|
|
|
|
2013-01-12 06:47:50 +01:00
|
|
|
local temperature_seeddiff = 112
|
|
|
|
local temperature_octaves = 3
|
|
|
|
local temperature_persistence = 0.5
|
|
|
|
local temperature_scale = 150
|
|
|
|
|
2013-02-03 09:01:44 +01:00
|
|
|
local humidity_seeddiff = 9130
|
|
|
|
local humidity_octaves = 3
|
2013-01-28 21:30:35 +01:00
|
|
|
local humidity_persistence = 0.5
|
2013-02-03 09:01:44 +01:00
|
|
|
local humidity_scale = 250
|
2012-12-05 01:29:23 +01:00
|
|
|
|
2013-11-16 02:38:52 +01:00
|
|
|
local time_scale = 1
|
|
|
|
local time_speed = tonumber(minetest.setting_get("time_speed"))
|
|
|
|
|
|
|
|
if time_speed and time_speed > 0 then
|
|
|
|
time_scale = 72 / time_speed
|
|
|
|
end
|
|
|
|
|
2013-02-23 06:34:03 +01:00
|
|
|
--PerlinNoise(seed, octaves, persistence, scale)
|
|
|
|
|
|
|
|
plantslib.perlin_temperature = PerlinNoise(temperature_seeddiff, temperature_octaves, temperature_persistence, temperature_scale)
|
|
|
|
plantslib.perlin_humidity = PerlinNoise(humidity_seeddiff, humidity_octaves, humidity_persistence, humidity_scale)
|
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
-- Local functions
|
|
|
|
|
2013-06-16 15:34:35 +02:00
|
|
|
local function dump_pos(pos)
|
|
|
|
return "{x="..pos.x..",y="..pos.y..",z="..pos.z.."}"
|
|
|
|
end
|
2012-12-05 01:29:23 +01:00
|
|
|
|
2013-01-19 06:45:46 +01:00
|
|
|
function plantslib:is_node_loaded(node_pos)
|
2013-12-15 19:41:07 +01:00
|
|
|
local n = minetest.get_node_or_nil(node_pos)
|
2013-02-23 06:34:03 +01:00
|
|
|
if (not n) or (n.name == "ignore") then
|
2012-12-05 01:29:23 +01:00
|
|
|
return false
|
|
|
|
end
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
2013-11-03 00:52:08 +01:00
|
|
|
function plantslib:clone_node(name)
|
|
|
|
node2={}
|
|
|
|
node=minetest.registered_nodes[name]
|
|
|
|
for k,v in pairs(node) do
|
|
|
|
node2[k]=v
|
|
|
|
end
|
|
|
|
return node2
|
|
|
|
end
|
|
|
|
|
2013-03-09 22:47:58 +01:00
|
|
|
function plantslib:set_defaults(biome)
|
|
|
|
biome.seed_diff = biome.seed_diff or 0
|
|
|
|
biome.min_elevation = biome.min_elevation or -31000
|
|
|
|
biome.max_elevation = biome.max_elevation or 31000
|
|
|
|
biome.temp_min = biome.temp_min or 1
|
|
|
|
biome.temp_max = biome.temp_max or -1
|
|
|
|
biome.humidity_min = biome.humidity_min or 1
|
|
|
|
biome.humidity_max = biome.humidity_max or -1
|
|
|
|
biome.plantlife_limit = biome.plantlife_limit or 0.1
|
|
|
|
biome.near_nodes_vertical = biome.near_nodes_vertical or 1
|
2013-03-09 23:06:21 +01:00
|
|
|
|
|
|
|
-- specific to on-generate
|
|
|
|
|
|
|
|
biome.neighbors = biome.neighbors or biome.surface
|
|
|
|
biome.near_nodes_size = biome.near_nodes_size or 0
|
|
|
|
biome.near_nodes_count = biome.near_nodes_count or 1
|
|
|
|
biome.rarity = biome.rarity or 50
|
|
|
|
biome.max_count = biome.max_count or 5
|
|
|
|
if biome.check_air ~= false then biome.check_air = true end
|
|
|
|
|
|
|
|
-- specific to abm spawner
|
|
|
|
biome.seed_diff = biome.seed_diff or 0
|
|
|
|
biome.light_min = biome.light_min or 0
|
|
|
|
biome.light_max = biome.light_max or 15
|
|
|
|
biome.depth_max = biome.depth_max or 1
|
|
|
|
biome.facedir = biome.facedir or 0
|
2013-03-09 22:47:58 +01:00
|
|
|
end
|
|
|
|
|
2013-01-19 06:45:46 +01:00
|
|
|
-- Spawn plants using the map generator
|
|
|
|
|
2013-01-28 21:30:35 +01:00
|
|
|
function plantslib:register_generate_plant(biomedef, node_or_function_or_model)
|
|
|
|
minetest.register_on_generated(plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or_model))
|
2013-01-19 06:45:46 +01:00
|
|
|
end
|
|
|
|
|
2013-01-28 21:30:35 +01:00
|
|
|
function plantslib:search_for_surfaces(minp, maxp, biomedef, node_or_function_or_model)
|
2013-01-19 06:45:46 +01:00
|
|
|
return function(minp, maxp, blockseed)
|
2013-03-31 06:53:49 +02:00
|
|
|
local t1=os.clock()
|
2013-01-19 06:45:46 +01:00
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
local biome = biomedef
|
2013-03-09 22:47:58 +01:00
|
|
|
plantslib:set_defaults(biome)
|
|
|
|
|
2013-07-01 05:55:07 +02:00
|
|
|
local searchnodes = minetest.find_nodes_in_area(minp, maxp, biome.surface)
|
2013-01-19 08:10:26 +01:00
|
|
|
local in_biome_nodes = {}
|
|
|
|
local num_in_biome_nodes = 0
|
|
|
|
for i in ipairs(searchnodes) do
|
|
|
|
local pos = searchnodes[i]
|
|
|
|
local p_top = { x = pos.x, y = pos.y + 1, z = pos.z }
|
2013-07-01 05:55:07 +02:00
|
|
|
local perlin1 = minetest.get_perlin(biome.seed_diff, perlin_octaves, perlin_persistence, perlin_scale)
|
2013-01-19 06:45:46 +01:00
|
|
|
local noise1 = perlin1:get2d({x=p_top.x, y=p_top.z})
|
2013-02-23 06:34:03 +01:00
|
|
|
local noise2 = plantslib.perlin_temperature:get2d({x=p_top.x, y=p_top.z})
|
|
|
|
local noise3 = plantslib.perlin_humidity:get2d({x=p_top.x+150, y=p_top.z+50})
|
2013-07-01 05:55:07 +02:00
|
|
|
if (not biome.depth or minetest.get_node({ x = pos.x, y = pos.y-biome.depth-1, z = pos.z }).name ~= biome.surface)
|
|
|
|
and (not biome.check_air or (biome.check_air and minetest.get_node(p_top).name == "air"))
|
2013-01-19 08:10:26 +01:00
|
|
|
and pos.y >= biome.min_elevation
|
|
|
|
and pos.y <= biome.max_elevation
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
and noise1 > biome.plantlife_limit
|
2013-01-20 05:01:20 +01:00
|
|
|
and noise2 <= biome.temp_min
|
|
|
|
and noise2 >= biome.temp_max
|
2013-01-28 21:30:35 +01:00
|
|
|
and noise3 <= biome.humidity_min
|
|
|
|
and noise3 >= biome.humidity_max
|
2013-07-01 05:55:07 +02:00
|
|
|
and (not biome.ncount or table.getn(minetest.find_nodes_in_area({x=pos.x-1, y=pos.y, z=pos.z-1}, {x=pos.x+1, y=pos.y, z=pos.z+1}, biome.neighbors)) > biome.ncount)
|
|
|
|
and (not biome.near_nodes or table.getn(minetest.find_nodes_in_area({x=pos.x-biome.near_nodes_size, y=pos.y-biome.near_nodes_vertical, z=pos.z-biome.near_nodes_size}, {x=pos.x+biome.near_nodes_size, y=pos.y+biome.near_nodes_vertical, z=pos.z+biome.near_nodes_size}, biome.near_nodes)) >= biome.near_nodes_count)
|
2013-01-20 18:01:07 +01:00
|
|
|
and math.random(1,100) > biome.rarity
|
2013-07-01 05:55:07 +02:00
|
|
|
and (not biome.below_nodes or string.find(dump(biome.below_nodes), minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name) )
|
2013-01-19 08:10:26 +01:00
|
|
|
then
|
|
|
|
table.insert(in_biome_nodes, pos)
|
|
|
|
num_in_biome_nodes = num_in_biome_nodes + 1
|
|
|
|
end
|
|
|
|
end
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
|
2013-01-22 05:41:02 +01:00
|
|
|
if num_in_biome_nodes > 0 then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
for i = 1, math.min(biome.max_count, num_in_biome_nodes) do
|
2013-01-22 05:41:02 +01:00
|
|
|
local tries = 0
|
|
|
|
local spawned = false
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
while tries < 2 and not spawned do
|
2013-01-22 05:41:02 +01:00
|
|
|
local pos = in_biome_nodes[math.random(1, num_in_biome_nodes)]
|
2013-02-23 18:33:46 +01:00
|
|
|
if biome.spawn_replace_node then
|
|
|
|
pos.y = pos.y-1
|
|
|
|
end
|
2013-01-22 05:41:02 +01:00
|
|
|
local p_top = { x = pos.x, y = pos.y + 1, z = pos.z }
|
2013-09-15 04:44:16 +02:00
|
|
|
|
|
|
|
if not (biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near(p_top, biome.avoid_radius + math.random(-1.5,2), biome.avoid_nodes)) then
|
2013-02-23 18:33:46 +01:00
|
|
|
if biome.delete_above then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.remove_node(p_top)
|
|
|
|
minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z})
|
2013-02-23 18:33:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
if biome.delete_above_surround then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.remove_node({x=p_top.x-1, y=p_top.y, z=p_top.z})
|
|
|
|
minetest.remove_node({x=p_top.x+1, y=p_top.y, z=p_top.z})
|
|
|
|
minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z-1})
|
|
|
|
minetest.remove_node({x=p_top.x, y=p_top.y, z=p_top.z+1})
|
|
|
|
|
|
|
|
minetest.remove_node({x=p_top.x-1, y=p_top.y+1, z=p_top.z})
|
|
|
|
minetest.remove_node({x=p_top.x+1, y=p_top.y+1, z=p_top.z})
|
|
|
|
minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z-1})
|
|
|
|
minetest.remove_node({x=p_top.x, y=p_top.y+1, z=p_top.z+1})
|
2013-02-23 18:33:46 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
if biome.spawn_replace_node then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.remove_node(pos)
|
2013-02-23 18:33:46 +01:00
|
|
|
end
|
|
|
|
|
2013-01-28 21:30:35 +01:00
|
|
|
if type(node_or_function_or_model) == "table" then
|
2014-05-15 12:08:25 +02:00
|
|
|
local t2=os.clock()
|
2013-02-20 03:50:56 +01:00
|
|
|
plantslib:generate_tree(pos, node_or_function_or_model)
|
2014-05-15 12:08:25 +02:00
|
|
|
spawned = true
|
|
|
|
elseif type(node_or_function_or_model) == "string" and
|
|
|
|
minetest.registered_nodes[node_or_function_or_model] then
|
|
|
|
minetest.add_node(p_top, { name = node_or_function_or_model })
|
|
|
|
spawned = true
|
|
|
|
elseif type(loadstring("return "..node_or_function_or_model)) == "function" then
|
|
|
|
local t2=os.clock()
|
|
|
|
assert(loadstring(node_or_function_or_model.."("..dump_pos(pos)..")"))()
|
|
|
|
spawned = true
|
|
|
|
else
|
2014-05-15 12:23:50 +02:00
|
|
|
print("Ignored invalid definition for object "..dump(node_or_function_or_model).." that was pointed at {"..dump(pos).."}")
|
2013-01-22 05:41:02 +01:00
|
|
|
end
|
|
|
|
else
|
|
|
|
tries = tries + 1
|
|
|
|
end
|
|
|
|
end
|
2013-01-19 06:45:46 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
-- The spawning ABM
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
function plantslib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa)
|
|
|
|
|
|
|
|
local biome = {}
|
|
|
|
|
|
|
|
if type(sd) ~= "table" then
|
|
|
|
biome.spawn_delay = sd -- old api expects ABM interval param here.
|
|
|
|
biome.spawn_plants = {sp}
|
|
|
|
biome.avoid_radius = sr
|
|
|
|
biome.spawn_chance = sc
|
|
|
|
biome.spawn_surfaces = {ss}
|
|
|
|
biome.avoid_nodes = sa
|
|
|
|
else
|
|
|
|
biome = sd
|
|
|
|
end
|
|
|
|
|
2013-11-16 02:38:52 +01:00
|
|
|
if biome.spawn_delay*time_scale >= 1 then
|
|
|
|
biome.interval = biome.spawn_delay*time_scale
|
|
|
|
else
|
|
|
|
biome.interval = 1
|
|
|
|
end
|
|
|
|
|
2013-03-09 22:47:58 +01:00
|
|
|
plantslib:set_defaults(biome)
|
2013-03-10 06:38:20 +01:00
|
|
|
biome.spawn_plants_count = table.getn(biome.spawn_plants)
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
minetest.register_abm({
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
nodenames = biome.spawn_surfaces,
|
2013-11-16 02:38:52 +01:00
|
|
|
interval = biome.interval,
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
chance = biome.spawn_chance,
|
|
|
|
neighbors = biome.neighbors,
|
2012-12-05 01:29:23 +01:00
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
local p_top = { x = pos.x, y = pos.y + 1, z = pos.z }
|
2013-07-01 05:55:07 +02:00
|
|
|
local n_top = minetest.get_node(p_top)
|
|
|
|
local perlin1 = minetest.get_perlin(biome.seed_diff, perlin_octaves, perlin_persistence, perlin_scale)
|
2013-01-12 06:47:50 +01:00
|
|
|
local noise1 = perlin1:get2d({x=p_top.x, y=p_top.z})
|
2013-02-23 06:34:03 +01:00
|
|
|
local noise2 = plantslib.perlin_temperature:get2d({x=p_top.x, y=p_top.z})
|
|
|
|
local noise3 = plantslib.perlin_humidity:get2d({x=p_top.x+150, y=p_top.z+50})
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
if noise1 > biome.plantlife_limit
|
|
|
|
and noise2 <= biome.temp_min
|
|
|
|
and noise2 >= biome.temp_max
|
2013-01-28 21:30:35 +01:00
|
|
|
and noise3 <= biome.humidity_min
|
|
|
|
and noise3 >= biome.humidity_max
|
2013-01-19 06:45:46 +01:00
|
|
|
and plantslib:is_node_loaded(p_top) then
|
2013-07-01 05:55:07 +02:00
|
|
|
local n_light = minetest.get_node_light(p_top, nil)
|
2013-09-15 04:44:16 +02:00
|
|
|
if not (biome.avoid_nodes and biome.avoid_radius and minetest.find_node_near(p_top, biome.avoid_radius + math.random(-1.5,2), biome.avoid_nodes))
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
and n_light >= biome.light_min
|
|
|
|
and n_light <= biome.light_max
|
2013-07-01 05:55:07 +02:00
|
|
|
and (not(biome.neighbors and biome.ncount) or table.getn(minetest.find_nodes_in_area({x=pos.x-1, y=pos.y, z=pos.z-1}, {x=pos.x+1, y=pos.y, z=pos.z+1}, biome.neighbors)) > biome.ncount )
|
|
|
|
and (not(biome.near_nodes and biome.near_nodes_count and biome.near_nodes_size) or table.getn(minetest.find_nodes_in_area({x=pos.x-biome.near_nodes_size, y=pos.y-biome.near_nodes_vertical, z=pos.z-biome.near_nodes_size}, {x=pos.x+biome.near_nodes_size, y=pos.y+biome.near_nodes_vertical, z=pos.z+biome.near_nodes_size}, biome.near_nodes)) >= biome.near_nodes_count)
|
|
|
|
and (not(biome.air_count and biome.air_size) or table.getn(minetest.find_nodes_in_area({x=p_top.x-biome.air_size, y=p_top.y, z=p_top.z-biome.air_size}, {x=p_top.x+biome.air_size, y=p_top.y, z=p_top.z+biome.air_size}, "air")) >= biome.air_count)
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
and pos.y >= biome.min_elevation
|
|
|
|
and pos.y <= biome.max_elevation
|
|
|
|
then
|
|
|
|
local walldir = plantslib:find_adjacent_wall(p_top, biome.verticals_list)
|
|
|
|
if biome.alt_wallnode and walldir then
|
|
|
|
if n_top.name == "air" then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(p_top, { name = biome.alt_wallnode, param2 = walldir })
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
|
|
|
else
|
2013-07-01 05:55:07 +02:00
|
|
|
local currentsurface = minetest.get_node(pos).name
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
if currentsurface ~= "default:water_source"
|
2013-07-01 05:55:07 +02:00
|
|
|
or (currentsurface == "default:water_source" and table.getn(minetest.find_nodes_in_area({x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, {x=pos.x, y=pos.y, z=pos.z}, {"default:dirt", "default:dirt_with_grass", "default:sand"})) > 0 )
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
then
|
|
|
|
local rnd = math.random(1, biome.spawn_plants_count)
|
|
|
|
local plant_to_spawn = biome.spawn_plants[rnd]
|
2013-03-09 22:47:58 +01:00
|
|
|
local fdir = biome.facedir
|
|
|
|
if biome.random_facedir then
|
|
|
|
fdir = math.random(biome.random_facedir[1],biome.random_facedir[2])
|
|
|
|
end
|
2013-01-29 22:22:33 +01:00
|
|
|
if type(spawn_plants) == "string" then
|
2013-06-16 15:34:35 +02:00
|
|
|
assert(loadstring(spawn_plants.."("..dump_pos(pos)..")"))()
|
2013-01-29 22:22:33 +01:00
|
|
|
elseif not biome.spawn_on_side and not biome.spawn_on_bottom and not biome.spawn_replace_node then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
if n_top.name == "air" then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(p_top, { name = plant_to_spawn, param2 = fdir })
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
2013-01-28 21:30:35 +01:00
|
|
|
elseif biome.spawn_replace_node then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(pos, { name = plant_to_spawn, param2 = fdir })
|
2013-01-29 22:22:33 +01:00
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
elseif biome.spawn_on_side then
|
|
|
|
local onside = plantslib:find_open_side(pos)
|
|
|
|
if onside then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(onside.newpos, { name = plant_to_spawn, param2 = onside.facedir })
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
|
|
|
elseif biome.spawn_on_bottom then
|
2013-07-01 05:55:07 +02:00
|
|
|
if minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z}).name == "air" then
|
|
|
|
minetest.add_node({x=pos.x, y=pos.y-1, z=pos.z}, { name = plant_to_spawn, param2 = fdir} )
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
2012-12-29 23:24:47 +01:00
|
|
|
end
|
2012-12-05 01:29:23 +01:00
|
|
|
end
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
2012-12-05 01:29:23 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
|
|
|
-- The growing ABM
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
function plantslib:grow_plants(opts)
|
|
|
|
|
|
|
|
local options = opts
|
|
|
|
|
2013-03-09 22:47:58 +01:00
|
|
|
options.height_limit = options.height_limit or 5
|
|
|
|
options.ground_nodes = options.ground_nodes or { "default:dirt_with_grass" }
|
|
|
|
options.grow_nodes = options.grow_nodes or { "default:dirt_with_grass" }
|
|
|
|
options.seed_diff = options.seed_diff or 0
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
|
2013-11-16 02:38:52 +01:00
|
|
|
if options.grow_delay*time_scale >= 1 then
|
|
|
|
options.interval = options.grow_delay*time_scale
|
|
|
|
else
|
|
|
|
options.interval = 1
|
|
|
|
end
|
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
minetest.register_abm({
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
nodenames = { options.grow_plant },
|
2013-11-16 02:38:52 +01:00
|
|
|
interval = options.interval,
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
chance = options.grow_chance,
|
2012-12-05 01:29:23 +01:00
|
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
|
|
local p_top = {x=pos.x, y=pos.y+1, z=pos.z}
|
|
|
|
local p_bot = {x=pos.x, y=pos.y-1, z=pos.z}
|
2013-07-01 05:55:07 +02:00
|
|
|
local n_top = minetest.get_node(p_top)
|
|
|
|
local n_bot = minetest.get_node(p_bot)
|
|
|
|
local root_node = minetest.get_node({x=pos.x, y=pos.y-options.height_limit, z=pos.z})
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
local walldir = nil
|
2013-02-23 06:34:03 +01:00
|
|
|
if options.need_wall and options.verticals_list then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
walldir = plantslib:find_adjacent_wall(p_top, options.verticals_list)
|
|
|
|
end
|
|
|
|
if n_top.name == "air" and (not options.need_wall or (options.need_wall and walldir))
|
|
|
|
then
|
|
|
|
-- corner case for changing short junglegrass
|
|
|
|
-- to dry shrub in desert
|
|
|
|
if n_bot.name == options.dry_early_node and options.grow_plant == "junglegrass:short" then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(pos, { name = "default:dry_shrub" })
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
|
|
|
|
elseif options.grow_vertically and walldir then
|
|
|
|
if plantslib:search_downward(pos, options.height_limit, options.ground_nodes) then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(p_top, { name = options.grow_plant, param2 = walldir})
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
end
|
2013-01-10 03:33:37 +01:00
|
|
|
|
2013-02-23 06:34:03 +01:00
|
|
|
elseif not options.grow_result and not options.grow_function then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.remove_node(pos)
|
2013-01-10 03:33:37 +01:00
|
|
|
|
2013-01-20 19:37:58 +01:00
|
|
|
else
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
plantslib:replace_object(pos, options.grow_result, options.grow_function, options.facedir, options.seed_diff)
|
2013-01-20 19:37:58 +01:00
|
|
|
end
|
2012-12-05 01:29:23 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
})
|
|
|
|
end
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
-- Function to decide how to replace a plant - either grow it, replace it with
|
|
|
|
-- a tree, run a function, or die with an error.
|
|
|
|
|
|
|
|
function plantslib:replace_object(pos, replacement, grow_function, walldir, seeddiff)
|
|
|
|
local growtype = type(grow_function)
|
|
|
|
if growtype == "table" then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.remove_node(pos)
|
2013-02-20 03:50:56 +01:00
|
|
|
plantslib:grow_tree(pos, grow_function)
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return
|
|
|
|
elseif growtype == "string" then
|
2013-07-01 05:55:07 +02:00
|
|
|
local perlin1 = minetest.get_perlin(seeddiff, perlin_octaves, perlin_persistence, perlin_scale)
|
2013-02-24 18:13:09 +01:00
|
|
|
local noise1 = perlin1:get2d({x=pos.x, y=pos.z})
|
|
|
|
local noise2 = plantslib.perlin_temperature:get2d({x=pos.x, y=pos.z})
|
2013-06-16 15:34:35 +02:00
|
|
|
assert(loadstring(grow_function.."("..dump_pos(pos)..","..noise1..","..noise2..","..dump(walldir)..")"))()
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return
|
|
|
|
elseif growtype == "nil" then
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.add_node(pos, { name = replacement, param2 = walldir})
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return
|
|
|
|
elseif growtype ~= "nil" and growtype ~= "string" and growtype ~= "table" then
|
|
|
|
error("Invalid grow function "..dump(grow_function).." used on object at ("..dump(pos)..")")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-12-05 01:29:23 +01:00
|
|
|
-- function to decide if a node has a wall that's in verticals_list{}
|
|
|
|
-- returns wall direction of valid node, or nil if invalid.
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
function plantslib:find_adjacent_wall(pos, verticals)
|
|
|
|
local verts = dump(verticals)
|
2013-07-01 05:55:07 +02:00
|
|
|
if string.find(verts, minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name) then return 3 end
|
|
|
|
if string.find(verts, minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name) then return 2 end
|
|
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z-1 }).name) then return 5 end
|
|
|
|
if string.find(verts, minetest.get_node({ x=pos.x , y=pos.y, z=pos.z+1 }).name) then return 4 end
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return nil
|
2012-12-05 01:29:23 +01:00
|
|
|
end
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
-- Function to search downward from the given position, looking for the first
|
|
|
|
-- node that matches the ground table. Returns the new position, or nil if
|
|
|
|
-- height limit is exceeded before finding it.
|
2012-12-10 04:02:30 +01:00
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
function plantslib:search_downward(pos, heightlimit, ground)
|
|
|
|
for i = 0, heightlimit do
|
2013-07-01 05:55:07 +02:00
|
|
|
if string.find(dump(ground), minetest.get_node({x=pos.x, y=pos.y-i, z = pos.z}).name) then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return {x=pos.x, y=pos.y-i, z = pos.z}
|
2012-12-10 04:02:30 +01:00
|
|
|
end
|
|
|
|
end
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return false
|
2012-12-10 04:02:30 +01:00
|
|
|
end
|
|
|
|
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
function plantslib:find_open_side(pos)
|
2013-07-01 05:55:07 +02:00
|
|
|
if minetest.get_node({ x=pos.x-1, y=pos.y, z=pos.z }).name == "air" then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return {newpos = { x=pos.x-1, y=pos.y, z=pos.z }, facedir = 2}
|
|
|
|
end
|
2013-07-01 05:55:07 +02:00
|
|
|
if minetest.get_node({ x=pos.x+1, y=pos.y, z=pos.z }).name == "air" then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return {newpos = { x=pos.x+1, y=pos.y, z=pos.z }, facedir = 3}
|
|
|
|
end
|
2013-07-01 05:55:07 +02:00
|
|
|
if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z-1 }).name == "air" then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return {newpos = { x=pos.x, y=pos.y, z=pos.z-1 }, facedir = 4}
|
|
|
|
end
|
2013-07-01 05:55:07 +02:00
|
|
|
if minetest.get_node({ x=pos.x, y=pos.y, z=pos.z+1 }).name == "air" then
|
Changed plants_lib API to require a table argument when not using legacy
calling options. This opens the door for even more features in the future.
Changed flowers, junglegrass, poisonivy to match.
Made plants lib faster in some places, especially the surface-hunting
algorithm, and especially over water. Fixed a few other misc. bugs.
Made growth code properly execute all biome-control code before executing
any string-named function or spawn_tree().
Tuned flowers settings. Made flowers require at least some light to spawn,
made waterlilies require shallower water. Fixed a bug in water depth detection
and made water depth depend on whether the bottom of the water area is dirt,
dirt with grass, or sand, rather than just anything.
Made waterlilies randomly rotate on spawning to break up the patterns (now has
16 orientations with the help of nodeboxes and facedir, requires only 3 new
nodes). Smoothed edges of the regular waterlily texture. Made all flowers and
water- lilies spawn using only 3 ABM calls instead of 8.
Got rid of colon prefix node def overrides on all plants, since this is a
modpack now instead of an integrated mod. Fixed a misspelled folder name for
poisonivy.
Fixed a bug in the wall detection routine - it returned the last wall found,
not the first.
Made the top-side-check for air only apply when spawning on top of the
target rather than its sides/bottom.
Many other features and enhancements have been made. Too many to list here.
Please see API.txt for details.
2013-01-25 05:21:57 +01:00
|
|
|
return {newpos = { x=pos.x, y=pos.y, z=pos.z+1 }, facedir = 5}
|
|
|
|
end
|
|
|
|
return nil
|
|
|
|
end
|
2012-12-10 04:02:30 +01:00
|
|
|
|
2013-02-20 03:50:56 +01:00
|
|
|
-- spawn_tree() on generate is routed through here so that other mods can hook
|
|
|
|
-- into it.
|
|
|
|
|
|
|
|
function plantslib:generate_tree(pos, node_or_function_or_model)
|
2013-03-31 06:53:49 +02:00
|
|
|
local t=os.clock()
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.spawn_tree(pos, node_or_function_or_model)
|
2013-02-20 03:50:56 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
-- and this one's for the call used in the growing code
|
|
|
|
|
|
|
|
function plantslib:grow_tree(pos, node_or_function_or_model)
|
2013-03-31 06:53:49 +02:00
|
|
|
local t=os.clock()
|
2013-07-01 05:55:07 +02:00
|
|
|
minetest.spawn_tree(pos, node_or_function_or_model)
|
2013-02-20 03:50:56 +01:00
|
|
|
end
|
|
|
|
|
2013-08-19 08:08:08 +02:00
|
|
|
-- check if a node is owned before allowing manual placement of a node
|
|
|
|
-- (used by flowers_plus)
|
|
|
|
|
|
|
|
function plantslib:node_is_owned(pos, placer)
|
|
|
|
local ownername = false
|
|
|
|
if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod
|
|
|
|
if HasOwner(pos, placer) then -- returns true if the node is owned
|
|
|
|
if not IsPlayerNodeOwner(pos, placer:get_player_name()) then
|
|
|
|
if type(getLastOwner) == "function" then -- ...is an old version
|
|
|
|
ownername = getLastOwner(pos)
|
|
|
|
elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version
|
|
|
|
ownername = GetNodeOwnerName(pos)
|
|
|
|
else
|
|
|
|
ownername = S("someone")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
elseif type(isprotect)=="function" then -- glomie's protection mod
|
|
|
|
if not isprotect(5, pos, placer) then
|
|
|
|
ownername = S("someone")
|
|
|
|
end
|
|
|
|
elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod
|
|
|
|
if not protector.can_dig(5, pos, placer) then
|
|
|
|
ownername = S("someone")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if ownername ~= false then
|
|
|
|
minetest.chat_send_player( placer:get_player_name(), S("Sorry, %s owns that spot."):format(ownername) )
|
|
|
|
return true
|
|
|
|
else
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- Check for infinite stacks
|
|
|
|
|
|
|
|
if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
|
|
|
|
plantslib.expect_infinite_stacks = false
|
|
|
|
else
|
|
|
|
plantslib.expect_infinite_stacks = true
|
|
|
|
end
|
|
|
|
|
|
|
|
-- read a field from a node's definition
|
|
|
|
|
|
|
|
function plantslib:get_nodedef_field(nodename, fieldname)
|
|
|
|
if not minetest.registered_nodes[nodename] then
|
|
|
|
return nil
|
|
|
|
end
|
|
|
|
return minetest.registered_nodes[nodename][fieldname]
|
|
|
|
end
|
2013-03-09 22:47:58 +01:00
|
|
|
|
|
|
|
|
2014-03-20 01:57:17 +01:00
|
|
|
print(S("[Plantlife Library] Loaded"))
|