public override bool HasBuildingMaterials(MyEntity builder)
        {
            if (MySession.Static.CreativeMode || (MySession.Static.IsAdminModeEnabled(Sync.MyId) && builder == MySession.Static.LocalCharacter))
            {
                return(true);
            }

            if (builder == null)
            {
                return(false);
            }
            var inventory = GetBuilderInventory(builder);

            if (inventory == null)
            {
                return(false);
            }
            MyInventory shipInventory = null;
            MyCockpit   cockpit       = null;
            long        identityId    = MySession.Static.LocalPlayerId;

            if (builder is MyCharacter)
            {//construction cockpit?
                cockpit = (builder as MyCharacter).IsUsing as MyCockpit;
                if (cockpit != null)
                {
                    shipInventory = cockpit.GetInventory();
                    identityId    = cockpit.ControllerInfo.ControllingIdentityId;
                }
                else
                if ((builder as MyCharacter).ControllerInfo != null)
                {
                    identityId = (builder as MyCharacter).ControllerInfo.ControllingIdentityId;
                }
                else
                {
                    Debug.Fail("failed to get identityId");
                }
            }
            bool result = true;

            foreach (var entry in m_materialList.RequiredMaterials)
            {
                result &= inventory.GetItemAmount(entry.Key) >= entry.Value;
                if (!result && shipInventory != null)
                {
                    result = shipInventory.GetItemAmount(entry.Key) >= entry.Value;
                    if (!result)
                    {
                        //MyGridConveyorSystem.ItemPullRequest((MySession.Static.ControlledEntity as MyCockpit), shipInventory, MySession.Static.LocalPlayerId, entry.Key, entry.Value);
                        result = MyGridConveyorSystem.ConveyorSystemItemAmount(cockpit, shipInventory, identityId, entry.Key) >= entry.Value;
                    }
                }
                if (!result)
                {
                    break;
                }
            }
            return(result);
        }