/// <summary>
        /// Find all assemblers on-grid which are enabled and pulling from conveyors.
        /// </summary>
        public float GetTotalParticipatingAssemblerSpeed(IMyGridTerminalSystem gts)
        {
            // ASSUMPTION: Only assembler type in the game has a base speed of 1.
            const float assemblerSpeed = 1;

            var blocks = new List <IMyAssembler>();

            gts.GetBlocksOfType(blocks);
            var totalSpeed = 0f;

            for (var i = 0; i < blocks.Count; i++)
            {
                var assembler = blocks[i];
                if (!assembler.IsOperational())
                {
                    continue;
                }
                if (!assembler.UseConveyorSystem)
                {
                    continue;
                }

                totalSpeed += assemblerSpeed;
                var moduleBonuses = SupportUtil.ParseModuleBonuses(assembler.DetailedInfo);
                if (moduleBonuses.Count > 0)
                {
                    var speedModifier = moduleBonuses[0] - 1; // +1 Speed per 100%.
                    totalSpeed += speedModifier;
                }
            }
            return(totalSpeed);
        }
        public static Refinery Get(IMyRefinery block, RefineryType type, double speedFactor)
        {
            var item = GetOrCreate();

            item.block                 = block;
            item.refineSpeed           = type.Speed;
            item.materialEfficiency    = type.Efficiency;
            item.BlockDefinitionString = type.BlockDefinitionName;

            var moduleBonuses = SupportUtil.ParseModuleBonuses(block.DetailedInfo);

            if (moduleBonuses.Count > 0)
            {
                var speedModifier = moduleBonuses[0] - 1; // +1 Speed per 100%.
                item.refineSpeed += speedModifier;
            }
            if (moduleBonuses.Count > 1)
            {
                var efficiencyModifier = moduleBonuses[1];
                item.materialEfficiency *= efficiencyModifier;
            }
            item.refineSpeed *= speedFactor;
            return(item);
        }