API Update + new vine

- Defines biome in the vines_register function. Thus spawning.lua can be
  removed.

- Vines destroy when a nearby( 3x3 ) leave is dug. They do not drop. To gather
  vines one still has to use the shears.

- Soft depends on moretrees. Allows the overriding of the leave nodes. This is
  required for removing th vines when the leaves destruct.

- Registered a new vine named "vines:jungle" Spawns on jungle tree trunks.
  Either on the moretrees jungles and the default jungletree nodes.

- Textures for the jungle vines.
This commit is contained in:
bas080
2015-02-13 01:48:47 +01:00
parent 796961b01a
commit 797286f4d4
6 changed files with 131 additions and 67 deletions

@ -1,2 +1,3 @@
default
plants_lib
moretrees?

@ -1,8 +1,9 @@
vines.register_vine = function( name, defs )
vines.register_vine = function( name, defs, biome )
--different properties for bottom and side vines.
local drop_node = 'vines:'..name
local drawtype = ''
local selection_box
if ( defs.is_side_vine ) then
if ( biome.spawn_on_side ) then
selection_box = {
type = "wallmounted",
}
@ -15,7 +16,9 @@ vines.register_vine = function( name, defs )
drawtype = 'plantlike'
end
minetest.register_node("vines:"..name, {
biome.spawn_plants = { "vines:"..name }
minetest.register_node( "vines:"..name, {
description = defs.description,
walkable = false,
climbable = true,
@ -49,7 +52,7 @@ vines.register_vine = function( name, defs )
end
end,
after_dig_node = function(pos, node, oldmetadata, user)
vines.dig_vine( pos, node, user )
vines.dig_vine( pos, drop_node, user )
end
})
@ -79,20 +82,48 @@ vines.register_vine = function( name, defs )
minetest.remove_node( bottom )
end
end,
after_dig_node = function(pos, node, oldmetadata, user)
vines.dig_vine( pos, node, user )
after_dig_node = function( pos, node, oldmetadata, user )
vines.dig_vine( pos, drop_node, user )
end
})
plantslib:spawn_on_surfaces( biome )
local override_nodes = function( nodes, defs )
function override( index, registered )
local node = nodes[ index ]
if index > #nodes then return registered end
if minetest.registered_nodes[node] then
print('overiding: '..node)
minetest.override_item( node, defs )
registered[#registered+1] = node
end
override( index+1, registered )
end
override( 1, {} )
end
override_nodes( biome.spawn_surfaces,{
after_destruct = function( pos )
local pos_min = { x = pos.x -1, y = pos.y - 1, z = pos.z - 1 }
local pos_max = { x = pos.x +1, y = pos.y + 1, z = pos.z + 1 }
local positions = minetest.find_nodes_in_area( pos_min, pos_max, "group:vines" )
for index, position in pairs(positions) do
minetest.remove_node( position )
end
end
})
end
vines.dig_vine = function( pos, node, user )
vines.dig_vine = function( pos, node_name, user )
--only dig give the vine if shears are used
if not user then return false end
local wielded = user:get_wielded_item()
if 'vines:shears' == wielded:get_name() then
local inv = user:get_inventory()
if inv then
inv:add_item("main", ItemStack(node.name))
inv:add_item("main", ItemStack( node_name ))
end
end
end

@ -1,47 +0,0 @@
plantslib:spawn_on_surfaces({
avoid_nodes = {"vines:vine"},
avoid_radius = 5,
spawn_delay = 500,
spawn_plants = {"vines:vine"},
spawn_chance = 10,
spawn_surfaces = {"default:dirt_with_grass","default:dirt"},
spawn_on_bottom = true,
plantlife_limit = -0.9,
})
plantslib:spawn_on_surfaces({
avoid_nodes = {"vines:root"},
avoid_radius = 5,
spawn_delay = 500,
spawn_plants = {"vines:vine"},
spawn_chance = 10,
spawn_surfaces = {"default:dirt_with_grass","default:dirt"},
spawn_on_bottom = true,
plantlife_limit = -0.9,
})
plantslib:spawn_on_surfaces({
avoid_nodes = {"vines:vine", "vines:side"},
avoid_radius = 3,
spawn_delay = 300,
spawn_plants = {"vines:side"},
spawn_chance = 10,
spawn_surfaces = {}, --TODO
spawn_on_side = true,
near_nodes = {"default:jungletree"},
near_nodes_size = 5,
plantlife_limit = -0.9,
})
plantslib:spawn_on_surfaces({
spawn_plants = {"vines:willow"},
spawn_delay = 200,
spawn_chance = 3,
spawn_surfaces = {"moretrees:willow_leaves"},
spawn_on_side = true,
near_nodes = {"default:water_source"},
near_nodes_size = 2,
near_nodes_vertical = 5,
near_nodes_count = 1,
plantlife_limit = -0.9,
})

BIN
textures/vines_jungle.png Normal file

Binary file not shown.

After

(image error) Size: 497 B

Binary file not shown.

After

(image error) Size: 481 B

103
vines.lua

@ -1,23 +1,102 @@
vines.register_vine( 'vine', {
description = "Vines",
is_side_vine = false,
average_length = 9
})
vines.register_vine( 'root', {
description = "Roots",
is_side_vine = false,
average_length = 5
average_length = 9,
},{
avoid_nodes = {"vines:root_rotten"},
avoid_radius = 5,
spawn_delay = 500,
spawn_chance = 10,
spawn_surfaces = {
"default:dirt_with_grass",
"default:dirt"
},
spawn_on_bottom = true,
plantlife_limit = -0.1,
temp_max = -0.6,
temp_min = 0.2,
humidity_max = -0.7,
humidity_min = 0.2,
})
vines.register_vine( 'vine', {
description = "Vines",
average_length = 5,
},{
avoid_nodes = {"group:vines"},
avoid_radius = 5,
spawn_delay = 500,
spawn_chance = 100,
spawn_surfaces = {
"default:leaves",
"default:jungleleave",
"moretrees:jungetree_leaves_red",
"moretrees:jungetree_leaves_yellow",
"moretrees:jungetree_leaves_green"
},
spawn_on_bottom = true,
plantlife_limit = -0.9,
humidity_max = -1,
humidity_min = 0.8,
temp_max = -0.5,
temp_min = 0.3,
})
vines.register_vine( 'side', {
description = "Vines",
is_side_vine = true,
average_length = 7
average_length = 7,
},{
avoid_nodes = {"group:vines"},
avoid_radius = 5,
spawn_delay = 500,
spawn_chance = 100,
spawn_surfaces = {
"default:leaves",
"default:jungleleave",
"moretrees:jungetree_leaves_red",
"moretrees:jungetree_leaves_yellow",
"moretrees:jungetree_leaves_green"
},
spawn_on_side = true,
plantlife_limit = -0.9,
humidity_max = 1,
humidity_min = 0.8,
temp_min = 0.1,
temp_max = 1,
})
vines.register_vine( 'jungle', {
description = "Jungle Vines",
average_length = 7,
},{
avoid_nodes = {"group:vines"},
avoid_radius = 5,
spawn_delay = 500,
spawn_chance = 100,
spawn_surfaces = {
"default:jungletree",
"moretrees:jungletree_trunk"
},
spawn_on_side = true,
plantlife_limit = -0.9,
humidity_max = 1,
humidity_min = 0.8,
temp_min = 0.1,
temp_max = 1,
})
vines.register_vine( 'willow', {
description = "Willow Vines",
is_side_vine = true,
average_length = 9
average_length = 9,
},{
avoid_nodes = {"vines:willow", "vines:willow_rotten"},
avoid_radius = 5,
spawn_delay = 500,
spawn_chance = 100,
spawn_surfaces = {"moretrees:willow_leaves"},
spawn_on_side = true,
plantlife_limit = -0.9,
humidity_max = 1,
humidity_min = 0.8,
temp_min = 0.1,
temp_max = 1,
})