There are 2 methods:
1) Use exec.
Essentially, make each brick a separate .cs file just like you did the server.cs, and then in the server.cs, simply exec everything. This can also be combined with the second method. I would recommend against this since it's a bit dumb compared to the second method. However, you should use this for any big amounts of code because it's actually just easier to search for things while you're making the bricks and all, and it would allow people to manually customize the pack more or less by commenting out the execs for high amounts of bricks.
For instance, you would have 4 files brick1.cs to brick4.cs.
The server.cs would look like this:
exec("./brick1.cs");
exec("./brick2.cs");
exec("./brick3.cs");
exec("./brick4.cs");
2) One after the other
Heavily recommended, simply slam the codes of the bricks after each other. Just make sure not to use same datablocks but this is a basic since you should not use same datablocks as anything else to begin with.
For instance, I have this copied from my brickpack:
datablock fxDTSBrickData (brickShakerData)
{
brickFile = "./Shaker.blb";
canCover = true;
category = "Special";
subCategory = "Decoration";
uiName = "Shaker";
iconName = "Add-Ons/Brick_LLDecoration/Shaker";
};
datablock fxDTSBrickData (brickOctoGrillData)
{
brickFile = "./OctoGrill.blb";
canCover = true;
category = "Special";
subCategory = "Decoration";
uiName = "Octogrill";
iconName = "Add-Ons/Brick_LLDecoration/Octogrill";
};