public static function FromList(array $resources, Colony $colony, array $listPositions = NULL, $forDeletion = false)
 {
     $members = array();
     $positionCounter = 0;
     $positionInList = 0;
     // Determine the list positions.
     if ($listPositions == NULL) {
         $positionInList += BuildingBuildGroup::GetLastBuildListPosition($colony);
         $positionInList++;
         // If there are other constructions preceding this, offset by 1.
     } else {
         // We DID receive an overriding array, let's use those numbers instead!
         $positionInList = $listPositions[0];
     }
     // Construct list of members
     foreach ($resources as $itemName) {
         $itemObject = clone ResourceParser::Instance()->GetItemByName($itemName);
         $itemObject->Amount(1);
         if ($listPositions != NULL) {
             // Override the list position with the given array.
             $positionInList = $listPositions[$positionCounter];
             $positionCounter++;
         }
         $members[$positionInList] =& BuildingBuildItem::FromIDResource($itemObject, $positionInList, $positionInList, 0, 1, NULL);
         $positionInList++;
     }
     $bg = new BuildingBuildGroup($members, $colony);
     BuildGroup::LinkMembersToGroup($bg);
     // If this BuildGroup is being built up so we can deduct it from another BuildGroup,
     // we don't calculate all the build times, because they won't be used.
     if (!$forDeletion) {
         $bg->FillItemsInDatabase();
         // Pretty damn crucial for correct calculation of buildLevels!
         $bg->UpdateLevels();
         $bg->UpdateBuildTimes();
     }
     return $bg;
 }