-- Pipes mod by VanessaE
-- 2012-06-12
--

-- Entirely my own code.  This mod merely supplies enough nodes to build 
-- a bunch of pipes in all directions and with all types of junctions.
--
-- License: WTFPL
--

local DEBUG = 1

-- Local Functions

local dbg = function(s)
	if DEBUG == 1 then
		print('[PIPES] ' .. s)
	end
end

-- Nodes (empty)

minetest.register_node("pipes:vertical", {
        description = "Pipe (vertical)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_plain.png",
			"pipes_windowed_empty.png",
			"pipes_windowed_empty.png"
			},
        paramtype = "light",
--	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.15,  0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },	
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:horizontal", {
        description = "Pipe (horizontal)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_empty.png",
			"pipes_windowed_empty.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_plain.png"
			},
        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:junction_xy", {
        description = "Pipe (junction between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_empty.png",
			"pipes_windowed_empty.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {			
			{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 ,  0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15,  0.15,  0.5 , 0.15 },	
			{  0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:junction_xz", {
        description = "Pipe (junction between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_empty.png",
			"pipes_windowed_empty.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.15, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },
			{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xy_down", {
        description = "Pipe (downward bend between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_empty.png",
			"pipes_windowed_empty.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.5, 0.15, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 ,  0.1 ,  0.1 , 0.1  },
			{ -0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xy_up", {
        description = "Pipe (upward bend between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_empty.png",
			"pipes_windowed_empty.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.15, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, 0.45 , -0.15, 0.15,  0.5, 0.15 },
			{ -0.1 , -0.1 , -0.1 , 0.1 , 0.45, 0.1  },
			{ -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xz", {
        description = "Pipe (bend between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_empty.png",
			"pipes_windowed_empty.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_plain.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.15, -0.15, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },
			{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
			{ -0.1 , -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xz", {
        description = "Pipe (4-way crossing between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_empty.png",
			"pipes_windowed_empty.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png"
			},

        paramtype = "light",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.5, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {

			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },

			{ -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
			{ -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
			{ -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xy", {
        description = "Pipe (4-way crossing between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_windowed_empty.png",
			"pipes_windowed_empty.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.5, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },
	
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },	

		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xyz", {
        description = "Pipe (6-way crossing between X/Y/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png"
			},

        paramtype = "light",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {

			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },

			{ -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
			{ -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
			{ -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  },

			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },	

		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})


-- Nodes (full/loaded)

minetest.register_node("pipes:vertical_loaded", {
        description = "Pipe (vertical)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_plain.png",
			"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png"
			},
        paramtype = "light",
--	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.15,  0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },	
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:horizontal_loaded", {
        description = "Pipe (horizontal)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_plain.png"
			},
        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:junction_xy_loaded", {
        description = "Pipe (junction between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {			
			{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 ,  0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15,  0.15,  0.5 , 0.15 },	
			{  0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:junction_xz_loaded", {
        description = "Pipe (junction between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.15, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },
			{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xy_down_loaded", {
        description = "Pipe (downward bend between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.5, -0.15, 0.5, 0.15, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 ,  0.1 ,  0.1 , 0.1  },
			{ -0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xy_up_loaded", {
        description = "Pipe (upward bend between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.15, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, 0.45 , -0.15, 0.15,  0.5, 0.15 },
			{ -0.1 , -0.1 , -0.1 , 0.1 , 0.45, 0.1  },
			{ -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:bend_xz_loaded", {
        description = "Pipe (bend between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png",
			"pipes_pipe_end.png",
			"pipes_plain.png",
			"pipes_pipe_end.png",
			"pipes_plain.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.15, -0.15, -0.15, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },
			{ -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
			{ -0.1 , -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xz_loaded", {
        description = "Pipe (4-way crossing between X/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png"
			},

        paramtype = "light",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.15, -0.5, 0.5, 0.15, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {

			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },

			{ -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
			{ -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
			{ -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  },
		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xy_loaded", {
        description = "Pipe (4-way crossing between X/Y axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_windowed_loaded.png",
			"pipes_windowed_loaded.png"
			},

        paramtype = "light",
	paramtype2 = "facedir",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.5, -0.15, 0.5, 0.5, 0.15 },
        },
	node_box = {
		type = "fixed",
                fixed = {
			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },
	
			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },	

		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

minetest.register_node("pipes:crossing_xyz_loaded", {
        description = "Pipe (6-way crossing between X/Y/Z axes)",
        drawtype = "nodebox",
        tile_images = {	"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png",
			"pipes_pipe_end.png"
			},

        paramtype = "light",
        selection_box = {
                type = "fixed",
		fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
        },
	node_box = {
		type = "fixed",
                fixed = {

			{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
			{ -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
			{  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },

			{ -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
			{ -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
			{ -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  },

			{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
			{ -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
			{ -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },	

		}
	},
        groups = {snappy=3},
        sounds = default.node_sound_wood_defaults(),
	walkable = true,
})

print("[Pipes] Loaded!")