public static void InjectMembers(this IVirtualMachine virtualMachine, GamePatch gamePatch, Type type)
        {
            if (((AvailableSinceAttribute)Attribute.GetCustomAttribute(type, typeof(AvailableSinceAttribute)))?.AvailableSince > gamePatch)
            {
                return;
            }

            foreach (var member in type.GetMembers())
            {
                if (((AvailableSinceAttribute)Attribute.GetCustomAttribute(member, typeof(AvailableSinceAttribute)))?.AvailableSince > gamePatch)
                {
                    continue;
                }

                if (member.DeclaringType == type)
                {
                    if (member is FieldInfo field)
                    {
                        virtualMachine.InjectField(field);
                    }
                    else if (member is MethodInfo method)
                    {
                        virtualMachine.InjectMethod(method);
                    }
                }
            }
        }