ropes/init.lua

304 lines
8.0 KiB
Lua
Raw Normal View History

--[[TODO
ropebox rope break results in bottom rope dissapearing and bottom drop rope node to appear at the new bottom
and rope does not drop anything!
All vine types should rot which makes them not climbable and drop no vine nodes
]]
local mod_name = "vines"
local average_height = 12
2013-03-19 20:01:40 +01:00
local spawn_interval = 90
2012-07-12 00:23:19 +02:00
-- Nodes
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",
2013-01-26 18:30:59 +01:00
"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"})
2013-01-23 05:52:20 +01:00
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
2012-07-12 00:23:19 +02:00
})
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},
},
2012-07-12 00:23:19 +02:00
})
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},
},
2012-07-12 00:23:19 +02:00
})
minetest.register_node("vines:side", {
description = "Vine",
walkable = false,
climbable = true,
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "wallmounted",
tile_images = { "vines_side.png" },
drawtype = "signlike",
inventory_image = "vines_side.png",
groups = { snappy = 3,flammable=2, hanging_node=1, wood=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "wallmounted",
},
on_construct = function(pos, placer)
local p = {x=pos.x, y=pos.y, z=pos.z}
local n = minetest.get_node(p)
local walldir = n.param2
local down=-1
while math.random(0,average_height) > 1.0 do
local pt = {x = p.x, y= p.y+down, z=p.z}
local nt = minetest.get_node(pt)
if nt.name == "air" then
minetest.add_node(pt, {name=n.name, param2 = walldir})
down=down-1
else
return
end
end
end,
2012-07-12 00:23:19 +02:00
})
minetest.register_node("vines:willow", {
description = "Vine",
walkable = false,
climbable = true,
sunlight_propagates = true,
paramtype = "light",
paramtype2 = "wallmounted",
tile_images = { "vines_willow.png" },
drawtype = "signlike",
2013-03-19 20:01:40 +01:00
inventory_image = "vines_willow.png",
groups = { snappy = 3,flammable=2, hanging_node=1, wood=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "wallmounted",
},
on_construct = function(pos, placer)
local p = {x=pos.x, y=pos.y, z=pos.z}
local n = minetest.get_node(p)
local walldir = n.param2
local down=-1
while math.random(0,average_height) > 1.0 do
local pt = {x = p.x, y= p.y+down, z=p.z}
local nt = minetest.get_node(pt)
if nt.name == "air" then
minetest.add_node(pt, {name=n.name, param2 = walldir})
down=down-1
else
return
end
end
end,
})
minetest.register_node("vines:root", {
description = "Vine",
walkable = false,
climbable = true,
sunlight_propagates = true,
paramtype = "light",
tile_images = { "vines_root.png" },
drawtype = "plantlike",
inventory_image = "vines_root.png",
groups = { snappy = 3,flammable=2, hanging_node=1, wood=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
},
2012-07-12 00:23:19 +02:00
})
minetest.register_node("vines:vine", {
description = "Vine",
walkable = false,
climbable = true,
sunlight_propagates = true,
paramtype = "light",
tile_images = { "vines_vine.png" },
drawtype = "plantlike",
inventory_image = "vines_vine.png",
groups = { snappy = 3,flammable=2, hanging_node=1, wood=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-0.3, -1/2, -0.3, 0.3, 1/2, 0.3},
},
2013-03-19 20:01:40 +01:00
on_construct = function(pos, placer)
local p = {x=pos.x, y=pos.y, z=pos.z}
local n = minetest.get_node(p)
2013-03-19 20:01:40 +01:00
local walldir = n.param2
local down=-1
while math.random(0,average_height) > 1.0 do
local pt = {x = p.x, y= p.y+down, z=p.z}
local nt = minetest.get_node(pt)
2013-03-19 20:01:40 +01:00
if nt.name == "air" then
minetest.add_node(pt, {name=n.name, param2 = walldir})
2013-03-19 20:01:40 +01:00
down=down-1
else
return
end
end
end,
2012-07-12 00:23:19 +02:00
})
minetest.register_node("vines:vine_rotten", {
description = "Rotten vine",
walkable = false,
climbable = true,
sunlight_propagates = true,
paramtype = "light",
tile_images = { "vines_vine_rotten.png" },
drawtype = "plantlike",
inventory_image = "vines_vine_rotten.png",
groups = { snappy = 3,flammable=2, hanging_node=1, wood=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-0.3, -1/2, -0.3, 0.3, 1/2, 0.3},
},
2012-07-12 00:23:19 +02:00
})
--ABM
2012-07-12 00:23:19 +02:00
minetest.register_abm({
nodenames = {"vines:vine", "vines:root"},
interval = 700,
chance = 8,
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
walldir = node.param2
minetest.add_node(p, {name=node.name, param2 = walldir})
2012-07-12 00:23:19 +02:00
end
end
2012-07-12 00:23:19 +02:00
})
minetest.register_abm({
nodenames = {"vines:rope_end"},
interval = 1,
chance = 1,
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
2012-07-12 00:23:19 +02:00
})
2013-03-19 20:01:40 +01:00
--Craft
2012-07-12 00:23:19 +02:00
minetest.register_craft({
output = 'vines:rope_block',
recipe = {
{'', 'default:wood', ''},
{'', 'vines:side', ''},
{'', 'vines:side', ''},
}
2012-07-12 00:23:19 +02:00
})
minetest.register_craftitem("vines:vines", {
2013-03-19 20:01:40 +01:00
description = "Vines",
inventory_image = "vines_item.png",
2012-07-12 00:23:19 +02:00
})
2013-03-19 20:01:40 +01:00
--spawning
plantslib:spawn_on_surfaces({
2013-03-19 20:01:40 +01:00
avoid_nodes = {"vines:vine"},
avoid_radius = 5,
spawn_delay = spawn_interval,
spawn_plants = {"vines:vine"},
spawn_chance = 10,
2013-03-19 20:01:40 +01:00
spawn_surfaces = {"default:dirt_with_grass","default:dirt"},
spawn_on_bottom = true,
plantlife_limit = -0.9,
})
plantslib:spawn_on_surfaces({
2013-01-26 07:13:02 +01:00
avoid_nodes = {"vines:vine", "vines:side"},
avoid_radius = 3,
spawn_delay = spawn_interval,
spawn_plants = {"vines:side"},
spawn_chance = 10,
2013-04-22 19:43:02 +02:00
spawn_surfaces = {"group:leafdecay"},
2013-03-19 20:01:40 +01:00
spawn_on_side = true,
2013-04-29 17:51:49 +02:00
near_nodes = {"default:water_source", "default:jungletree"},
2013-03-19 20:01:40 +01:00
near_nodes_size = 10,
near_nodes_vertical = 5,
near_nodes_count = 1,
plantlife_limit = -0.9,
})
plantslib:spawn_on_surfaces({
spawn_plants = {"vines:willow"},
2013-01-26 05:11:19 +01:00
spawn_delay = spawn_interval,
spawn_chance = 3,
spawn_surfaces = {"moretrees:willow_leaves"},
spawn_on_side = true,
near_nodes = {"default:water_source"},
2013-01-26 18:30:59 +01:00
near_nodes_size = 2,
near_nodes_vertical = 5,
near_nodes_count = 1,
2013-01-26 18:30:59 +01:00
plantlife_limit = -0.9,
})
print("[Vines] Loaded!")