public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.Player other) {
        if (other == org.bwapi.proxy.messages.GameMessages.Player.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (unitsBuilder_ == null) {
          if (!other.units_.isEmpty()) {
            if (units_.isEmpty()) {
              units_ = other.units_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureUnitsIsMutable();
              units_.addAll(other.units_);
            }
            onChanged();
          }
        } else {
          if (!other.units_.isEmpty()) {
            if (unitsBuilder_.isEmpty()) {
              unitsBuilder_.dispose();
              unitsBuilder_ = null;
              units_ = other.units_;
              bitField0_ = (bitField0_ & ~0x00000004);
              unitsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUnitsFieldBuilder() : null;
            } else {
              unitsBuilder_.addAllMessages(other.units_);
            }
          }
        }
        if (other.hasRace()) {
          setRace(other.getRace());
        }
        if (stancesBuilder_ == null) {
          if (!other.stances_.isEmpty()) {
            if (stances_.isEmpty()) {
              stances_ = other.stances_;
              bitField0_ = (bitField0_ & ~0x00000010);
            } else {
              ensureStancesIsMutable();
              stances_.addAll(other.stances_);
            }
            onChanged();
          }
        } else {
          if (!other.stances_.isEmpty()) {
            if (stancesBuilder_.isEmpty()) {
              stancesBuilder_.dispose();
              stancesBuilder_ = null;
              stances_ = other.stances_;
              bitField0_ = (bitField0_ & ~0x00000010);
              stancesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getStancesFieldBuilder() : null;
            } else {
              stancesBuilder_.addAllMessages(other.stances_);
            }
          }
        }
        if (other.hasNeutral()) {
          setNeutral(other.getNeutral());
        }
        if (other.hasStartLocation()) {
          mergeStartLocation(other.getStartLocation());
        }
        if (other.hasLeftGame()) {
          setLeftGame(other.getLeftGame());
        }
        if (other.hasMinerals()) {
          setMinerals(other.getMinerals());
        }
        if (other.hasGas()) {
          setGas(other.getGas());
        }
        if (other.hasCumulativeMinerals()) {
          setCumulativeMinerals(other.getCumulativeMinerals());
        }
        if (other.hasCumulativeGas()) {
          setCumulativeGas(other.getCumulativeGas());
        }
        if (other.hasSupplyTotal()) {
          setSupplyTotal(other.getSupplyTotal());
        }
        if (other.hasSupplyUsed()) {
          setSupplyUsed(other.getSupplyUsed());
        }
        if (allUnitCountBuilder_ == null) {
          if (!other.allUnitCount_.isEmpty()) {
            if (allUnitCount_.isEmpty()) {
              allUnitCount_ = other.allUnitCount_;
              bitField0_ = (bitField0_ & ~0x00004000);
            } else {
              ensureAllUnitCountIsMutable();
              allUnitCount_.addAll(other.allUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.allUnitCount_.isEmpty()) {
            if (allUnitCountBuilder_.isEmpty()) {
              allUnitCountBuilder_.dispose();
              allUnitCountBuilder_ = null;
              allUnitCount_ = other.allUnitCount_;
              bitField0_ = (bitField0_ & ~0x00004000);
              allUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAllUnitCountFieldBuilder() : null;
            } else {
              allUnitCountBuilder_.addAllMessages(other.allUnitCount_);
            }
          }
        }
        if (completedUnitCountBuilder_ == null) {
          if (!other.completedUnitCount_.isEmpty()) {
            if (completedUnitCount_.isEmpty()) {
              completedUnitCount_ = other.completedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00008000);
            } else {
              ensureCompletedUnitCountIsMutable();
              completedUnitCount_.addAll(other.completedUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.completedUnitCount_.isEmpty()) {
            if (completedUnitCountBuilder_.isEmpty()) {
              completedUnitCountBuilder_.dispose();
              completedUnitCountBuilder_ = null;
              completedUnitCount_ = other.completedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00008000);
              completedUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getCompletedUnitCountFieldBuilder() : null;
            } else {
              completedUnitCountBuilder_.addAllMessages(other.completedUnitCount_);
            }
          }
        }
        if (incompleteUnitCountBuilder_ == null) {
          if (!other.incompleteUnitCount_.isEmpty()) {
            if (incompleteUnitCount_.isEmpty()) {
              incompleteUnitCount_ = other.incompleteUnitCount_;
              bitField0_ = (bitField0_ & ~0x00010000);
            } else {
              ensureIncompleteUnitCountIsMutable();
              incompleteUnitCount_.addAll(other.incompleteUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.incompleteUnitCount_.isEmpty()) {
            if (incompleteUnitCountBuilder_.isEmpty()) {
              incompleteUnitCountBuilder_.dispose();
              incompleteUnitCountBuilder_ = null;
              incompleteUnitCount_ = other.incompleteUnitCount_;
              bitField0_ = (bitField0_ & ~0x00010000);
              incompleteUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getIncompleteUnitCountFieldBuilder() : null;
            } else {
              incompleteUnitCountBuilder_.addAllMessages(other.incompleteUnitCount_);
            }
          }
        }
        if (deadUnitCountBuilder_ == null) {
          if (!other.deadUnitCount_.isEmpty()) {
            if (deadUnitCount_.isEmpty()) {
              deadUnitCount_ = other.deadUnitCount_;
              bitField0_ = (bitField0_ & ~0x00020000);
            } else {
              ensureDeadUnitCountIsMutable();
              deadUnitCount_.addAll(other.deadUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.deadUnitCount_.isEmpty()) {
            if (deadUnitCountBuilder_.isEmpty()) {
              deadUnitCountBuilder_.dispose();
              deadUnitCountBuilder_ = null;
              deadUnitCount_ = other.deadUnitCount_;
              bitField0_ = (bitField0_ & ~0x00020000);
              deadUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getDeadUnitCountFieldBuilder() : null;
            } else {
              deadUnitCountBuilder_.addAllMessages(other.deadUnitCount_);
            }
          }
        }
        if (killedUnitCountBuilder_ == null) {
          if (!other.killedUnitCount_.isEmpty()) {
            if (killedUnitCount_.isEmpty()) {
              killedUnitCount_ = other.killedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00040000);
            } else {
              ensureKilledUnitCountIsMutable();
              killedUnitCount_.addAll(other.killedUnitCount_);
            }
            onChanged();
          }
        } else {
          if (!other.killedUnitCount_.isEmpty()) {
            if (killedUnitCountBuilder_.isEmpty()) {
              killedUnitCountBuilder_.dispose();
              killedUnitCountBuilder_ = null;
              killedUnitCount_ = other.killedUnitCount_;
              bitField0_ = (bitField0_ & ~0x00040000);
              killedUnitCountBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getKilledUnitCountFieldBuilder() : null;
            } else {
              killedUnitCountBuilder_.addAllMessages(other.killedUnitCount_);
            }
          }
        }
        if (upgradeLevelsBuilder_ == null) {
          if (!other.upgradeLevels_.isEmpty()) {
            if (upgradeLevels_.isEmpty()) {
              upgradeLevels_ = other.upgradeLevels_;
              bitField0_ = (bitField0_ & ~0x00080000);
            } else {
              ensureUpgradeLevelsIsMutable();
              upgradeLevels_.addAll(other.upgradeLevels_);
            }
            onChanged();
          }
        } else {
          if (!other.upgradeLevels_.isEmpty()) {
            if (upgradeLevelsBuilder_.isEmpty()) {
              upgradeLevelsBuilder_.dispose();
              upgradeLevelsBuilder_ = null;
              upgradeLevels_ = other.upgradeLevels_;
              bitField0_ = (bitField0_ & ~0x00080000);
              upgradeLevelsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradeLevelsFieldBuilder() : null;
            } else {
              upgradeLevelsBuilder_.addAllMessages(other.upgradeLevels_);
            }
          }
        }
        if (researchedTechsBuilder_ == null) {
          if (!other.researchedTechs_.isEmpty()) {
            if (researchedTechs_.isEmpty()) {
              researchedTechs_ = other.researchedTechs_;
              bitField0_ = (bitField0_ & ~0x00100000);
            } else {
              ensureResearchedTechsIsMutable();
              researchedTechs_.addAll(other.researchedTechs_);
            }
            onChanged();
          }
        } else {
          if (!other.researchedTechs_.isEmpty()) {
            if (researchedTechsBuilder_.isEmpty()) {
              researchedTechsBuilder_.dispose();
              researchedTechsBuilder_ = null;
              researchedTechs_ = other.researchedTechs_;
              bitField0_ = (bitField0_ & ~0x00100000);
              researchedTechsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getResearchedTechsFieldBuilder() : null;
            } else {
              researchedTechsBuilder_.addAllMessages(other.researchedTechs_);
            }
          }
        }
        if (researchingBuilder_ == null) {
          if (!other.researching_.isEmpty()) {
            if (researching_.isEmpty()) {
              researching_ = other.researching_;
              bitField0_ = (bitField0_ & ~0x00200000);
            } else {
              ensureResearchingIsMutable();
              researching_.addAll(other.researching_);
            }
            onChanged();
          }
        } else {
          if (!other.researching_.isEmpty()) {
            if (researchingBuilder_.isEmpty()) {
              researchingBuilder_.dispose();
              researchingBuilder_ = null;
              researching_ = other.researching_;
              bitField0_ = (bitField0_ & ~0x00200000);
              researchingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getResearchingFieldBuilder() : null;
            } else {
              researchingBuilder_.addAllMessages(other.researching_);
            }
          }
        }
        if (upgradingBuilder_ == null) {
          if (!other.upgrading_.isEmpty()) {
            if (upgrading_.isEmpty()) {
              upgrading_ = other.upgrading_;
              bitField0_ = (bitField0_ & ~0x00400000);
            } else {
              ensureUpgradingIsMutable();
              upgrading_.addAll(other.upgrading_);
            }
            onChanged();
          }
        } else {
          if (!other.upgrading_.isEmpty()) {
            if (upgradingBuilder_.isEmpty()) {
              upgradingBuilder_.dispose();
              upgradingBuilder_ = null;
              upgrading_ = other.upgrading_;
              bitField0_ = (bitField0_ & ~0x00400000);
              upgradingBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradingFieldBuilder() : null;
            } else {
              upgradingBuilder_.addAllMessages(other.upgrading_);
            }
          }
        }
        if (other.hasSelf()) {
          setSelf(other.getSelf());
        }
        if (other.hasVictorious()) {
          setVictorious(other.getVictorious());
        }
        if (other.hasDefeated()) {
          setDefeated(other.getDefeated());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }