public org.bwapi.proxy.messages.GameMessages.StaticGameData buildPartial() {
        org.bwapi.proxy.messages.GameMessages.StaticGameData result = new org.bwapi.proxy.messages.GameMessages.StaticGameData(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (staticMineralsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            staticMinerals_ = java.util.Collections.unmodifiableList(staticMinerals_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.staticMinerals_ = staticMinerals_;
        } else {
          result.staticMinerals_ = staticMineralsBuilder_.build();
        }
        if (staticGeysersBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            staticGeysers_ = java.util.Collections.unmodifiableList(staticGeysers_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.staticGeysers_ = staticGeysers_;
        } else {
          result.staticGeysers_ = staticGeysersBuilder_.build();
        }
        if (staticNeutralUnitsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            staticNeutralUnits_ = java.util.Collections.unmodifiableList(staticNeutralUnits_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.staticNeutralUnits_ = staticNeutralUnits_;
        } else {
          result.staticNeutralUnits_ = staticNeutralUnitsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000001;
        }
        result.mapWidth_ = mapWidth_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000002;
        }
        result.mapHeight_ = mapHeight_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000004;
        }
        result.mapFilename_ = mapFilename_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000008;
        }
        result.mapName_ = mapName_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000010;
        }
        result.mapHash_ = mapHash_;
        if (((bitField0_ & 0x00000100) == 0x00000100)) {
          walkable_ = java.util.Collections.unmodifiableList(walkable_);
          bitField0_ = (bitField0_ & ~0x00000100);
        }
        result.walkable_ = walkable_;
        if (((bitField0_ & 0x00000200) == 0x00000200)) {
          buildable_ = java.util.Collections.unmodifiableList(buildable_);
          bitField0_ = (bitField0_ & ~0x00000200);
        }
        result.buildable_ = buildable_;
        if (((bitField0_ & 0x00000400) == 0x00000400)) {
          groundHeight_ = java.util.Collections.unmodifiableList(groundHeight_);
          bitField0_ = (bitField0_ & ~0x00000400);
        }
        result.groundHeight_ = groundHeight_;
        if (unitTypesBuilder_ == null) {
          if (((bitField0_ & 0x00000800) == 0x00000800)) {
            unitTypes_ = java.util.Collections.unmodifiableList(unitTypes_);
            bitField0_ = (bitField0_ & ~0x00000800);
          }
          result.unitTypes_ = unitTypes_;
        } else {
          result.unitTypes_ = unitTypesBuilder_.build();
        }
        if (weaponsBuilder_ == null) {
          if (((bitField0_ & 0x00001000) == 0x00001000)) {
            weapons_ = java.util.Collections.unmodifiableList(weapons_);
            bitField0_ = (bitField0_ & ~0x00001000);
          }
          result.weapons_ = weapons_;
        } else {
          result.weapons_ = weaponsBuilder_.build();
        }
        if (upgradesBuilder_ == null) {
          if (((bitField0_ & 0x00002000) == 0x00002000)) {
            upgrades_ = java.util.Collections.unmodifiableList(upgrades_);
            bitField0_ = (bitField0_ & ~0x00002000);
          }
          result.upgrades_ = upgrades_;
        } else {
          result.upgrades_ = upgradesBuilder_.build();
        }
        if (techsBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            techs_ = java.util.Collections.unmodifiableList(techs_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.techs_ = techs_;
        } else {
          result.techs_ = techsBuilder_.build();
        }
        if (colorsBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            colors_ = java.util.Collections.unmodifiableList(colors_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.colors_ = colors_;
        } else {
          result.colors_ = colorsBuilder_.build();
        }
        if (racesBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000)) {
            races_ = java.util.Collections.unmodifiableList(races_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.races_ = races_;
        } else {
          result.races_ = racesBuilder_.build();
        }
        if (startLocationsBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000)) {
            startLocations_ = java.util.Collections.unmodifiableList(startLocations_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.startLocations_ = startLocations_;
        } else {
          result.startLocations_ = startLocationsBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }