local rotate_and_place = minetest.rotate_and_place local get_node_vars = stairs.util.get_node_vars local get_stair_images = stairs.util.get_stair_images local legacy = {} local nodeboxes = { stair = { type = "fixed", fixed = { { -0.5, -0.5, -0.5, 0.5, 0.0, 0.5 }, { -0.5, 0.0, 0.0, 0.5, 0.5, 0.5 }, }, }, slab = { type = "fixed", fixed = { -0.5, -0.5, -0.5, 0.5, 0, 0.5 }, }, stair_inner = { type = "fixed", fixed = { { -0.5, -0.5, -0.5, 0.5, 0.0, 0.5 }, { -0.5, 0.0, 0.0, 0.5, 0.5, 0.5 }, { -0.5, 0.0, -0.5, 0.0, 0.5, 0.0 }, }, }, stair_outer = { type = "fixed", fixed = { { -0.5, -0.5, -0.5, 0.5, 0.0, 0.5 }, { -0.5, 0.0, 0.0, 0.0, 0.5, 0.5 }, }, }, } local function register_generic(name, recipeitem, groups, images, description, sounds, worldaligntex, nodebox) if not nodebox then error() end local light_source, texture_alpha, sunlight = get_node_vars(recipeitem) local stair_images = get_stair_images(images, worldaligntex) minetest.register_node(name, { description = description, drawtype = "nodebox", tiles = stair_images, use_texture_alpha = texture_alpha, sunlight_propagates = sunlight, light_source = light_source, paramtype = "light", paramtype2 = "facedir", is_ground_content = false, groups = groups, sounds = sounds, node_box = nodebox, on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" then return itemstack end return rotate_and_place(itemstack, placer, pointed_thing) end, }) end function legacy.register_stair(subname, recipeitem, groups, images, description, sounds, worldaligntex) local new_groups = table.copy(groups) new_groups.stair = 1 register_generic( ":stairs:stair_" .. subname, recipeitem, new_groups, images, description, sounds, worldaligntex, nodeboxes.stair ) if recipeitem and minetest.registered_nodes[recipeitem] then -- Recipe matches appearence in inventory minetest.register_craft({ output = "stairs:stair_" .. subname .. " 8", recipe = { { "", "", recipeitem }, { "", recipeitem, recipeitem }, { recipeitem, recipeitem, recipeitem }, }, }) -- Use stairs to craft full blocks again (1:1) minetest.register_craft({ output = recipeitem .. " 3", recipe = { { "stairs:stair_" .. subname, "stairs:stair_" .. subname }, { "stairs:stair_" .. subname, "stairs:stair_" .. subname }, }, }) -- Fuel local baseburntime = minetest.get_craft_result({ method = "fuel", width = 1, items = { recipeitem }, }).time if baseburntime > 0 then minetest.register_craft({ type = "fuel", recipe = "stairs:stair_" .. subname, burntime = math.floor(baseburntime * 0.75), }) end end end -- Register slab -- Node will be called stairs:slab_ function legacy.register_slab(subname, recipeitem, groups, images, description, sounds, worldaligntex) local new_groups = table.copy(groups) new_groups.slab = 1 register_generic( ":stairs:slab_" .. subname, recipeitem, new_groups, images, description, sounds, worldaligntex, nodeboxes.slab ) if recipeitem and minetest.registered_nodes[recipeitem] then minetest.register_craft({ output = "stairs:slab_" .. subname .. " 6", recipe = { { recipeitem, recipeitem, recipeitem }, }, }) -- Use 2 slabs to craft a full block again (1:1) minetest.register_craft({ output = recipeitem, recipe = { { "stairs:slab_" .. subname }, { "stairs:slab_" .. subname }, }, }) -- Fuel local baseburntime = minetest.get_craft_result({ method = "fuel", width = 1, items = { recipeitem }, }).time if baseburntime > 0 then minetest.register_craft({ type = "fuel", recipe = "stairs:slab_" .. subname, burntime = math.floor(baseburntime * 0.5), }) end end end -- Register inner stair -- Node will be called stairs:stair_inner_ function legacy.register_stair_inner( subname, recipeitem, groups, images, description, sounds, worldaligntex, full_description ) local new_groups = table.copy(groups) new_groups.stair = 1 if full_description then description = full_description else description = stairs.S("Inner ") .. description end register_generic( ":stairs:stair_inner_" .. subname, recipeitem, new_groups, images, description, sounds, worldaligntex, nodeboxes.stair_inner ) if recipeitem and minetest.registered_nodes[recipeitem] then minetest.register_craft({ output = "stairs:stair_inner_" .. subname .. " 7", recipe = { { "", recipeitem, "" }, { recipeitem, "", recipeitem }, { recipeitem, recipeitem, recipeitem }, }, }) -- Fuel local baseburntime = minetest.get_craft_result({ method = "fuel", width = 1, items = { recipeitem }, }).time if baseburntime > 0 then minetest.register_craft({ type = "fuel", recipe = "stairs:stair_inner_" .. subname, burntime = math.floor(baseburntime * 0.875), }) end end end -- Register outer stair -- Node will be called stairs:stair_outer_ function legacy.register_stair_outer( subname, recipeitem, groups, images, description, sounds, worldaligntex, full_description ) local new_groups = table.copy(groups) new_groups.stair = 1 if full_description then description = full_description else description = stairs.S("Outer ") .. description end register_generic( ":stairs:stair_outer_" .. subname, recipeitem, new_groups, images, description, sounds, worldaligntex, nodeboxes.stair_outer ) if recipeitem and minetest.registered_nodes[recipeitem] then minetest.register_craft({ output = "stairs:stair_outer_" .. subname .. " 6", recipe = { { "", recipeitem, "" }, { recipeitem, recipeitem, recipeitem }, }, }) -- Fuel local baseburntime = minetest.get_craft_result({ method = "fuel", width = 1, items = { recipeitem }, }).time if baseburntime > 0 then minetest.register_craft({ type = "fuel", recipe = "stairs:stair_outer_" .. subname, burntime = math.floor(baseburntime * 0.625), }) end end end stairs.legacy = legacy