print("scaffolding: Loading 'functions.lua'") dofile(minetest.get_modpath("scaffolding").."/functions.lua") minetest.register_craftitem("scaffolding:scaffolding_wrench", { description = "Scaffolding Wrench", inventory_image = "scaffolding_wrench.png", }) minetest.register_node("scaffolding:scaffolding", { description = "Wooden Scaffolding", drawtype = "nodebox", tiles = {"scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding.png", "scaffolding_wooden_scaffolding.png", "scaffolding_wooden_scaffolding.png", "scaffolding_wooden_scaffolding.png"}, paramtype = "light", paramtype2 = "facedir", climbable = true, walkable = false, is_ground_content = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:reinforced_scaffolding" minetest.env:set_node(pos, node) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end, on_rightclick = function(pos, node, player, itemstack, pointed_thing) -- if user hits scaffolding with platform then -- if itemstack:get_name() == "scaffolding:platform" then --arrayZ ( 1, 0, -1, -1, 0, 0, 1, 1 ); -- arrayX( 0, -1, 0, 0, 1, 1, 0, 0 ); local name = minetest.get_node(pos).name posZ = {'1', '0', '-1', '-1', '0', '0', '1', '1' }; posX = {'0', '-1', '0', '0', '1', '1', '0', '0' }; for nameCount = 1, 8 do pos.z = pos.z + posZ[nameCount]; pos.x = pos.x + posX[nameCount]; local current_node = minetest.get_node(pos); if current_node.name == "air" then minetest.set_node(pos, {name = "scaffolding:platform"} ) itemstack:take_item(1); --//and remove one if its the correct one break; end end end -- if user hits scaffolding with scaffolding then -- if itemstack:get_name() == "scaffolding:scaffolding" then -- many thanks to addi for improveing (rewriteing) my crappy code -- local name = minetest.get_node(pos).name -- get loacation of node height = 0; depth = 0; -- !!Note!! depth is not needed at the moment --[[ debug stuff ]] minetest.chat_send_all(string.format("node: %s",name)) minetest.chat_send_all(string.format("node: %s %s %s ",pos.x, pos.y, pos.z )) -- set pos at bottom of scafolding tower. repeat pos.y = pos.y - 1; --every run get one node up depth = depth - 1 local current_node = minetest.get_node(pos); --get the node of the new position minetest.chat_send_all(string.format("found %q at location: %s", current_node.name, minetest.pos_to_string(pos) )) until current_node.name ~= "scaffolding:scaffolding" -- will repeat untill it dose not find a scaffolding node minetest.chat_send_all(string.format("exit loop")) -- check height of scaffolding tower -- repeat pos.y = pos.y + 1; --every run get one node up height = height + 1 local current_node = minetest.get_node(pos); --get the node of the new position minetest.chat_send_all(string.format("found %q at location: %s", current_node.name, minetest.pos_to_string(pos) )) if current_node.name == "air" then minetest.set_node(pos, {name = "scaffolding:scaffolding"} ) itemstack:take_item(1); --//and remove one if its the correct one player:set_wielded_item(itemstack);--//update inventory of the player end until current_node.name ~= "scaffolding:scaffolding" or height >= 32 --we repeat until we find something else then "scaffolding:scaffolding" --maybe there should be also another limit, because its currently possible to build infinite towers minetest.chat_send_all(string.format("exit loop")) end end, node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, after_dig_node = function(pos, node, metadata, digger) default.dig_up(pos, node, digger) end, }) minetest.register_node("scaffolding:reinforced_scaffolding", { description = "Wooden Scaffolding", drawtype = "nodebox", tiles = {"scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png"}, drop = "scaffolding:scaffolding", paramtype = "light", light_source = 14, paramtype2 = "facedir", climbable = true, walkable = false, is_ground_content = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:scaffolding" minetest.env:set_node(pos, node) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end, --[[ on_rightclick = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:scaffolding" minetest.env:set_node(pos, node) end end, on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "air" minetest.env:set_node(pos, node) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end,]] node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, }) minetest.register_node("scaffolding:platform", { description = "Wooden Platform", drawtype = "nodebox", tiles = {"scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding_top.png", "scaffolding_wooden_scaffolding.png^scaffolding_platform.png"}, paramtype = "light", paramtype2 = "facedir", climbable = false, walkable = true, is_ground_content = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:reinforced_platform" minetest.env:set_node(pos, node) end end, node_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, after_dig_node = function(pos, node, metadata, digger) default.dig_horx(pos, node, digger) default.dig_horx2(pos, node, digger) default.dig_horz(pos, node, digger) default.dig_horz2(pos, node, digger) end, }) minetest.register_node("scaffolding:reinforced_platform", { description = "Wooden Platform", drawtype = "nodebox", light_source = 14, tiles = {"scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_reinforced.png", "scaffolding_wooden_scaffolding.png^scaffolding_platform.png"}, drop = "scaffolding:platform", paramtype = "light", paramtype2 = "facedir", climbable = false, walkable = true, is_ground_content = true, groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:platform" minetest.env:set_node(pos, node) end end, node_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, }) minetest.register_node("scaffolding:iron_scaffolding", { description = "Iron Scaffolding", drawtype = "nodebox", tiles = {"scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding.png", "scaffolding_iron_scaffolding.png", "scaffolding_iron_scaffolding.png", "scaffolding_iron_scaffolding.png"}, paramtype = "light", paramtype2 = "facedir", climbable = true, walkable = false, is_ground_content = true, groups = {snappy=2,cracky=3}, sounds = default.node_sound_wood_defaults(), node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:reinforced_iron_scaffolding" minetest.env:set_node(pos, node) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end, on_rightclick = function(pos, node, player, itemstack, pointed_thing) -- if user hits scaffolding with platform then -- if itemstack:get_name() == "scaffolding:iron_platform" then --arrayZ ( 1, 0, -1, -1, 0, 0, 1, 1 ); -- arrayX( 0, -1, 0, 0, 1, 1, 0, 0 ); local name = minetest.get_node(pos).name posZ = {'1', '0', '-1', '-1', '0', '0', '1', '1' }; posX = {'0', '-1', '0', '0', '1', '1', '0', '0' }; for nameCount = 1, 8 do pos.z = pos.z + posZ[nameCount]; pos.x = pos.x + posX[nameCount]; local current_node = minetest.get_node(pos); if current_node.name == "air" then minetest.set_node(pos, {name = "scaffolding:iron_platform"} ) itemstack:take_item(1); --//and remove one if its the correct one break; end end end if itemstack:get_name() == "scaffolding:iron_scaffolding" then -- many thanks to addi for improveing (rewriteing) my crappy code -- local name = minetest.get_node(pos).name -- get loacation of node height = 0; depth = 0; -- !!Note!! depth is not deeded at the moment --[[ debug stuff ]] minetest.chat_send_all(string.format("node: %s",name)) minetest.chat_send_all(string.format("node: %s %s %s ",pos.x, pos.y, pos.z )) -- set pos at bottom of scafolding tower. repeat pos.y = pos.y - 1; --every run get one node up depth = depth - 1 -- !!Note!! depth is not needed at the moment local current_node = minetest.get_node(pos); --get the node of the new position minetest.chat_send_all(string.format("found %q at location: %s", current_node.name, minetest.pos_to_string(pos) )) until current_node.name ~= "scaffolding:iron_scaffolding" -- will repeat untill it dose not find a scaffolding node minetest.chat_send_all(string.format("exit loop")) -- check height of scaffolding tower -- repeat pos.y = pos.y + 1; --every run get one node up height = height + 1 local current_node = minetest.get_node(pos); --get the node of the new position minetest.chat_send_all(string.format("found %q at location: %s", current_node.name, minetest.pos_to_string(pos) )) if current_node.name == "air" then minetest.set_node(pos, {name = "scaffolding:iron_scaffolding"} ) itemstack:take_item(1); --//and remove one if its the correct one player:set_wielded_item(itemstack);--//update inventory of the player end until current_node.name ~= "scaffolding:iron_scaffolding" or height >= 32 --we repeat until we find something else then "scaffolding:scaffolding" --maybe there should be also another limit, because its currently possible to build infinite towers minetest.chat_send_all(string.format("exit loop")) end end, after_dig_node = function(pos, node, metadata, digger) default.dig_up(pos, node, digger) end, }) minetest.register_node("scaffolding:reinforced_iron_scaffolding", { description = "Iron Scaffolding", drawtype = "nodebox", tiles = {"scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_reinforced.png"}, drop = "scaffolding:iron_scaffolding", paramtype = "light", paramtype2 = "facedir", climbable = true, walkable = false, light_source = 14, is_ground_content = true, groups = {snappy=2,cracky=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:iron_scaffolding" minetest.env:set_node(pos, node) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end, --[[on_rightclick = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:iron_scaffolding" minetest.env:set_node(pos, node) end end, on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "air" minetest.env:set_node(pos, node) --puncher:get_inventory():remove_item("main", ItemStack("beer_test:tankard")) puncher:get_inventory():add_item("main", ItemStack("scaffolding:scaffolding")) end end,]] node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, }, }) minetest.register_node("scaffolding:iron_platform", { description = "Iron Platform", drawtype = "nodebox", tiles = {"scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding_top.png", "scaffolding_iron_scaffolding.png^scaffolding_platform.png"}, paramtype = "light", paramtype2 = "facedir", climbable = false, walkable = true, is_ground_content = true, groups = {snappy=2,cracky=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:reinforced_iron_platform" minetest.env:set_node(pos, node) end end, node_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, after_dig_node = function(pos, node, metadata, digger) default.dig_horx(pos, node, digger) default.dig_horx2(pos, node, digger) default.dig_horz(pos, node, digger) default.dig_horz2(pos, node, digger) end, }) minetest.register_node("scaffolding:reinforced_iron_platform", { description = "Iron Platform", drawtype = "nodebox", tiles = {"scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_reinforced.png", "scaffolding_iron_scaffolding.png^scaffolding_platform.png"}, drop = "scaffolding:iron_platform", paramtype = "light", paramtype2 = "facedir", climbable = false, walkable = true, light_source = 14, is_ground_content = true, groups = {snappy=2,cracky=3}, sounds = default.node_sound_wood_defaults(), on_punch = function(pos, node, puncher) local tool = puncher:get_wielded_item():get_name() if tool and tool == "scaffolding:scaffolding_wrench" then node.name = "scaffolding:iron_platform" minetest.env:set_node(pos, node) end end, node_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, selection_box = { type = "fixed", fixed = { {-0.5, -0.3, -0.5, 0.5, 0.1, 0.5}, }, }, }) ---------------------- -- wood scaffolding -- ---------------------- minetest.register_craft({ output = 'scaffolding:scaffolding 12', recipe = { {'default:wood', 'default:wood', 'default:wood'}, {'default:stick', '', 'default:stick'}, {'default:wood', 'default:wood', 'default:wood'}, } }) minetest.register_craft({ output = 'scaffolding:scaffolding 4', recipe = { {'default:wood'}, {'default:stick'}, {'default:wood'}, } }) -- back to scaffolding -- minetest.register_craft({ output = 'scaffolding:scaffolding', recipe = { {'scaffolding:platform'}, {'scaffolding:platform'}, } }) -- wood platforms -- minetest.register_craft({ output = 'scaffolding:platform 2', recipe = { {'scaffolding:scaffolding'}, } }) minetest.register_craft({ output = 'scaffolding:platform 6', recipe = { {'scaffolding:scaffolding', 'scaffolding:scaffolding', 'scaffolding:scaffolding'}, } }) -- get wood back -- minetest.register_craft({ output = 'default:wood', recipe = { {'scaffolding:scaffolding', 'scaffolding:scaffolding'}, } }) ---------------------- -- iron scaffolding -- ---------------------- minetest.register_craft({ output = 'scaffolding:iron_scaffolding 12', recipe = { {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, {'default:stick', '', 'default:stick'}, {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, } }) minetest.register_craft({ output = 'scaffolding:iron_scaffolding 4', recipe = { {'default:steel_ingot'}, {'default:stick'}, {'default:steel_ingot'}, } }) -- back to scaffolding -- minetest.register_craft({ output = 'scaffolding:iron_scaffolding', recipe = { {'scaffolding:iron_platform'}, {'scaffolding:iron_platform'}, } }) -- iron platforms -- minetest.register_craft({ output = 'scaffolding:iron_platform 2', recipe = { {'scaffolding:iron_scaffolding'}, } }) minetest.register_craft({ output = 'scaffolding:iron_platform 6', recipe = { {'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding'}, } }) -- get iron back -- minetest.register_craft({ output = 'default:steel_ingot', recipe = { {'scaffolding:iron_scaffolding', 'scaffolding:iron_scaffolding'}, } }) ------------ -- wrench -- ------------ minetest.register_craft({ output = 'scaffolding:scaffolding_wrench', recipe = { {'', 'default:steel_ingot', ''}, {'', 'default:steel_ingot', 'default:steel_ingot'}, {'default:steel_ingot', '', ''}, } })