public Builder mergeFrom(org.bwapi.proxy.messages.GameMessages.UnitTypeData other) {
        if (other == org.bwapi.proxy.messages.GameMessages.UnitTypeData.getDefaultInstance()) return this;
        if (other.hasId()) {
          setId(other.getId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasSublabel()) {
          bitField0_ |= 0x00000004;
          sublabel_ = other.sublabel_;
          onChanged();
        }
        if (other.hasRace()) {
          setRace(other.getRace());
        }
        if (other.hasWhatBuildsType()) {
          mergeWhatBuildsType(other.getWhatBuildsType());
        }
        if (other.hasWhatBuildsNumber()) {
          setWhatBuildsNumber(other.getWhatBuildsNumber());
        }
        if (requiredUnitsBuilder_ == null) {
          if (!other.requiredUnits_.isEmpty()) {
            if (requiredUnits_.isEmpty()) {
              requiredUnits_ = other.requiredUnits_;
              bitField0_ = (bitField0_ & ~0x00000040);
            } else {
              ensureRequiredUnitsIsMutable();
              requiredUnits_.addAll(other.requiredUnits_);
            }
            onChanged();
          }
        } else {
          if (!other.requiredUnits_.isEmpty()) {
            if (requiredUnitsBuilder_.isEmpty()) {
              requiredUnitsBuilder_.dispose();
              requiredUnitsBuilder_ = null;
              requiredUnits_ = other.requiredUnits_;
              bitField0_ = (bitField0_ & ~0x00000040);
              requiredUnitsBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getRequiredUnitsFieldBuilder() : null;
            } else {
              requiredUnitsBuilder_.addAllMessages(other.requiredUnits_);
            }
          }
        }
        if (other.hasRequiredTech()) {
          mergeRequiredTech(other.getRequiredTech());
        }
        if (abilitiesBuilder_ == null) {
          if (!other.abilities_.isEmpty()) {
            if (abilities_.isEmpty()) {
              abilities_ = other.abilities_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureAbilitiesIsMutable();
              abilities_.addAll(other.abilities_);
            }
            onChanged();
          }
        } else {
          if (!other.abilities_.isEmpty()) {
            if (abilitiesBuilder_.isEmpty()) {
              abilitiesBuilder_.dispose();
              abilitiesBuilder_ = null;
              abilities_ = other.abilities_;
              bitField0_ = (bitField0_ & ~0x00000100);
              abilitiesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getAbilitiesFieldBuilder() : null;
            } else {
              abilitiesBuilder_.addAllMessages(other.abilities_);
            }
          }
        }
        if (upgradesBuilder_ == null) {
          if (!other.upgrades_.isEmpty()) {
            if (upgrades_.isEmpty()) {
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00000200);
            } else {
              ensureUpgradesIsMutable();
              upgrades_.addAll(other.upgrades_);
            }
            onChanged();
          }
        } else {
          if (!other.upgrades_.isEmpty()) {
            if (upgradesBuilder_.isEmpty()) {
              upgradesBuilder_.dispose();
              upgradesBuilder_ = null;
              upgrades_ = other.upgrades_;
              bitField0_ = (bitField0_ & ~0x00000200);
              upgradesBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getUpgradesFieldBuilder() : null;
            } else {
              upgradesBuilder_.addAllMessages(other.upgrades_);
            }
          }
        }
        if (other.hasArmorUpgrade()) {
          mergeArmorUpgrade(other.getArmorUpgrade());
        }
        if (other.hasMaxHitPoints()) {
          setMaxHitPoints(other.getMaxHitPoints());
        }
        if (other.hasMaxShields()) {
          setMaxShields(other.getMaxShields());
        }
        if (other.hasMaxEnergy()) {
          setMaxEnergy(other.getMaxEnergy());
        }
        if (other.hasArmor()) {
          setArmor(other.getArmor());
        }
        if (other.hasMineralPrice()) {
          setMineralPrice(other.getMineralPrice());
        }
        if (other.hasGasPrice()) {
          setGasPrice(other.getGasPrice());
        }
        if (other.hasBuildTime()) {
          setBuildTime(other.getBuildTime());
        }
        if (other.hasSupplyRequired()) {
          setSupplyRequired(other.getSupplyRequired());
        }
        if (other.hasSupplyProvided()) {
          setSupplyProvided(other.getSupplyProvided());
        }
        if (other.hasSpaceRequired()) {
          setSpaceRequired(other.getSpaceRequired());
        }
        if (other.hasSpaceProvided()) {
          setSpaceProvided(other.getSpaceProvided());
        }
        if (other.hasBuildScore()) {
          setBuildScore(other.getBuildScore());
        }
        if (other.hasDestroyScore()) {
          setDestroyScore(other.getDestroyScore());
        }
        if (other.hasSize()) {
          setSize(other.getSize());
        }
        if (other.hasTileWidth()) {
          setTileWidth(other.getTileWidth());
        }
        if (other.hasTileHeight()) {
          setTileHeight(other.getTileHeight());
        }
        if (other.hasDimensionLeft()) {
          setDimensionLeft(other.getDimensionLeft());
        }
        if (other.hasDimensionUp()) {
          setDimensionUp(other.getDimensionUp());
        }
        if (other.hasDimensionRight()) {
          setDimensionRight(other.getDimensionRight());
        }
        if (other.hasDimensionDown()) {
          setDimensionDown(other.getDimensionDown());
        }
        if (other.hasSeekRange()) {
          setSeekRange(other.getSeekRange());
        }
        if (other.hasSightRange()) {
          setSightRange(other.getSightRange());
        }
        if (other.hasGroundWeapon()) {
          mergeGroundWeapon(other.getGroundWeapon());
        }
        if (other.hasMaxGroundHits()) {
          setMaxGroundHits(other.getMaxGroundHits());
        }
        if (other.hasAirWeapon()) {
          mergeAirWeapon(other.getAirWeapon());
        }
        if (other.hasMaxAirHits()) {
          setMaxAirHits(other.getMaxAirHits());
        }
        if (other.hasTopSpeed()) {
          setTopSpeed(other.getTopSpeed());
        }
        if (other.hasAcceleration()) {
          setAcceleration(other.getAcceleration());
        }
        if (other.hasHaltDistance()) {
          setHaltDistance(other.getHaltDistance());
        }
        if (other.hasTurnRadius()) {
          setTurnRadius(other.getTurnRadius());
        }
        if (other.hasCanProduce()) {
          setCanProduce(other.getCanProduce());
        }
        if (other.hasCanAttack()) {
          setCanAttack(other.getCanAttack());
        }
        if (other.hasCanMove()) {
          setCanMove(other.getCanMove());
        }
        if (other.hasIsFlyer()) {
          setIsFlyer(other.getIsFlyer());
        }
        if (other.hasRegeneratesHP()) {
          setRegeneratesHP(other.getRegeneratesHP());
        }
        if (other.hasIsSpellcaster()) {
          setIsSpellcaster(other.getIsSpellcaster());
        }
        if (other.hasHasPermanentCloak()) {
          setHasPermanentCloak(other.getHasPermanentCloak());
        }
        if (other.hasIsInvincible()) {
          setIsInvincible(other.getIsInvincible());
        }
        if (other.hasIsOrganic()) {
          setIsOrganic(other.getIsOrganic());
        }
        if (other.hasIsMechanical()) {
          setIsMechanical(other.getIsMechanical());
        }
        if (other.hasIsRobotic()) {
          setIsRobotic(other.getIsRobotic());
        }
        if (other.hasIsDetector()) {
          setIsDetector(other.getIsDetector());
        }
        if (other.hasIsResourceContainer()) {
          setIsResourceContainer(other.getIsResourceContainer());
        }
        if (other.hasIsResourceDepot()) {
          setIsResourceDepot(other.getIsResourceDepot());
        }
        if (other.hasIsRefinery()) {
          setIsRefinery(other.getIsRefinery());
        }
        if (other.hasIsWorker()) {
          setIsWorker(other.getIsWorker());
        }
        if (other.hasRequiresPsi()) {
          setRequiresPsi(other.getRequiresPsi());
        }
        if (other.hasRequiresCreep()) {
          setRequiresCreep(other.getRequiresCreep());
        }
        if (other.hasIsTwoUnitsInOneEgg()) {
          setIsTwoUnitsInOneEgg(other.getIsTwoUnitsInOneEgg());
        }
        if (other.hasIsBurrowable()) {
          setIsBurrowable(other.getIsBurrowable());
        }
        if (other.hasIsCloakable()) {
          setIsCloakable(other.getIsCloakable());
        }
        if (other.hasIsBuilding()) {
          setIsBuilding(other.getIsBuilding());
        }
        if (other.hasIsAddon()) {
          setIsAddon(other.getIsAddon());
        }
        if (other.hasIsFlyingBuilding()) {
          setIsFlyingBuilding(other.getIsFlyingBuilding());
        }
        if (other.hasIsNeutral()) {
          setIsNeutral(other.getIsNeutral());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        return this;
      }