public org.bwapi.proxy.messages.GameMessages.Player buildPartial() {
        org.bwapi.proxy.messages.GameMessages.Player result = new org.bwapi.proxy.messages.GameMessages.Player(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.id_ = id_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (unitsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            units_ = java.util.Collections.unmodifiableList(units_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.units_ = units_;
        } else {
          result.units_ = unitsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000004;
        }
        result.race_ = race_;
        if (stancesBuilder_ == null) {
          if (((bitField0_ & 0x00000010) == 0x00000010)) {
            stances_ = java.util.Collections.unmodifiableList(stances_);
            bitField0_ = (bitField0_ & ~0x00000010);
          }
          result.stances_ = stances_;
        } else {
          result.stances_ = stancesBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000008;
        }
        result.neutral_ = neutral_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000010;
        }
        if (startLocationBuilder_ == null) {
          result.startLocation_ = startLocation_;
        } else {
          result.startLocation_ = startLocationBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000020;
        }
        result.leftGame_ = leftGame_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000040;
        }
        result.minerals_ = minerals_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000080;
        }
        result.gas_ = gas_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000100;
        }
        result.cumulativeMinerals_ = cumulativeMinerals_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000200;
        }
        result.cumulativeGas_ = cumulativeGas_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00000400;
        }
        result.supplyTotal_ = supplyTotal_;
        if (((from_bitField0_ & 0x00002000) == 0x00002000)) {
          to_bitField0_ |= 0x00000800;
        }
        result.supplyUsed_ = supplyUsed_;
        if (allUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00004000) == 0x00004000)) {
            allUnitCount_ = java.util.Collections.unmodifiableList(allUnitCount_);
            bitField0_ = (bitField0_ & ~0x00004000);
          }
          result.allUnitCount_ = allUnitCount_;
        } else {
          result.allUnitCount_ = allUnitCountBuilder_.build();
        }
        if (completedUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00008000) == 0x00008000)) {
            completedUnitCount_ = java.util.Collections.unmodifiableList(completedUnitCount_);
            bitField0_ = (bitField0_ & ~0x00008000);
          }
          result.completedUnitCount_ = completedUnitCount_;
        } else {
          result.completedUnitCount_ = completedUnitCountBuilder_.build();
        }
        if (incompleteUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00010000) == 0x00010000)) {
            incompleteUnitCount_ = java.util.Collections.unmodifiableList(incompleteUnitCount_);
            bitField0_ = (bitField0_ & ~0x00010000);
          }
          result.incompleteUnitCount_ = incompleteUnitCount_;
        } else {
          result.incompleteUnitCount_ = incompleteUnitCountBuilder_.build();
        }
        if (deadUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00020000) == 0x00020000)) {
            deadUnitCount_ = java.util.Collections.unmodifiableList(deadUnitCount_);
            bitField0_ = (bitField0_ & ~0x00020000);
          }
          result.deadUnitCount_ = deadUnitCount_;
        } else {
          result.deadUnitCount_ = deadUnitCountBuilder_.build();
        }
        if (killedUnitCountBuilder_ == null) {
          if (((bitField0_ & 0x00040000) == 0x00040000)) {
            killedUnitCount_ = java.util.Collections.unmodifiableList(killedUnitCount_);
            bitField0_ = (bitField0_ & ~0x00040000);
          }
          result.killedUnitCount_ = killedUnitCount_;
        } else {
          result.killedUnitCount_ = killedUnitCountBuilder_.build();
        }
        if (upgradeLevelsBuilder_ == null) {
          if (((bitField0_ & 0x00080000) == 0x00080000)) {
            upgradeLevels_ = java.util.Collections.unmodifiableList(upgradeLevels_);
            bitField0_ = (bitField0_ & ~0x00080000);
          }
          result.upgradeLevels_ = upgradeLevels_;
        } else {
          result.upgradeLevels_ = upgradeLevelsBuilder_.build();
        }
        if (researchedTechsBuilder_ == null) {
          if (((bitField0_ & 0x00100000) == 0x00100000)) {
            researchedTechs_ = java.util.Collections.unmodifiableList(researchedTechs_);
            bitField0_ = (bitField0_ & ~0x00100000);
          }
          result.researchedTechs_ = researchedTechs_;
        } else {
          result.researchedTechs_ = researchedTechsBuilder_.build();
        }
        if (researchingBuilder_ == null) {
          if (((bitField0_ & 0x00200000) == 0x00200000)) {
            researching_ = java.util.Collections.unmodifiableList(researching_);
            bitField0_ = (bitField0_ & ~0x00200000);
          }
          result.researching_ = researching_;
        } else {
          result.researching_ = researchingBuilder_.build();
        }
        if (upgradingBuilder_ == null) {
          if (((bitField0_ & 0x00400000) == 0x00400000)) {
            upgrading_ = java.util.Collections.unmodifiableList(upgrading_);
            bitField0_ = (bitField0_ & ~0x00400000);
          }
          result.upgrading_ = upgrading_;
        } else {
          result.upgrading_ = upgradingBuilder_.build();
        }
        if (((from_bitField0_ & 0x00800000) == 0x00800000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.self_ = self_;
        if (((from_bitField0_ & 0x01000000) == 0x01000000)) {
          to_bitField0_ |= 0x00002000;
        }
        result.victorious_ = victorious_;
        if (((from_bitField0_ & 0x02000000) == 0x02000000)) {
          to_bitField0_ |= 0x00004000;
        }
        result.defeated_ = defeated_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }