forked from mtcontrib/homedecor_modpack
		
	functionalize most of the two-node objects' placement code
This commit is contained in:
		| @@ -252,13 +252,6 @@ local bedcolors = { | |||||||
|         "pink", |         "pink", | ||||||
| } | } | ||||||
|  |  | ||||||
| local fdir_to_fwd = { |  | ||||||
| 	{  0,  1 }, |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| for _, color in ipairs(bedcolors) do | for _, color in ipairs(bedcolors) do | ||||||
|  |  | ||||||
| 	minetest.register_node("homedecor:bed_"..color.."_head", { | 	minetest.register_node("homedecor:bed_"..color.."_head", { | ||||||
| @@ -336,36 +329,13 @@ for _, color in ipairs(bedcolors) do | |||||||
| 			fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 1.5 } | 			fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 1.5 } | ||||||
| 		}, | 		}, | ||||||
| 		on_place = function(itemstack, placer, pointed_thing) | 		on_place = function(itemstack, placer, pointed_thing) | ||||||
| 			local pos = pointed_thing.under | 			return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 			local pnode = minetest.get_node(pointed_thing.under) | 				"homedecor:bed_"..color.."_foot", "homedecor:bed_"..color.."_head", false) | ||||||
| 			local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 			if not rnodedef["buildable_to"] then |  | ||||||
| 				pos = pointed_thing.above |  | ||||||
| 			end |  | ||||||
|  |  | ||||||
| 			local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 			local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 			local tnode = minetest.get_node(pos) |  | ||||||
| 			local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 			if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 			  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 			  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 			  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 				minetest.add_node(pos, { name = "homedecor:bed_"..color.."_foot", param2 = fdir }) |  | ||||||
| 				minetest.add_node(pos2, { name = "homedecor:bed_"..color.."_head", param2 = fdir }) |  | ||||||
| 				if not homedecor.expect_infinite_stacks then |  | ||||||
| 					itemstack:take_item() |  | ||||||
| 					return itemstack |  | ||||||
| 				end |  | ||||||
| 			end |  | ||||||
| 		end, | 		end, | ||||||
| 		after_dig_node = function(pos, oldnode, oldmetadata, digger) | 		after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 			local fdir = oldnode.param2 | 			local fdir = oldnode.param2 | ||||||
| 			if not fdir or fdir > 3 then return end | 			if not fdir or fdir > 3 then return end | ||||||
| 			local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } | 			local pos2 = { x = pos.x + homedecor.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_fwd[fdir+1][2] } | ||||||
| 			if minetest.get_node(pos2).name == "homedecor:bed_"..color.."_head" then | 			if minetest.get_node(pos2).name == "homedecor:bed_"..color.."_head" then | ||||||
| 				minetest.remove_node(pos2) | 				minetest.remove_node(pos2) | ||||||
| 			end | 			end | ||||||
| @@ -430,31 +400,8 @@ minetest.register_node("homedecor:wardrobe_bottom", { | |||||||
| 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_vertically(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:wardrobe_bottom", "homedecor:wardrobe_top") | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:wardrobe_bottom", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:wardrobe_top", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | ||||||
| @@ -497,15 +444,6 @@ minetest.register_node("homedecor:wardrobe_bottom", { | |||||||
| 	end, | 	end, | ||||||
| }) | }) | ||||||
|  |  | ||||||
|  |  | ||||||
| local fdir_to_right = { |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| 	{  0,  1 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:simple_bench", { | minetest.register_node("homedecor:simple_bench", { | ||||||
| 	tiles = { | 	tiles = { | ||||||
| 		"homedecor_generic_wood.png", | 		"homedecor_generic_wood.png", | ||||||
| @@ -563,36 +501,13 @@ minetest.register_node("homedecor:bench_large_1_left", { | |||||||
| 		fixed = { -0.5, -0.5, -0.09375, 1.5, 0.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.09375, 1.5, 0.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:bench_large_1_left", "homedecor:bench_large_1_right", true) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:bench_large_1_left", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:bench_large_1_right", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_right[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:bench_large_1_right" then | 		if minetest.get_node(pos2).name == "homedecor:bench_large_1_right" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
| @@ -672,36 +587,13 @@ minetest.register_node("homedecor:bench_large_2_left", { | |||||||
| 		fixed = { -0.5, -0.5, -0.15625, 1.5, 0.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.15625, 1.5, 0.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:bench_large_2_left", "homedecor:bench_large_2_right", true) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:bench_large_2_left", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:bench_large_2_right", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_right[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:bench_large_2_right" then | 		if minetest.get_node(pos2).name == "homedecor:bench_large_2_right" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
| @@ -748,13 +640,6 @@ minetest.register_node("homedecor:bench_large_2_right", { | |||||||
| 	}, | 	}, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| local fdir_to_fwd = { |  | ||||||
| 	{  0,  1 }, |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:deckchair_head", { | minetest.register_node("homedecor:deckchair_head", { | ||||||
| 	tiles = { | 	tiles = { | ||||||
| 		"homedecor_deckchair_top_c1.png", | 		"homedecor_deckchair_top_c1.png", | ||||||
| @@ -824,36 +709,13 @@ minetest.register_node("homedecor:deckchair_foot", { | |||||||
| 		fixed = { -0.45, -0.5, -0.5, 0.45, 0.35, 1.5 } | 		fixed = { -0.45, -0.5, -0.5, 0.45, 0.35, 1.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:deckchair_foot", "homedecor:deckchair_head", false) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:deckchair_foot", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:deckchair_head", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_fwd[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:deckchair_head" then | 		if minetest.get_node(pos2).name == "homedecor:deckchair_head" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
|   | |||||||
| @@ -67,6 +67,85 @@ function homedecor.get_nodedef_field(nodename, fieldname) | |||||||
| 	return minetest.registered_nodes[nodename][fieldname] | 	return minetest.registered_nodes[nodename][fieldname] | ||||||
| end | end | ||||||
|  |  | ||||||
|  | -- Stack one node above another | ||||||
|  |  | ||||||
|  | function homedecor.stack_vertically(itemstack, placer, pointed_thing, node1, node2) | ||||||
|  | 	local pos = pointed_thing.under | ||||||
|  | 	local pnode = minetest.get_node(pointed_thing.under) | ||||||
|  | 	local rnodedef = minetest.registered_nodes[pnode.name] | ||||||
|  |  | ||||||
|  | 	if not rnodedef["buildable_to"] then | ||||||
|  | 		pos = pointed_thing.above | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local fdir = minetest.dir_to_facedir(placer:get_look_dir()) | ||||||
|  | 	local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | ||||||
|  |  | ||||||
|  | 	local tnode = minetest.get_node(pos) | ||||||
|  | 	local tnode2 = minetest.get_node(pos2) | ||||||
|  |  | ||||||
|  | 	if homedecor.get_nodedef_field(tnode.name, "buildable_to") | ||||||
|  | 	  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") | ||||||
|  | 	  and not minetest.is_protected(pos, placer:get_player_name()) | ||||||
|  | 	  and not minetest.is_protected(pos2, placer:get_player_name()) then | ||||||
|  | 		minetest.add_node(pos, { name = node1, param2 = fdir }) | ||||||
|  | 		minetest.add_node(pos2, { name = node2, param2 = fdir }) | ||||||
|  | 		if not homedecor.expect_infinite_stacks then | ||||||
|  | 			itemstack:take_item() | ||||||
|  | 			return itemstack | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
|  | -- Place one node right of or behind another | ||||||
|  |  | ||||||
|  | homedecor.fdir_to_right = { | ||||||
|  | 	{  1,  0 }, | ||||||
|  | 	{  0, -1 }, | ||||||
|  | 	{ -1,  0 }, | ||||||
|  | 	{  0,  1 }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | homedecor.fdir_to_fwd = { | ||||||
|  | 	{  0,  1 }, | ||||||
|  | 	{  1,  0 }, | ||||||
|  | 	{  0, -1 }, | ||||||
|  | 	{ -1,  0 }, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | function homedecor.stack_sideways(itemstack, placer, pointed_thing, node1, node2, dir) | ||||||
|  | 	local pos = pointed_thing.under | ||||||
|  | 	local pnode = minetest.get_node(pointed_thing.under) | ||||||
|  | 	local rnodedef = minetest.registered_nodes[pnode.name] | ||||||
|  |  | ||||||
|  | 	if not rnodedef["buildable_to"] then | ||||||
|  | 		pos = pointed_thing.above | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local fdir = minetest.dir_to_facedir(placer:get_look_dir()) | ||||||
|  | 	local pos2 | ||||||
|  | 	if dir then | ||||||
|  | 		pos2 = { x = pos.x + homedecor.fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_right[fdir+1][2] } | ||||||
|  | 	else | ||||||
|  | 		pos2 = { x = pos.x + homedecor.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_fwd[fdir+1][2] } | ||||||
|  | 	end | ||||||
|  |  | ||||||
|  | 	local tnode = minetest.get_node(pos) | ||||||
|  | 	local tnode2 = minetest.get_node(pos2) | ||||||
|  |  | ||||||
|  | 	if homedecor.get_nodedef_field(tnode.name, "buildable_to") | ||||||
|  | 	  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") | ||||||
|  | 	  and not minetest.is_protected(pos, placer:get_player_name()) | ||||||
|  | 	  and not minetest.is_protected(pos2, placer:get_player_name()) then | ||||||
|  | 		minetest.add_node(pos, { name = node1, param2 = fdir }) | ||||||
|  | 		minetest.add_node(pos2, { name = node2, param2 = fdir }) | ||||||
|  | 		if not homedecor.expect_infinite_stacks then | ||||||
|  | 			itemstack:take_item() | ||||||
|  | 			return itemstack | ||||||
|  | 		end | ||||||
|  | 	end | ||||||
|  | end | ||||||
|  |  | ||||||
| -- load various other components | -- load various other components | ||||||
|  |  | ||||||
| dofile(homedecor.modpath.."/misc-nodes.lua")					-- the catch-all for all misc nodes | dofile(homedecor.modpath.."/misc-nodes.lua")					-- the catch-all for all misc nodes | ||||||
|   | |||||||
| @@ -636,31 +636,8 @@ minetest.register_node("homedecor:doghouse_base", { | |||||||
| 	}, | 	}, | ||||||
| 	groups = {snappy=3}, | 	groups = {snappy=3}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_vertically(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 				"homedecor:doghouse_base", "homedecor:doghouse_roof") | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:doghouse_base", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:doghouse_roof", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | ||||||
| @@ -716,13 +693,6 @@ minetest.register_node("homedecor:doghouse_roof", { | |||||||
| 	groups = {snappy=3, not_in_creative_inventory=1}, | 	groups = {snappy=3, not_in_creative_inventory=1}, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| local fdir_to_fwd = { |  | ||||||
| 	{  0,  1 }, |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| local swap_fdir = { 2, 3, 0, 1 } | local swap_fdir = { 2, 3, 0, 1 } | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:pool_table", { | minetest.register_node("homedecor:pool_table", { | ||||||
| @@ -782,7 +752,7 @@ minetest.register_node("homedecor:pool_table", { | |||||||
| 		end | 		end | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) | 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) | ||||||
| 		local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_fwd[fdir+1][2] } | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) | 		local tnode = minetest.get_node(pos) | ||||||
| 		local tnode2 = minetest.get_node(pos2) | 		local tnode2 = minetest.get_node(pos2) | ||||||
| @@ -792,8 +762,6 @@ minetest.register_node("homedecor:pool_table", { | |||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) | 		  and not minetest.is_protected(pos, placer:get_player_name()) | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then | 		  and not minetest.is_protected(pos2, placer:get_player_name()) then | ||||||
| 			minetest.add_node(pos, { name = "homedecor:pool_table", param2 = fdir }) | 			minetest.add_node(pos, { name = "homedecor:pool_table", param2 = fdir }) | ||||||
| 			print(fdir) |  | ||||||
| 			print(swap_fdir[fdir+1]) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:pool_table2", param2 = swap_fdir[fdir+1] }) | 			minetest.add_node(pos2, { name = "homedecor:pool_table2", param2 = swap_fdir[fdir+1] }) | ||||||
| 			if not homedecor.expect_infinite_stacks then | 			if not homedecor.expect_infinite_stacks then | ||||||
| 				itemstack:take_item() | 				itemstack:take_item() | ||||||
| @@ -804,7 +772,7 @@ minetest.register_node("homedecor:pool_table", { | |||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + fdir_to_fwd[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_fwd[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_fwd[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:pool_table2" then | 		if minetest.get_node(pos2).name == "homedecor:pool_table2" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
| @@ -931,31 +899,8 @@ minetest.register_node("homedecor:well_base", { | |||||||
| 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_vertically(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:well_base", "homedecor:well_top") | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:well_base", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:well_top", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | 		local pos2 = { x = pos.x, y=pos.y + 1, z = pos.z } | ||||||
| @@ -1280,13 +1225,6 @@ minetest.register_node("homedecor:dartboard", { | |||||||
| 	sounds = default.node_sound_defaults(), | 	sounds = default.node_sound_defaults(), | ||||||
| }) | }) | ||||||
|  |  | ||||||
| local fdir_to_right = { |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| 	{  0,  1 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:piano_left", { | minetest.register_node("homedecor:piano_left", { | ||||||
| 	tiles = { | 	tiles = { | ||||||
| 		"homedecor_piano_top_left.png", | 		"homedecor_piano_top_left.png", | ||||||
| @@ -1320,36 +1258,13 @@ minetest.register_node("homedecor:piano_left", { | |||||||
| 		fixed = { -0.5, -0.5, -0.125, 1.5, 0.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.125, 1.5, 0.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:piano_left", "homedecor:piano_right", true) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:piano_left", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:piano_right", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_right[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:piano_right" then | 		if minetest.get_node(pos2).name == "homedecor:piano_right" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
|   | |||||||
| @@ -58,7 +58,6 @@ minetest.register_node("homedecor:refrigerator_steel_bottom", { | |||||||
| 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		print("started on_place") |  | ||||||
| 		local pos = pointed_thing.under | 		local pos = pointed_thing.under | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 		local pnode = minetest.get_node(pointed_thing.under) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] | 		local rnodedef = minetest.registered_nodes[pnode.name] | ||||||
| @@ -177,7 +176,6 @@ minetest.register_node("homedecor:refrigerator_white_bottom", { | |||||||
| 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | 		fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 } | ||||||
| 	}, | 	}, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		print("started on_place") |  | ||||||
| 		local pos = pointed_thing.under | 		local pos = pointed_thing.under | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 		local pnode = minetest.get_node(pointed_thing.under) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] | 		local rnodedef = minetest.registered_nodes[pnode.name] | ||||||
|   | |||||||
| @@ -408,13 +408,6 @@ minetest.register_node('homedecor:utility_table_legs', { | |||||||
| 	}, | 	}, | ||||||
| }) | }) | ||||||
|  |  | ||||||
| local fdir_to_right = { |  | ||||||
| 	{  1,  0 }, |  | ||||||
| 	{  0, -1 }, |  | ||||||
| 	{ -1,  0 }, |  | ||||||
| 	{  0,  1 }, |  | ||||||
| } |  | ||||||
|  |  | ||||||
| minetest.register_node("homedecor:desk", { | minetest.register_node("homedecor:desk", { | ||||||
| 	drawtype = "nodebox", | 	drawtype = "nodebox", | ||||||
| 	description = "Desk", | 	description = "Desk", | ||||||
| @@ -445,36 +438,13 @@ minetest.register_node("homedecor:desk", { | |||||||
| 	}, | 	}, | ||||||
| 	groups = { snappy = 3 }, | 	groups = { snappy = 3 }, | ||||||
| 	on_place = function(itemstack, placer, pointed_thing) | 	on_place = function(itemstack, placer, pointed_thing) | ||||||
| 		local pos = pointed_thing.under | 		return homedecor.stack_sideways(itemstack, placer, pointed_thing, | ||||||
| 		local pnode = minetest.get_node(pointed_thing.under) | 			"homedecor:desk", "homedecor:desk_r", true) | ||||||
| 		local rnodedef = minetest.registered_nodes[pnode.name] |  | ||||||
|  |  | ||||||
| 		if not rnodedef["buildable_to"] then |  | ||||||
| 			pos = pointed_thing.above |  | ||||||
| 		end |  | ||||||
|  |  | ||||||
| 		local fdir = minetest.dir_to_facedir(placer:get_look_dir()) |  | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } |  | ||||||
|  |  | ||||||
| 		local tnode = minetest.get_node(pos) |  | ||||||
| 		local tnode2 = minetest.get_node(pos2) |  | ||||||
|  |  | ||||||
| 		if homedecor.get_nodedef_field(tnode.name, "buildable_to") |  | ||||||
| 		  and homedecor.get_nodedef_field(tnode2.name, "buildable_to") |  | ||||||
| 		  and not minetest.is_protected(pos, placer:get_player_name()) |  | ||||||
| 		  and not minetest.is_protected(pos2, placer:get_player_name()) then |  | ||||||
| 			minetest.add_node(pos, { name = "homedecor:desk", param2 = fdir }) |  | ||||||
| 			minetest.add_node(pos2, { name = "homedecor:desk_r", param2 = fdir }) |  | ||||||
| 			if not homedecor.expect_infinite_stacks then |  | ||||||
| 				itemstack:take_item() |  | ||||||
| 				return itemstack |  | ||||||
| 			end |  | ||||||
| 		end |  | ||||||
| 	end, | 	end, | ||||||
| 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | 	after_dig_node = function(pos, oldnode, oldmetadata, digger) | ||||||
| 		local fdir = oldnode.param2 | 		local fdir = oldnode.param2 | ||||||
| 		if not fdir or fdir > 3 then return end | 		if not fdir or fdir > 3 then return end | ||||||
| 		local pos2 = { x = pos.x + fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + fdir_to_right[fdir+1][2] } | 		local pos2 = { x = pos.x + homedecor.fdir_to_right[fdir+1][1], y=pos.y, z = pos.z + homedecor.fdir_to_right[fdir+1][2] } | ||||||
| 		if minetest.get_node(pos2).name == "homedecor:desk_r" then | 		if minetest.get_node(pos2).name == "homedecor:desk_r" then | ||||||
| 			minetest.remove_node(pos2) | 			minetest.remove_node(pos2) | ||||||
| 		end | 		end | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user