public void ReplaceInventoryItem <TOld, TNew>(MyInventory inventory, string oldSubTypeName, int oldCount, string newSubTypeName, int newCount)
            where TOld : MyObjectBuilder_Base, new()
            where TNew : MyObjectBuilder_Base, new()
        {
            var oldBuilder   = MyObjectBuilderSerializer.CreateNewObject <TOld>(oldSubTypeName);
            var existingItem = inventory.FindItem(oldBuilder.GetId());

            if (existingItem == null)
            {
                this.messageLogger.LogMessage($"Existing Item ({typeof(TOld)} - {oldSubTypeName}) not found in inventory so no replacement will be done");
                return;
            }

            var removed = inventory.Remove(existingItem, oldCount);

            if (!removed)
            {
                this.messageLogger.LogMessage($"Removing {oldCount} of {typeof(TOld)} - {oldSubTypeName} could not be done so no replacement will be done");
                return;
            }
            this.messageLogger.LogMessage($"Removing {oldCount} of {typeof(TOld)} - {oldSubTypeName} was done successfully");

            var newBuilder = MyObjectBuilderSerializer.CreateNewObject <TNew>(newSubTypeName);
            var added      = inventory.AddItems(newCount, newBuilder);

            this.messageLogger.LogMessage($"Adding {newCount} of {typeof(TNew)} - {newSubTypeName} was{(!added ? " NOT" : String.Empty)} done successfully");
        }