forked from luanti-org/minetest_game
		
	Stairs: Add straw and metal blocks
Make replace ABM optional, disabled by default
This commit is contained in:
		| @@ -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_<subname> | ||||
|  | ||||
| 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_<subname> | ||||
|  | ||||
| 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}_<subname> | ||||
| 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()) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user