Let's take a look at this section right here.
If north is true add a sub-model called base and one called pillar.
else if north is false do nothing
If south is true add a sub-model called base and one called pillar.
else if south is false do nothing.
You are still overriding your models, instead of base call it north, south, east, and west. You also don't need to make pillar a sub-model, make that the main model.