Vines update
							
								
								
									
										4
									
								
								vines/LICENSE.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					License
 | 
				
			||||||
 | 
					=======
 | 
				
			||||||
 | 
					- Code	WTFPL
 | 
				
			||||||
 | 
					- Texture	CC
 | 
				
			||||||
							
								
								
									
										56
									
								
								vines/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					# Vines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Features
 | 
				
			||||||
 | 
					- Rope block for spawning rope that slowly drops into the deep.
 | 
				
			||||||
 | 
					- Vines are climbable and slowly grow downward.
 | 
				
			||||||
 | 
					- Shears that allow the collecting of vines.
 | 
				
			||||||
 | 
					- Spawns vines on jungletree leaves.
 | 
				
			||||||
 | 
					- Roots on the bottom of dirt and dirt with grass nodes.
 | 
				
			||||||
 | 
					- Spawns vines on trees located in swampy area.
 | 
				
			||||||
 | 
					- Jungle vines that spawn on the side of jungletrees
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## API
 | 
				
			||||||
 | 
					The API is very minimal. It allows the registering of vines and the spawning of
 | 
				
			||||||
 | 
					existing vines on nodes of your own.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you want vines to spawn on a certain node then you can choose which vine by
 | 
				
			||||||
 | 
					adding to the node groups the unique group of that vine. This is determined by
 | 
				
			||||||
 | 
					the name of the vine ( see vines.lua ) appended with '_vines'.
 | 
				
			||||||
 | 
					An example would be.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"willow_vines" or "jungle_vines"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are two types of vines. One that spawns at the bottom of nodes and uses the
 | 
				
			||||||
 | 
					plantlike drawtype, and vines that spawn on the side that use signlike
 | 
				
			||||||
 | 
					drawtype. The type is determined by the spawn_on_side property in the biome
 | 
				
			||||||
 | 
					table.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Example
 | 
				
			||||||
 | 
					*taken from mod*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```lua
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  vines.register_vine( name, definitions, biome )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  --e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  vines.register_vine( 'vine', {
 | 
				
			||||||
 | 
					    description = "Vines",
 | 
				
			||||||
 | 
					    average_length = 9
 | 
				
			||||||
 | 
					  }, biome )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### definitions
 | 
				
			||||||
 | 
					|key|           type|  description|
 | 
				
			||||||
 | 
					|---|           ---|   ---|
 | 
				
			||||||
 | 
					|description|   string|The vine's tooltip description|
 | 
				
			||||||
 | 
					|average_length|int|   The average length of vines|
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For biome definitions please see the [plants_lib API documentation](https://github.com/VanessaE/plantlife_modpack/blob/master/API.txt)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Notice
 | 
				
			||||||
 | 
					Vines use after_destruct on registered leave nodes to remove vines from which
 | 
				
			||||||
 | 
					the leaves are removed. This is done by using the override function.
 | 
				
			||||||
 | 
					Malfunctions may occur if other mods override the after_destruct of these nodes
 | 
				
			||||||
 | 
					also.
 | 
				
			||||||
							
								
								
									
										11
									
								
								vines/aliases.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					-- used to remove the old vine nodes. This gives room for the new nodes
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:root', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:root_rotten', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:vine', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:vine_rotten', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:side', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:side_rotten', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:jungle', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:jungle_rotten', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:willow', 'air' )
 | 
				
			||||||
 | 
					minetest.register_alias( 'vines:willow_rotten', 'air' )
 | 
				
			||||||
							
								
								
									
										14
									
								
								vines/crafts.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
					  output = 'vines:rope_block',
 | 
				
			||||||
 | 
					  recipe = vines.recipes['rope_block']
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craft({
 | 
				
			||||||
 | 
					  output = 'vines:shears',
 | 
				
			||||||
 | 
					  recipe = vines.recipes['shears']
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_craftitem("vines:vines", {
 | 
				
			||||||
 | 
					  description = "Vines",
 | 
				
			||||||
 | 
					  inventory_image = "vines_item.png",
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -1,2 +1,3 @@
 | 
				
			|||||||
default
 | 
					default
 | 
				
			||||||
plants_lib
 | 
					plants_lib
 | 
				
			||||||
 | 
					moretrees?
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										132
									
								
								vines/functions.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,132 @@
 | 
				
			|||||||
 | 
					vines.register_vine = function( name, defs, biome )
 | 
				
			||||||
 | 
					  --different properties for bottom and side vines.
 | 
				
			||||||
 | 
					  local selection_box
 | 
				
			||||||
 | 
					  local groups = { vines=1, snappy=3, flammable=2 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local vine_name_end = 'vines:'..name..'_end'
 | 
				
			||||||
 | 
					  local vine_name_middle = 'vines:'..name..'_middle'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local vine_image_end = "vines_"..name.."_end.png"
 | 
				
			||||||
 | 
					  local vine_image_middle = "vines_"..name.."_middle.png"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local drop_node = vine_name_end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  biome.spawn_plants = { vine_name_end }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local vine_group = 'group:'..name..'_vines'
 | 
				
			||||||
 | 
					  biome.spawn_surfaces[ #biome.spawn_surfaces + 1 ] = vine_group
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  local selection_box = { type = "wallmounted", }
 | 
				
			||||||
 | 
					  local drawtype = 'signlike'
 | 
				
			||||||
 | 
					  if ( not biome.spawn_on_side ) then
 | 
				
			||||||
 | 
					    selection_box = { type = "fixed", fixed = { -0.4, -1/2, -0.4, 0.4, 1/2, 0.4 }, }
 | 
				
			||||||
 | 
					    drawtype = 'plantlike'
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  minetest.register_node( vine_name_end, {
 | 
				
			||||||
 | 
					    description = defs.description,
 | 
				
			||||||
 | 
					    walkable = false,
 | 
				
			||||||
 | 
					    climbable = true,
 | 
				
			||||||
 | 
					    wield_image = vine_image_end,
 | 
				
			||||||
 | 
					    drop = "",
 | 
				
			||||||
 | 
					    sunlight_propagates = true,
 | 
				
			||||||
 | 
					    paramtype = "light",
 | 
				
			||||||
 | 
					    paramtype2 = "wallmounted",
 | 
				
			||||||
 | 
					    buildable_to = true,
 | 
				
			||||||
 | 
					    tile_images = { vine_image_end },
 | 
				
			||||||
 | 
					    drawtype = drawtype,
 | 
				
			||||||
 | 
					    inventory_image = vine_image_end,
 | 
				
			||||||
 | 
					    groups = groups,
 | 
				
			||||||
 | 
					    sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
					    selection_box = selection_box,
 | 
				
			||||||
 | 
					    on_construct = function( pos )
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer( pos )
 | 
				
			||||||
 | 
					      timer:start( math.random(5, 10) )
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					    on_timer = function( pos )
 | 
				
			||||||
 | 
					      local node = minetest.get_node( pos )
 | 
				
			||||||
 | 
					      local bottom = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					      local bottom_node = minetest.get_node( bottom )
 | 
				
			||||||
 | 
					      if bottom_node.name == "air" then
 | 
				
			||||||
 | 
					        if not ( math.random( defs.average_length ) == 1 ) then
 | 
				
			||||||
 | 
					          minetest.set_node( pos, { name = vine_name_middle, param2 = node.param2 } )
 | 
				
			||||||
 | 
					          minetest.set_node( bottom, { name = node.name, param2 = node.param2 } )
 | 
				
			||||||
 | 
					          local timer = minetest.get_node_timer( bottom_node )
 | 
				
			||||||
 | 
					          timer:start( math.random(5, 10) )
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					    after_dig_node = function(pos, node, oldmetadata, user)
 | 
				
			||||||
 | 
					      vines.dig_vine( pos, drop_node, user )
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  minetest.register_node( vine_name_middle, {
 | 
				
			||||||
 | 
					    description = "Matured "..defs.description,
 | 
				
			||||||
 | 
					    walkable = false,
 | 
				
			||||||
 | 
					    climbable = true,
 | 
				
			||||||
 | 
					    drop = "",
 | 
				
			||||||
 | 
					    sunlight_propagates = true,
 | 
				
			||||||
 | 
					    paramtype = "light",
 | 
				
			||||||
 | 
					    paramtype2 = "wallmounted",
 | 
				
			||||||
 | 
					    buildable_to = true,
 | 
				
			||||||
 | 
					    tile_images = { vine_image_middle },
 | 
				
			||||||
 | 
					    wield_image = vine_image_middle,
 | 
				
			||||||
 | 
					    drawtype = drawtype,
 | 
				
			||||||
 | 
					    inventory_image = vine_image_middle,
 | 
				
			||||||
 | 
					    groups = groups,
 | 
				
			||||||
 | 
					    sounds = default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
					    selection_box = selection_box,
 | 
				
			||||||
 | 
					    on_destruct = function( pos )
 | 
				
			||||||
 | 
					      local node = minetest.get_node( pos )
 | 
				
			||||||
 | 
					      local bottom = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					      local bottom_node = minetest.get_node( bottom )
 | 
				
			||||||
 | 
					      if minetest.get_item_group( bottom_node.name, "vines") then
 | 
				
			||||||
 | 
					        minetest.remove_node( bottom )
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end,
 | 
				
			||||||
 | 
					    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
 | 
				
			||||||
 | 
					        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_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 ))
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										408
									
								
								vines/init.lua
									
									
									
									
									
								
							
							
						
						@@ -1,402 +1,14 @@
 | 
				
			|||||||
--[[TODO
 | 
					vines = {
 | 
				
			||||||
  ropebox rope break results in bottom rope dissapearing and bottom drop rope node to appear at the new bottom
 | 
					  name = 'vines',
 | 
				
			||||||
  and rope does not drop anything!!!!
 | 
					  recipes = {}
 | 
				
			||||||
]]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
vines = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local mod_name = "vines"
 | 
					 | 
				
			||||||
local average_height = 12
 | 
					 | 
				
			||||||
local spawn_interval = 90
 | 
					 | 
				
			||||||
local vines_group = {attached_node=1,vines=1,snappy=3,flammable=2,hanging_node=1,vines_cleanup=1}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
vines.growth_interval = 300
 | 
					 | 
				
			||||||
vines.growth_chance = 2
 | 
					 | 
				
			||||||
vines.rot_interval = 300
 | 
					 | 
				
			||||||
vines.rot_chance = 8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
local jungle_leaves_list = {
 | 
					 | 
				
			||||||
	"default:jungleleaves",
 | 
					 | 
				
			||||||
	"moretrees:jungle_leaves_red",
 | 
					 | 
				
			||||||
	"moretrees:jungle_leaves_yellow",
 | 
					 | 
				
			||||||
	"moretrees:jungle_leaves_green"
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Nodes
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/functions.lua" )
 | 
				
			||||||
minetest.register_node("vines:rope_block", {
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/aliases.lua" )
 | 
				
			||||||
  description = "Rope",
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/recipes.lua" )
 | 
				
			||||||
  sunlight_propagates = true,
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/crafts.lua" )
 | 
				
			||||||
  paramtype = "light",
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/nodes.lua" )
 | 
				
			||||||
  tile_images = {
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/shear.lua" )
 | 
				
			||||||
    "default_wood.png^vines_rope.png",
 | 
					dofile( minetest.get_modpath( vines.name ) .. "/vines.lua" )
 | 
				
			||||||
    "default_wood.png^vines_rope.png",
 | 
					 | 
				
			||||||
    "default_wood.png",
 | 
					 | 
				
			||||||
    "default_wood.png",
 | 
					 | 
				
			||||||
    "default_wood.png^vines_rope.png",
 | 
					 | 
				
			||||||
    "default_wood.png^vines_rope.png",
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  drawtype = "cube",
 | 
					 | 
				
			||||||
  groups = {choppy=2,oddly_breakable_by_hand=1},
 | 
					 | 
				
			||||||
  after_place_node = function(pos)
 | 
					 | 
				
			||||||
    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
					 | 
				
			||||||
    local n = minetest.get_node(p)
 | 
					 | 
				
			||||||
    if n.name == "air" then
 | 
					 | 
				
			||||||
      minetest.add_node(p, {name="vines:rope_end"})
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end,
 | 
					 | 
				
			||||||
  after_dig_node = function(pos, node, digger)
 | 
					 | 
				
			||||||
    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
					 | 
				
			||||||
    local n = minetest.get_node(p)
 | 
					 | 
				
			||||||
    while n.name == 'vines:rope' do
 | 
					 | 
				
			||||||
      minetest.remove_node(p)
 | 
					 | 
				
			||||||
      p = {x=p.x, y=p.y-1, z=p.z}
 | 
					 | 
				
			||||||
      n = minetest.get_node(p)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
    if n.name == 'vines:rope_end' then
 | 
					 | 
				
			||||||
      minetest.remove_node(p)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:rope", {
 | 
					 | 
				
			||||||
  description = "Rope",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  tile_images = { "vines_rope.png" },
 | 
					 | 
				
			||||||
  drawtype = "plantlike",
 | 
					 | 
				
			||||||
  groups = {flammable=2, not_in_creative_inventory=1},
 | 
					 | 
				
			||||||
  sounds =  default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "fixed",
 | 
					 | 
				
			||||||
    fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  on_destruct = function()
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
  end,
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:rope_end", {
 | 
					 | 
				
			||||||
  description = "Rope",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  tile_images = { "vines_rope_end.png" },
 | 
					 | 
				
			||||||
  drawtype = "plantlike",
 | 
					 | 
				
			||||||
  groups = {flammable=2, not_in_creative_inventory=1},
 | 
					 | 
				
			||||||
  sounds =  default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  after_place_node = function(pos)
 | 
					 | 
				
			||||||
    yesh  = {x = pos.x, y= pos.y-1, z=pos.z}
 | 
					 | 
				
			||||||
    minetest.add_node(yesh, {name="vines:rope"})
 | 
					 | 
				
			||||||
  end,
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
	  type = "fixed",
 | 
					 | 
				
			||||||
	  fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:side", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  paramtype2 = "wallmounted",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_side.png" },
 | 
					 | 
				
			||||||
  drawtype = "signlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_side.png",
 | 
					 | 
				
			||||||
  groups = vines_group,
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "wallmounted",
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  after_dig_node = function(pos, oldnode, oldmetadata, user)
 | 
					 | 
				
			||||||
    local wielded if user:get_wielded_item() ~= nil then wielded = user:get_wielded_item() else return end
 | 
					 | 
				
			||||||
    if 'vines:shears' == wielded:get_name() then 
 | 
					 | 
				
			||||||
      local inv = user:get_inventory()
 | 
					 | 
				
			||||||
      if inv then
 | 
					 | 
				
			||||||
        inv:add_item("main", ItemStack(oldnode.name))
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:side_rotten", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = false,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  paramtype2 = "wallmounted",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_side_rotten.png" },
 | 
					 | 
				
			||||||
  drawtype = "signlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_side.png",
 | 
					 | 
				
			||||||
  groups = {snappy = 3,flammable=2, hanging_node=1,vines_cleanup=1},
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "wallmounted",
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:willow", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  paramtype2 = "wallmounted",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_willow.png" },
 | 
					 | 
				
			||||||
  drawtype = "signlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_willow.png",
 | 
					 | 
				
			||||||
  groups = vines_group,
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "wallmounted",
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  after_dig_node = function(pos, oldnode, oldmetadata, user)
 | 
					 | 
				
			||||||
    local wielded if user:get_wielded_item() ~= nil then wielded = user:get_wielded_item() else return end
 | 
					 | 
				
			||||||
    if 'vines:shears' == wielded:get_name() then 
 | 
					 | 
				
			||||||
      local inv = user:get_inventory()
 | 
					 | 
				
			||||||
      if inv then
 | 
					 | 
				
			||||||
        inv:add_item("main", ItemStack(oldnode.name))
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:willow_rotten", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = false,
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  paramtype2 = "wallmounted",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_willow_rotten.png" },
 | 
					 | 
				
			||||||
  drawtype = "signlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_willow.png",
 | 
					 | 
				
			||||||
  groups = {snappy = 3,flammable=2, hanging_node=1,vines_cleanup=1},
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "wallmounted",
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:root", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_root.png" },
 | 
					 | 
				
			||||||
  drawtype = "plantlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_root.png",
 | 
					 | 
				
			||||||
  groups = {vines=1,snappy = 3,flammable=2, hanging_node=1,vines_cleanup=1},
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "fixed",
 | 
					 | 
				
			||||||
    fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:vine", {
 | 
					 | 
				
			||||||
  description = "Vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_vine.png" },
 | 
					 | 
				
			||||||
  drawtype = "plantlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_vine.png",
 | 
					 | 
				
			||||||
  groups = vines_group,
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "fixed",
 | 
					 | 
				
			||||||
    fixed = {-0.3, -1/2, -0.3, 0.3, 1/2, 0.3},
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  after_dig_node = function(pos, oldnode, oldmetadata, user)
 | 
					 | 
				
			||||||
    local wielded if user:get_wielded_item() ~= nil then wielded = user:get_wielded_item() else return end
 | 
					 | 
				
			||||||
    if 'vines:shears' == wielded:get_name() then 
 | 
					 | 
				
			||||||
      local inv = user:get_inventory()
 | 
					 | 
				
			||||||
      if inv then
 | 
					 | 
				
			||||||
        inv:add_item("main", ItemStack(oldnode.name))
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_node("vines:vine_rotten", {
 | 
					 | 
				
			||||||
  description = "Rotten vine",
 | 
					 | 
				
			||||||
  walkable = false,
 | 
					 | 
				
			||||||
  climbable = true,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  sunlight_propagates = true,
 | 
					 | 
				
			||||||
  paramtype = "light",
 | 
					 | 
				
			||||||
  buildable_to = true,
 | 
					 | 
				
			||||||
  tile_images = { "vines_vine_rotten.png" },
 | 
					 | 
				
			||||||
  drawtype = "plantlike",
 | 
					 | 
				
			||||||
  inventory_image = "vines_vine_rotten.png",
 | 
					 | 
				
			||||||
  groups = {snappy = 3,flammable=2, hanging_node=1,vines_cleanup=1},
 | 
					 | 
				
			||||||
  sounds = default.node_sound_leaves_defaults(),
 | 
					 | 
				
			||||||
  selection_box = {
 | 
					 | 
				
			||||||
    type = "fixed",
 | 
					 | 
				
			||||||
    fixed = {-0.3, -1/2, -0.3, 0.3, 1/2, 0.3},
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- vine rotting
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_abm({
 | 
					 | 
				
			||||||
  nodenames = {"vines:vine", "vines:side", "vines:willow"},
 | 
					 | 
				
			||||||
  interval = vines.rot_interval,
 | 
					 | 
				
			||||||
  chance = vines.rot_chance,
 | 
					 | 
				
			||||||
  action = function(pos, node, active_object_count, active_object_count_wider)
 | 
					 | 
				
			||||||
    if minetest.find_node_near(pos, 5, "group:tree") == nil then
 | 
					 | 
				
			||||||
      local walldir = node.param2
 | 
					 | 
				
			||||||
      minetest.add_node(pos, {name=node.name.."_rotten", param2 = walldir})
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- vine growth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_abm({
 | 
					 | 
				
			||||||
  nodenames = {"vines:vine", "vines:side", "vines:willow"},
 | 
					 | 
				
			||||||
  interval = vines.growth_interval,
 | 
					 | 
				
			||||||
  chance = vines.growth_chance,
 | 
					 | 
				
			||||||
  action = function(pos, node, active_object_count, active_object_count_wider)
 | 
					 | 
				
			||||||
    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
					 | 
				
			||||||
    local n = minetest.get_node(p)
 | 
					 | 
				
			||||||
    if n.name == "air" then
 | 
					 | 
				
			||||||
      local walldir = node.param2
 | 
					 | 
				
			||||||
      minetest.add_node(p, {name=node.name, param2 = walldir})
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- cleanup if the initial tree is missing entirely (e.g. has been dug away)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_abm({
 | 
					 | 
				
			||||||
	nodenames = {"group:vines_cleanup"},
 | 
					 | 
				
			||||||
	interval = 10,
 | 
					 | 
				
			||||||
	chance = 5,
 | 
					 | 
				
			||||||
	action = function(pos, node, active_object_count, active_object_count_wider)
 | 
					 | 
				
			||||||
		if not minetest.find_node_near(pos, 1, jungle_leaves_list) then
 | 
					 | 
				
			||||||
			local p_top = {x=pos.x, y=pos.y+1, z=pos.z}
 | 
					 | 
				
			||||||
			if minetest.get_item_group(minetest.get_node(p_top).name, "vines_cleanup") == 0 then
 | 
					 | 
				
			||||||
				minetest.remove_node(pos)
 | 
					 | 
				
			||||||
			end
 | 
					 | 
				
			||||||
		end
 | 
					 | 
				
			||||||
	end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-- rope extension
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_abm({
 | 
					 | 
				
			||||||
  nodenames = {"vines:rope_end"},
 | 
					 | 
				
			||||||
  interval = 1,
 | 
					 | 
				
			||||||
  chance = 1,
 | 
					 | 
				
			||||||
  drop = "",
 | 
					 | 
				
			||||||
  action = function(pos, node, active_object_count, active_object_count_wider)
 | 
					 | 
				
			||||||
    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
					 | 
				
			||||||
    local n = minetest.get_node(p)
 | 
					 | 
				
			||||||
    --remove if top node is removed
 | 
					 | 
				
			||||||
    if  n.name == "air" then
 | 
					 | 
				
			||||||
      minetest.set_node(pos, {name="vines:rope"})
 | 
					 | 
				
			||||||
      minetest.add_node(p, {name="vines:rope_end"})
 | 
					 | 
				
			||||||
    end 
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
--Craft
 | 
					 | 
				
			||||||
minetest.register_craft({
 | 
					 | 
				
			||||||
  output = 'vines:rope_block',
 | 
					 | 
				
			||||||
  recipe = {
 | 
					 | 
				
			||||||
    {'', 'default:wood', ''},
 | 
					 | 
				
			||||||
    {'', 'vines:side', ''},
 | 
					 | 
				
			||||||
    {'', 'vines:side', ''},
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_craftitem("vines:vines", {
 | 
					 | 
				
			||||||
  description = "Vines",
 | 
					 | 
				
			||||||
  inventory_image = "vines_item.png",
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
--spawning
 | 
					 | 
				
			||||||
plantslib:spawn_on_surfaces({
 | 
					 | 
				
			||||||
  avoid_nodes = {"vines:vine"},
 | 
					 | 
				
			||||||
  avoid_radius = 5,
 | 
					 | 
				
			||||||
  spawn_delay = spawn_interval,
 | 
					 | 
				
			||||||
  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 = spawn_interval,
 | 
					 | 
				
			||||||
  spawn_plants = {"vines:side"},
 | 
					 | 
				
			||||||
  spawn_chance = 10,
 | 
					 | 
				
			||||||
  spawn_surfaces = jungle_leaves_list,
 | 
					 | 
				
			||||||
  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 = spawn_interval,
 | 
					 | 
				
			||||||
  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,
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--Shears jojoa1997's shears
 | 
					 | 
				
			||||||
minetest.register_tool("vines:shears", {
 | 
					 | 
				
			||||||
	description = "Shears",
 | 
					 | 
				
			||||||
	inventory_image = "shears.png",
 | 
					 | 
				
			||||||
	wield_image = "shears.png",
 | 
					 | 
				
			||||||
	stack_max = 1,
 | 
					 | 
				
			||||||
	max_drop_level=3,
 | 
					 | 
				
			||||||
	tool_capabilities = {
 | 
					 | 
				
			||||||
    full_punch_interval = 1.0,
 | 
					 | 
				
			||||||
    max_drop_level=0,
 | 
					 | 
				
			||||||
    groupcaps={
 | 
					 | 
				
			||||||
      snappy={times={[3]=0.2}, maxwear=0.05, maxlevel=3},
 | 
					 | 
				
			||||||
      wool={times={[3]=0.2}, maxwear=0.05, maxlevel=3}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
minetest.register_craft({
 | 
					 | 
				
			||||||
	output = 'vines:shears',
 | 
					 | 
				
			||||||
	recipe = {
 | 
					 | 
				
			||||||
		{'', 'default:steel_ingot', ''},
 | 
					 | 
				
			||||||
		{'default:stick', 'default:wood', 'default:steel_ingot'},
 | 
					 | 
				
			||||||
		{'', '', 'default:stick'},
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
print("[Vines] Loaded!")
 | 
					print("[Vines] Loaded!")
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										83
									
								
								vines/nodes.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,83 @@
 | 
				
			|||||||
 | 
					minetest.register_node("vines:rope_block", {
 | 
				
			||||||
 | 
					  description = "Rope",
 | 
				
			||||||
 | 
					  sunlight_propagates = true,
 | 
				
			||||||
 | 
					  paramtype = "light",
 | 
				
			||||||
 | 
					  tile_images = {
 | 
				
			||||||
 | 
					    "default_wood.png^vines_rope.png",
 | 
				
			||||||
 | 
					    "default_wood.png^vines_rope.png",
 | 
				
			||||||
 | 
					    "default_wood.png",
 | 
				
			||||||
 | 
					    "default_wood.png",
 | 
				
			||||||
 | 
					    "default_wood.png^vines_rope.png",
 | 
				
			||||||
 | 
					    "default_wood.png^vines_rope.png",
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  groups = { flammable=2, choppy=2, oddly_breakable_by_hand=1 },
 | 
				
			||||||
 | 
					  after_place_node = function(pos)
 | 
				
			||||||
 | 
					    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					    local n = minetest.get_node(p)
 | 
				
			||||||
 | 
					    if n.name == "air" then
 | 
				
			||||||
 | 
					      minetest.add_node(p, {name="vines:rope_end"})
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end,
 | 
				
			||||||
 | 
					  after_dig_node = function(pos, node, digger)
 | 
				
			||||||
 | 
					    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					    local n = minetest.get_node(p)
 | 
				
			||||||
 | 
					    while ( n.name == 'vines:rope' or n.name == 'vines:rope_end' ) do
 | 
				
			||||||
 | 
					      minetest.remove_node(p)
 | 
				
			||||||
 | 
					      p = {x=p.x, y=p.y-1, z=p.z}
 | 
				
			||||||
 | 
					      n = minetest.get_node(p)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("vines:rope", {
 | 
				
			||||||
 | 
					  description = "Rope",
 | 
				
			||||||
 | 
					  walkable = false,
 | 
				
			||||||
 | 
					  climbable = true,
 | 
				
			||||||
 | 
					  sunlight_propagates = true,
 | 
				
			||||||
 | 
					  paramtype = "light",
 | 
				
			||||||
 | 
					  drop = "",
 | 
				
			||||||
 | 
					  tile_images = { "vines_rope.png" },
 | 
				
			||||||
 | 
					  drawtype = "plantlike",
 | 
				
			||||||
 | 
					  groups = {flammable=2, not_in_creative_inventory=1},
 | 
				
			||||||
 | 
					  sounds =  default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
					  selection_box = {
 | 
				
			||||||
 | 
					    type = "fixed",
 | 
				
			||||||
 | 
					    fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					minetest.register_node("vines:rope_end", {
 | 
				
			||||||
 | 
					  description = "Rope",
 | 
				
			||||||
 | 
					  walkable = false,
 | 
				
			||||||
 | 
					  climbable = true,
 | 
				
			||||||
 | 
					  sunlight_propagates = true,
 | 
				
			||||||
 | 
					  paramtype = "light",
 | 
				
			||||||
 | 
					  drop = "",
 | 
				
			||||||
 | 
					  tile_images = { "vines_rope_end.png" },
 | 
				
			||||||
 | 
					  drawtype = "plantlike",
 | 
				
			||||||
 | 
					  groups = {flammable=2, not_in_creative_inventory=1},
 | 
				
			||||||
 | 
					  sounds =  default.node_sound_leaves_defaults(),
 | 
				
			||||||
 | 
					  after_place_node = function(pos)
 | 
				
			||||||
 | 
					    yesh  = {x = pos.x, y= pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					    minetest.add_node(yesh, {name="vines:rope"})
 | 
				
			||||||
 | 
					  end,
 | 
				
			||||||
 | 
					  selection_box = {
 | 
				
			||||||
 | 
						  type = "fixed",
 | 
				
			||||||
 | 
						  fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  on_construct = function( pos )
 | 
				
			||||||
 | 
					    local timer = minetest.get_node_timer( pos )
 | 
				
			||||||
 | 
					    timer:start( 1 )
 | 
				
			||||||
 | 
					  end,
 | 
				
			||||||
 | 
					  on_timer = function( pos, elapsed )
 | 
				
			||||||
 | 
					    local p = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
				
			||||||
 | 
					    local n = minetest.get_node(p)
 | 
				
			||||||
 | 
					    if  n.name == "air" then
 | 
				
			||||||
 | 
					      minetest.set_node(pos, {name="vines:rope"})
 | 
				
			||||||
 | 
					      minetest.add_node(p, {name="vines:rope_end"})
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      local timer = minetest.get_node_timer( pos )
 | 
				
			||||||
 | 
					      timer:start( 1 )
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
 __   __  ___   __    _  _______  _______ 
 | 
					 | 
				
			||||||
|  | |  ||   | |  |  | ||       ||       |
 | 
					 | 
				
			||||||
|  |_|  ||   | |   |_| ||    ___||  _____|
 | 
					 | 
				
			||||||
|       ||   | |       ||   |___ | |_____ 
 | 
					 | 
				
			||||||
|       ||   | |  _    ||    ___||_____  |
 | 
					 | 
				
			||||||
 |     | |   | | | |   ||   |___  _____| |
 | 
					 | 
				
			||||||
  |___|  |___| |_|  |__||_______||_______|
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
BY:             bas080
 | 
					 | 
				
			||||||
DESCRIPTION:    Vines and ropebox
 | 
					 | 
				
			||||||
VERSION:        2.2.1
 | 
					 | 
				
			||||||
LICENCE:        WTFPL
 | 
					 | 
				
			||||||
FORUM:          http://forum.minetest.net/viewtopic.php?id=2344
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Changelog
 | 
					 | 
				
			||||||
---------
 | 
					 | 
				
			||||||
2.2.1
 | 
					 | 
				
			||||||
* Also spawn on leaves that are near jungletree
 | 
					 | 
				
			||||||
* Uses default wood texture
 | 
					 | 
				
			||||||
* Drops actual vines
 | 
					 | 
				
			||||||
* Changed craft
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2.2
 | 
					 | 
				
			||||||
* Spawns on all leaves that are near water
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2.1
 | 
					 | 
				
			||||||
* Removed rope(end) from creative inventory
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2.0
 | 
					 | 
				
			||||||
* Root vines texture and node (no spawn)
 | 
					 | 
				
			||||||
* Side vines spawn on leaves
 | 
					 | 
				
			||||||
* Willow vines spawns on moretrees willow leaves
 | 
					 | 
				
			||||||
* Ropebox after_dig_node re-defined
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1.5
 | 
					 | 
				
			||||||
* Added side vines
 | 
					 | 
				
			||||||
* Uses plant_lib api
 | 
					 | 
				
			||||||
* Original vines do not spawn anymore but are still there.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1.0
 | 
					 | 
				
			||||||
* Vines spawn beneath leave nodes
 | 
					 | 
				
			||||||
* Has rotten and non rotten vines
 | 
					 | 
				
			||||||
* Ropebox with craft
 | 
					 | 
				
			||||||
							
								
								
									
										12
									
								
								vines/recipes.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					vines.recipes['rope_block'] = {
 | 
				
			||||||
 | 
					  {'', 'default:wood', ''},
 | 
				
			||||||
 | 
					  {'', 'group:vines', ''},
 | 
				
			||||||
 | 
					  {'', 'group:vines', ''}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vines.recipes['shears'] = {
 | 
				
			||||||
 | 
					  {'', 'default:steel_ingot', ''},
 | 
				
			||||||
 | 
					  {'default:stick', 'default:wood', 'default:steel_ingot'},
 | 
				
			||||||
 | 
					  {'', '', 'default:stick'}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										15
									
								
								vines/shear.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					minetest.register_tool("vines:shears", {
 | 
				
			||||||
 | 
					  description = "Shears",
 | 
				
			||||||
 | 
					  inventory_image = "vines_shears.png",
 | 
				
			||||||
 | 
					  wield_image = "shears.png",
 | 
				
			||||||
 | 
					  stack_max = 1,
 | 
				
			||||||
 | 
					  max_drop_level=3,
 | 
				
			||||||
 | 
					  tool_capabilities = {
 | 
				
			||||||
 | 
					    full_punch_interval = 1.0,
 | 
				
			||||||
 | 
					    max_drop_level=0,
 | 
				
			||||||
 | 
					    groupcaps={
 | 
				
			||||||
 | 
					      snappy={times={[3]=0.2}, maxwear=0.05, maxlevel=3},
 | 
				
			||||||
 | 
					      wool={times={[3]=0.2}, maxwear=0.05, maxlevel=3}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 233 B  | 
| 
		 Before Width: | Height: | Size: 196 B  | 
| 
		 Before Width: | Height: | Size: 225 B  | 
| 
		 Before Width: | Height: | Size: 223 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_jungle_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 497 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_jungle_middle.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 481 B  | 
| 
		 Before Width: | Height: | Size: 201 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_root_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 215 B  | 
| 
		 Before Width: | Height: | Size: 201 B After Width: | Height: | Size: 201 B  | 
| 
		 Before Width: | Height: | Size: 194 B After Width: | Height: | Size: 194 B  | 
| 
		 Before Width: | Height: | Size: 233 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_side_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 247 B  | 
| 
		 Before Width: | Height: | Size: 225 B After Width: | Height: | Size: 225 B  | 
| 
		 Before Width: | Height: | Size: 187 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_vine_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 364 B  | 
| 
		 Before Width: | Height: | Size: 187 B After Width: | Height: | Size: 187 B  | 
| 
		 Before Width: | Height: | Size: 196 B  | 
							
								
								
									
										
											BIN
										
									
								
								vines/textures/vines_willow_end.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 226 B  | 
| 
		 Before Width: | Height: | Size: 196 B After Width: | Height: | Size: 196 B  | 
| 
		 Before Width: | Height: | Size: 190 B  | 
							
								
								
									
										95
									
								
								vines/vines.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,95 @@
 | 
				
			|||||||
 | 
					vines.register_vine( 'root', {
 | 
				
			||||||
 | 
					  description = "Roots",
 | 
				
			||||||
 | 
					  average_length = 9,
 | 
				
			||||||
 | 
					},{
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  avoid_nodes = {"vines:root_middle"},
 | 
				
			||||||
 | 
					  avoid_radius = 5,
 | 
				
			||||||
 | 
					  spawn_delay = 500,
 | 
				
			||||||
 | 
					  spawn_chance = 10,
 | 
				
			||||||
 | 
					  spawn_surfaces = {
 | 
				
			||||||
 | 
					    "default:dirt_with_grass",
 | 
				
			||||||
 | 
					    "default:dirt"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  spawn_on_bottom = true,
 | 
				
			||||||
 | 
					  plantlife_limit = -0.6,
 | 
				
			||||||
 | 
					  humidity_min = 0.4,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vines.register_vine( 'vine', {
 | 
				
			||||||
 | 
					  description = "Vines",
 | 
				
			||||||
 | 
					  average_length = 5,
 | 
				
			||||||
 | 
					},{
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  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_min = 0.7,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vines.register_vine( 'side', {
 | 
				
			||||||
 | 
					  description = "Vines",
 | 
				
			||||||
 | 
					  average_length = 3,
 | 
				
			||||||
 | 
					},{
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  avoid_nodes = {"group:vines"},
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  avoid_radius = 3,
 | 
				
			||||||
 | 
					  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_min = 0.4,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vines.register_vine( 'jungle', {
 | 
				
			||||||
 | 
					  description = "Jungle Vines",
 | 
				
			||||||
 | 
					  average_length = 7,
 | 
				
			||||||
 | 
					},{
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  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.4,
 | 
				
			||||||
 | 
					  humidity_min = 0.2,
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					vines.register_vine( 'willow', {
 | 
				
			||||||
 | 
					  description = "Willow Vines",
 | 
				
			||||||
 | 
					  average_length = 9,
 | 
				
			||||||
 | 
					},{
 | 
				
			||||||
 | 
					  choose_random_wall = true,
 | 
				
			||||||
 | 
					  avoid_nodes = { "vines:willow_middle" },
 | 
				
			||||||
 | 
					  avoid_radius = 5,
 | 
				
			||||||
 | 
					  near_nodes = { 'default:water_source' },
 | 
				
			||||||
 | 
					  near_nodes_size = 20,
 | 
				
			||||||
 | 
					  plantlife_limit = -0.8,
 | 
				
			||||||
 | 
					  spawn_chance = 10,
 | 
				
			||||||
 | 
					  spawn_delay = 500,
 | 
				
			||||||
 | 
					  spawn_on_side = true,
 | 
				
			||||||
 | 
					  spawn_surfaces = {"moretrees:willow_leaves"},
 | 
				
			||||||
 | 
					  humidity_min = 0.5
 | 
				
			||||||
 | 
					})
 | 
				
			||||||