diff --git a/vines/depends.txt b/vines/depends.txt new file mode 100644 index 0000000..d1473e1 --- /dev/null +++ b/vines/depends.txt @@ -0,0 +1,2 @@ +default +plants_lib diff --git a/vines/init.lua b/vines/init.lua new file mode 100644 index 0000000..b4638c2 --- /dev/null +++ b/vines/init.lua @@ -0,0 +1,361 @@ +--[[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!!!! +]] + +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} +-- 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", + "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", + 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", + tile_images = { "vines_side_rotten.png" }, + drawtype = "signlike", + inventory_image = "vines_side.png", + groups = {snappy = 3,flammable=2, hanging_node=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", + 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", + tile_images = { "vines_willow_rotten.png" }, + drawtype = "signlike", + inventory_image = "vines_willow.png", + groups = {snappy = 3,flammable=2, hanging_node=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", + tile_images = { "vines_root.png" }, + drawtype = "plantlike", + inventory_image = "vines_root.png", + groups = {vines=1,snappy = 3,flammable=2, hanging_node=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", + 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", + tile_images = { "vines_vine_rotten.png" }, + drawtype = "plantlike", + inventory_image = "vines_vine_rotten.png", + groups = {snappy = 3,flammable=2, hanging_node=1}, + sounds = default.node_sound_leaves_defaults(), + selection_box = { + type = "fixed", + fixed = {-0.3, -1/2, -0.3, 0.3, 1/2, 0.3}, + }, +}) + +--ABM +minetest.register_abm({ + nodenames = {"vines:vine", "vines:side", "vines:willow"}, + interval = 300, + chance = 8, + action = function(pos, node, active_object_count, active_object_count_wider) + if minetest.find_node_near(pos, 5, "group:tree") == nil then + walldir = node.param2 + minetest.add_node(pos, {name=node.name.."_rotten", param2 = walldir}) + end + end +}) + +minetest.register_abm({ + nodenames = {"vines:vine", "vines:side", "vines:willow"}, + interval = 300, + chance = 2, + 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}) + end + end +}) + +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 = {"group:leafdecay"}, + spawn_on_side = true, + near_nodes = {"default:water_source", "default:jungletree"}, + near_nodes_size = 10, + near_nodes_vertical = 5, + near_nodes_count = 1, + 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!") diff --git a/vines/readme.txt b/vines/readme.txt new file mode 100644 index 0000000..0228a77 --- /dev/null +++ b/vines/readme.txt @@ -0,0 +1,43 @@ + __ __ ___ __ _ _______ _______ +| | | || | | | | || || | +| |_| || | | |_| || ___|| _____| +| || | | || |___ | |_____ +| || | | _ || ___||_____ | + | | | | | | | || |___ _____| | + |___| |___| |_| |__||_______||_______| + +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 diff --git a/vines/textures/new/bottomvine.png b/vines/textures/new/bottomvine.png new file mode 100644 index 0000000..c92bb85 Binary files /dev/null and b/vines/textures/new/bottomvine.png differ diff --git a/vines/textures/new/sidevine.png b/vines/textures/new/sidevine.png new file mode 100644 index 0000000..4245711 Binary files /dev/null and b/vines/textures/new/sidevine.png differ diff --git a/vines/textures/new/vinesdead.png b/vines/textures/new/vinesdead.png new file mode 100644 index 0000000..d001ec9 Binary files /dev/null and b/vines/textures/new/vinesdead.png differ diff --git a/vines/textures/new/vineslive.png b/vines/textures/new/vineslive.png new file mode 100644 index 0000000..6ba42b5 Binary files /dev/null and b/vines/textures/new/vineslive.png differ diff --git a/vines/textures/old/vines_vine2.png b/vines/textures/old/vines_vine2.png new file mode 100644 index 0000000..b938f4b Binary files /dev/null and b/vines/textures/old/vines_vine2.png differ diff --git a/vines/textures/old/vines_vine_rotten2.png b/vines/textures/old/vines_vine_rotten2.png new file mode 100644 index 0000000..11b5474 Binary files /dev/null and b/vines/textures/old/vines_vine_rotten2.png differ diff --git a/vines/textures/shears.png b/vines/textures/shears.png new file mode 100644 index 0000000..f15024c Binary files /dev/null and b/vines/textures/shears.png differ diff --git a/vines/textures/vines_item.png b/vines/textures/vines_item.png new file mode 100644 index 0000000..f02bc65 Binary files /dev/null and b/vines/textures/vines_item.png differ diff --git a/vines/textures/vines_root.png b/vines/textures/vines_root.png new file mode 100644 index 0000000..c92bb85 Binary files /dev/null and b/vines/textures/vines_root.png differ diff --git a/vines/textures/vines_rope.png b/vines/textures/vines_rope.png new file mode 100644 index 0000000..525bc66 Binary files /dev/null and b/vines/textures/vines_rope.png differ diff --git a/vines/textures/vines_rope_end.png b/vines/textures/vines_rope_end.png new file mode 100644 index 0000000..a95048a Binary files /dev/null and b/vines/textures/vines_rope_end.png differ diff --git a/vines/textures/vines_side.png b/vines/textures/vines_side.png new file mode 100644 index 0000000..4245711 Binary files /dev/null and b/vines/textures/vines_side.png differ diff --git a/vines/textures/vines_side_rotten.png b/vines/textures/vines_side_rotten.png new file mode 100644 index 0000000..87e4360 Binary files /dev/null and b/vines/textures/vines_side_rotten.png differ diff --git a/vines/textures/vines_vine.png b/vines/textures/vines_vine.png new file mode 100644 index 0000000..6ba42b5 Binary files /dev/null and b/vines/textures/vines_vine.png differ diff --git a/vines/textures/vines_vine_rotten.png b/vines/textures/vines_vine_rotten.png new file mode 100644 index 0000000..d001ec9 Binary files /dev/null and b/vines/textures/vines_vine_rotten.png differ diff --git a/vines/textures/vines_willow.png b/vines/textures/vines_willow.png new file mode 100644 index 0000000..91f8fef Binary files /dev/null and b/vines/textures/vines_willow.png differ diff --git a/vines/textures/vines_willow_rotten.png b/vines/textures/vines_willow_rotten.png new file mode 100644 index 0000000..a8f4342 Binary files /dev/null and b/vines/textures/vines_willow_rotten.png differ