From 450543f7820f63bb0d5ecbddd1a7e88b46f9e6a1 Mon Sep 17 00:00:00 2001 From: paramat Date: Fri, 14 Aug 2015 03:00:32 +0100 Subject: [PATCH] Stairs: Add straw and metal blocks Make replace ABM optional, disabled by default --- minetest.conf.example | 4 ++ mods/stairs/depends.txt | 1 + mods/stairs/init.lua | 144 +++++++++++++++++++++++++++++----------- 3 files changed, 111 insertions(+), 38 deletions(-) diff --git a/minetest.conf.example b/minetest.conf.example index b908ad24..47d03b00 100644 --- a/minetest.conf.example +++ b/minetest.conf.example @@ -22,3 +22,7 @@ # The radius of a TNT explosion #tnt_radius = 3 + +# Enable the stairs mod ABM that replaces the old 'upside down' +# stair and slab nodes in old maps with the new param2 versions. +#enable_stairs_replace_abm = false diff --git a/mods/stairs/depends.txt b/mods/stairs/depends.txt index 4ad96d51..d77ba253 100644 --- a/mods/stairs/depends.txt +++ b/mods/stairs/depends.txt @@ -1 +1,2 @@ default +farming diff --git a/mods/stairs/init.lua b/mods/stairs/init.lua index 7e752d13..c2547935 100644 --- a/mods/stairs/init.lua +++ b/mods/stairs/init.lua @@ -1,9 +1,20 @@ -- Minetest 0.4 mod: stairs -- See README.txt for licensing and other information. + +-- Global namespace for functions + stairs = {} + +-- Get setting for replace ABM + +local replace = minetest.setting_getbool("enable_stairs_replace_abm") + + +-- Register stairs. -- Node will be called stairs:stair_ + function stairs.register_stair(subname, recipeitem, groups, images, description, sounds) minetest.register_node(":stairs:stair_" .. subname, { description = description, @@ -48,7 +59,7 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, param2 = minetest.dir_to_facedir(dir) end - if p0.y-1 == p1.y then + if p0.y - 1 == p1.y then param2 = param2 + 20 if param2 == 21 then param2 = 23 @@ -62,10 +73,12 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, }) -- for replace ABM - minetest.register_node(":stairs:stair_" .. subname.."upside_down", { - replace_name = "stairs:stair_" .. subname, - groups = {slabs_replace=1}, - }) + if replace then + minetest.register_node(":stairs:stair_" .. subname .. "upside_down", { + replace_name = "stairs:stair_" .. subname, + groups = {slabs_replace = 1}, + }) + end minetest.register_craft({ output = 'stairs:stair_' .. subname .. ' 6', @@ -87,7 +100,10 @@ function stairs.register_stair(subname, recipeitem, groups, images, description, }) end + +-- Register slabs. -- Node will be called stairs:slab_ + function stairs.register_slab(subname, recipeitem, groups, images, description, sounds) minetest.register_node(":stairs:slab_" .. subname, { description = description, @@ -120,7 +136,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, local n0_is_upside_down = (n0.name == "stairs:slab_" .. subname and n0.param2 >= 20) - if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then + if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and + p0.y + 1 == p1.y then slabpos = p0 slabnode = n0 elseif n1.name == "stairs:slab_" .. subname then @@ -136,7 +153,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, pointed_thing.above = slabpos local success - fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + fakestack, success = minetest.item_place(fakestack, placer, + pointed_thing) -- If the item was taken from the fake stack, decrement original if success then itemstack:set_count(fakestack:get_count()) @@ -148,7 +166,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, end -- Upside down slabs - if p0.y-1 == p1.y then + if p0.y - 1 == p1.y then -- Turn into full block if pointing at a existing slab if n0_is_upside_down then -- Remove the slab at the position of the slab @@ -159,7 +177,8 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, pointed_thing.above = p0 local success - fakestack, success = minetest.item_place(fakestack, placer, pointed_thing) + fakestack, success = minetest.item_place(fakestack, placer, + pointed_thing) -- If the item was taken from the fake stack, decrement original if success then itemstack:set_count(fakestack:get_count()) @@ -175,7 +194,7 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, end -- If pointing at the side of a upside down slab - if n0_is_upside_down and p0.y+1 ~= p1.y then + if n0_is_upside_down and p0.y + 1 ~= p1.y then param2 = 20 end @@ -184,10 +203,12 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, }) -- for replace ABM - minetest.register_node(":stairs:slab_" .. subname.."upside_down", { - replace_name = "stairs:slab_"..subname, - groups = {slabs_replace=1}, - }) + if replace then + minetest.register_node(":stairs:slab_" .. subname .. "upside_down", { + replace_name = "stairs:slab_".. subname, + groups = {slabs_replace = 1}, + }) + end minetest.register_craft({ output = 'stairs:slab_' .. subname .. ' 6', @@ -197,29 +218,41 @@ function stairs.register_slab(subname, recipeitem, groups, images, description, }) end --- Replace old "upside_down" nodes with new param2 versions -minetest.register_abm({ - nodenames = {"group:slabs_replace"}, - interval = 8, - chance = 1, - action = function(pos, node) - node.name = minetest.registered_nodes[node.name].replace_name - node.param2 = node.param2 + 20 - if node.param2 == 21 then - node.param2 = 23 - elseif node.param2 == 23 then - node.param2 = 21 - end - minetest.set_node(pos, node) - end, -}) +-- Optionally replace old "upside_down" nodes with new param2 versions. +-- Disabled by default. + +if replace then + minetest.register_abm({ + nodenames = {"group:slabs_replace"}, + interval = 8, + chance = 1, + action = function(pos, node) + node.name = minetest.registered_nodes[node.name].replace_name + node.param2 = node.param2 + 20 + if node.param2 == 21 then + node.param2 = 23 + elseif node.param2 == 23 then + node.param2 = 21 + end + minetest.set_node(pos, node) + end, + }) +end + + +-- Stair/slab registration function. -- Nodes will be called stairs:{stair,slab}_ -function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds) + +function stairs.register_stair_and_slab(subname, recipeitem, groups, images, + desc_stair, desc_slab, sounds) stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds) stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds) end + +-- Register default stairs and slabs + stairs.register_stair_and_slab("wood", "default:wood", {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, {"default_wood.png"}, @@ -290,13 +323,6 @@ stairs.register_stair_and_slab("desert_stonebrick", "default:desert_stonebrick", "Desert Stone Brick Slab", default.node_sound_stone_defaults()) -stairs.register_stair_and_slab("brick", "default:brick", - {cracky = 3}, - {"default_brick.png"}, - "Brick Stair", - "Brick Slab", - default.node_sound_stone_defaults()) - stairs.register_stair_and_slab("sandstone", "default:sandstone", {crumbly = 2, cracky = 2}, {"default_sandstone.png"}, @@ -324,3 +350,45 @@ stairs.register_stair_and_slab("obsidianbrick", "default:obsidianbrick", "Obsidian Brick Stair", "Obsidian Brick Slab", default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("brick", "default:brick", + {cracky = 3}, + {"default_brick.png"}, + "Brick Stair", + "Brick Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("straw", "farming:straw", + {snappy = 3, flammable = 4}, + {"farming_straw.png"}, + "Straw Stair", + "Straw Slab", + default.node_sound_leaves_defaults()) + +stairs.register_stair_and_slab("steelblock", "default:steelblock", + {cracky = 1, level = 2}, + {"default_steel_block.png"}, + "Steel Block Stair", + "Steel Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("copperblock", "default:copperblock", + {cracky = 1, level = 2}, + {"default_copper_block.png"}, + "Copper Block Stair", + "Copper Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("bronzeblock", "default:bronzeblock", + {cracky = 1, level = 2}, + {"default_bronze_block.png"}, + "Bronze Block Stair", + "Bronze Block Slab", + default.node_sound_stone_defaults()) + +stairs.register_stair_and_slab("goldblock", "default:goldblock", + {cracky = 1}, + {"default_gold_block.png"}, + "Gold Block Stair", + "Gold Block Slab", + default.node_sound_stone_defaults())