X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=mods%2Fmain%2Fsaplings.lua;h=436d68aa932df751dbe2fb76279b3520ad8dd8c7;hb=48aa89197636250b3e494e9124c7c5c6e2d63dea;hp=efe6e550cea1ec53f1eb32e25db7b0b6637cc420;hpb=94dd06a2b9de5841b08d914b974dafffa0417387;p=Crafter.git diff --git a/mods/main/saplings.lua b/mods/main/saplings.lua index efe6e55..436d68a 100644 --- a/mods/main/saplings.lua +++ b/mods/main/saplings.lua @@ -1,67 +1,105 @@ --saplings +-- +-- +--local sapling_min = 120 +--local sapling_max = 720 +--make sapling grow +local function sapling_grow(pos) + if minetest.get_node_light(pos, nil) < 10 then + --print("failed to grow at "..dump(pos)) + return + end + --print("growing at "..dump(pos)) + if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 then + local good_to_grow = true + --check if room to grow (leaves or air) + for i = 1,4 do + local node_name = minetest.get_node(vector.new(pos.x,pos.y+i,pos.z)).name + if node_name ~= "air" and node_name ~= "main:leaves" then + good_to_grow = false + end + end + if good_to_grow == true then + minetest.set_node(pos,{name="main:tree"}) + local schemmy = math.random(1,2) + if schemmy == 1 then + minetest.place_schematic(pos, tree_big,"0",nil,false,"place_center_x, place_center_z") + elseif schemmy == 2 then + minetest.place_schematic(pos, tree_small,"0",nil,false,"place_center_x, place_center_z") + end + --override leaves + local max = 3 + if schemmy == 2 then + max = 1 + end + for i = 1,max do + minetest.set_node(vector.new(pos.x,pos.y+i,pos.z),{name="main:tree"}) + end + end + end +end + minetest.register_node("main:sapling", { - description = "Sapling", - drawtype = "plantlike", - waving = 1, - walkable = false, - climbable = false, - paramtype = "light", - is_ground_content = false, - tiles = {"sapling.png"}, - groups = {leaves = 1, plant = 1, axe = 1, hand = 0,instant=1, sapling=1}, - sounds = main.grassSound(), - drop = "main:sapling", - node_placement_prediction = "", - selection_box = { + description = "Sapling", + drawtype = "plantlike", + inventory_image = "sapling.png", + waving = 1, + walkable = false, + climbable = false, + paramtype = "light", + is_ground_content = false, + tiles = {"sapling.png"}, + groups = {leaves = 1, plant = 1, axe = 1, hand = 0,instant=1, sapling=1, attached_node=1,flammable=1}, + sounds = main.dirtSound(), + drop = "main:sapling", + node_placement_prediction = "", + selection_box = { type = "fixed", fixed = {-4 / 16, -0.5, -4 / 16, 4 / 16, 7 / 16, 4 / 16} }, - on_place = function(itemstack, placer, pointed_thing) - if not pointed_thing.type == "node" then - return - end - local pos = pointed_thing.above - if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 and minetest.get_node(pointed_thing.above).name == "air" then - minetest.set_node(pointed_thing.above, {name="main:sapling"}) - minetest.sound_play("leaves",{pos=pointed_thing.above}) - itemstack:take_item(1) - --print(minetest.get_node(pointed_thing.above).param1) - return(itemstack) - end - end, + on_place = function(itemstack, placer, pointed_thing) + if not pointed_thing.type == "node" then + return + end + + local sneak = placer:get_player_control().sneak + local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name] + + if not sneak and noddef.on_rightclick then + minetest.item_place(itemstack, placer, pointed_thing) + return + end + + local buildable = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name].buildable_to + --replace buildable + if buildable and minetest.get_node_group(minetest.get_node(vector.new(pointed_thing.under.x,pointed_thing.under.y-1,pointed_thing.under.z)).name, "soil") > 0 then + return(minetest.item_place(itemstack, placer, pointed_thing)) + end + local buildable = minetest.registered_nodes[minetest.get_node(pointed_thing.above).name].buildable_to + if buildable and minetest.get_node_group(minetest.get_node(vector.new(pointed_thing.above.x,pointed_thing.above.y-1,pointed_thing.above.z)).name, "soil") > 0 then + return(minetest.item_place(itemstack, placer, pointed_thing)) + end + --place sapling + local pos = pointed_thing.above + if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 and minetest.get_node(pointed_thing.above).name == "air" then + minetest.set_node(pointed_thing.above, {name="main:sapling"}) + minetest.sound_play("dirt",{pos=pointed_thing.above}) + itemstack:take_item(1) + return(itemstack) + end + end, }) ---make sapling grow -local function sapling_grow(pos) - if minetest.get_node_group(minetest.get_node(vector.new(pos.x,pos.y-1,pos.z)).name, "soil") > 0 then - - local good_to_grow = true - --check if room to grow (leaves or air) - for i = 1,4 do - local node_name = minetest.get_node(vector.new(pos.x,pos.y+i,pos.z)).name - if node_name ~= "air" and node_name ~= "main:leaves" then - good_to_grow = false - end - end - if good_to_grow == true then - minetest.set_node(pos,{name="main:tree"}) - minetest.place_schematic(pos, treeSchematic,"0",nil,false,"place_center_x, place_center_z") - --override leaves - for i = 1,4 do - minetest.set_node(vector.new(pos.x,pos.y+i,pos.z),{name="main:tree"}) - end - end - end -end --growing abm for sapling minetest.register_abm({ - label = "Tree Grow", - nodenames = {"group:sapling"}, - neighbors = {"group:soil"}, - interval = 0.1, - chance = 1, - action = function(pos) - sapling_grow(pos) - end, + label = "Tree Grow", + nodenames = {"group:sapling"}, + neighbors = {"group:soil"}, + interval = 6, + chance = 250, + catch_up = true, + action = function(pos) + sapling_grow(pos) + end, })